Project

General

Profile

Download (15.3 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'

class UsergroupMemberTest < ActiveSupport::TestCase

def setup
User.current = User.find_by_login "admin"
end

test "remove membership of user in a group" do
setup_admins_scenario
assert_includes @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role

@superadmins.users.clear

assert_not_include @superadmin_user.reload.cached_user_roles.map(&:role), @semiadmin_role
cached_usergroups = @superadmin_user.cached_usergroups
assert_not_include cached_usergroups, @superadmins
assert_not_include cached_usergroups, @admins
assert_not_include cached_usergroups, @semiadmins
end

test "searching for user roles" do
setup_admins_scenario

found = @superadmins.usergroup_members.first.send :find_all_user_roles
assert_includes found, @semiadmin_ur
assert_includes found, @admin_ur
assert_includes found, @superadmin_ur
assert_not_includes found, @role1
assert_not_includes found, @role2
assert_not_includes found, @role3
end

test "searching for user groups" do
setup_admins_scenario

found = @admins.usergroup_members.first.send :find_all_usergroups
assert_includes found, @semiadmins
assert_includes found, @admins
assert_not_include found, @superadmins
end

test "searching for affected users memberships" do
setup_admins_scenario

found = @semiadmins.usergroup_members.where("member_type = 'Usergroup'").first.send :find_all_affected_users
assert_includes found, @admin_user
assert_includes found, @superadmin_user
assert_not_includes found, @semiadmin_user

found = @superadmins.usergroup_members.where("member_type = 'User'").first.send :find_all_affected_users
assert_not_includes found, @admin_user
assert_not_includes found, @semiadmin_user
assert_includes found, @superadmin_user
end

test "remove root member in tree" do
setup_admins_scenario

assert_include @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_include @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role

@semiadmins.usergroups.clear
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_includes @semiadmin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @admin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @superadmin_role

assert_not_include @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_not_include @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role

assert_includes @semiadmin_user.cached_usergroups, @semiadmins
assert_not_includes @admin_user.cached_usergroups, @semiadmins
assert_includes @admin_user.cached_usergroups, @admins
assert_not_includes @superadmin_user.cached_usergroups, @semiadmins
assert_includes @superadmin_user.cached_usergroups, @admins
assert_includes @superadmin_user.cached_usergroups, @superadmins
end

test "remove leaf member in tree" do
setup_admins_scenario

assert_include @semiadmin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_include @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_include @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role

@admins.usergroups.clear
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_includes @semiadmin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @admin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @superadmin_role
assert_include @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_not_include @superadmin_user.cached_user_roles.map(&:role), @admin_role
assert_not_include @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role

assert_includes @semiadmin_user.cached_usergroups, @semiadmins
assert_includes @admin_user.cached_usergroups, @semiadmins
assert_includes @admin_user.cached_usergroups, @admins
assert_not_includes @superadmin_user.cached_usergroups, @semiadmins
assert_not_includes @superadmin_user.cached_usergroups, @admins
assert_includes @superadmin_user.cached_usergroups, @superadmins
end

test "add new memership to the root" do
setup_admins_scenario

basic = FactoryGirl.create :usergroup, :name => 'um_basic'
basic_role = FactoryGirl.create :role, :name => 'um_basic_role'
basic.roles<< basic_role
basic.usergroups<< @semiadmins
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_includes @semiadmin_user.cached_user_roles.map(&:role), basic_role
assert_includes @admin_user.cached_user_roles.map(&:role), basic_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), basic_role

assert_includes @semiadmin_user.cached_usergroups, basic
assert_includes @admin_user.cached_usergroups, basic
assert_includes @superadmin_user.cached_usergroups, basic
end

test "add new memership to the middle of chain" do
setup_admins_scenario

basic = FactoryGirl.create :usergroup, :name => 'um_basic'
basic_role = FactoryGirl.create :role, :name => 'um_basic_role'
basic.roles<< basic_role
basic.usergroups<< @admins
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_not_include @semiadmin_user.cached_user_roles.map(&:role), basic_role
assert_includes @admin_user.cached_user_roles.map(&:role), basic_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), basic_role

assert_not_include @semiadmin_user.cached_usergroups, basic
assert_includes @admin_user.cached_usergroups, basic
assert_includes @superadmin_user.cached_usergroups, basic
end

test "add new memership to the leaf" do
setup_admins_scenario

basic = FactoryGirl.create :usergroup, :name => 'um_basic'
basic_role = FactoryGirl.create :role, :name => 'um_basic_role'
basic.roles<< basic_role
basic.usergroups<< @superadmins
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_not_includes @semiadmin_user.cached_user_roles.map(&:role), basic_role
assert_not_includes @admin_user.cached_user_roles.map(&:role), basic_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), basic_role

assert_not_include @semiadmin_user.cached_usergroups, basic
assert_not_include @admin_user.cached_usergroups, basic
assert_includes @superadmin_user.cached_usergroups, basic
end

test "change membership (member) in the middle of chain" do
setup_admins_scenario

membership = @semiadmins.usergroup_members.where(:member_id => @admins.id).first
membership.member = @superadmins
membership.save
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_includes @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @superadmin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @admin_role
assert_not_includes @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @semiadmin_role

assert_includes @superadmin_user.cached_usergroups, @semiadmins
assert_includes @superadmin_user.cached_usergroups, @admins
assert_includes @superadmin_user.cached_usergroups, @superadmins
assert_not_include @admin_user.cached_usergroups, @semiadmins
assert_include @admin_user.cached_usergroups, @admins
assert_include @semiadmin_user.cached_usergroups, @semiadmins
end

test "change membership (hostgroup) in the middle of chain" do
setup_admins_scenario

membership = @admins.usergroup_members.where(:member_id => @superadmins.id).first
membership.usergroup = @semiadmins
membership.save
@semiadmin_user.reload; @admin_user.reload; @superadmin_user.reload

assert_includes @superadmin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @superadmin_user.cached_user_roles.map(&:role), @superadmin_role
assert_not_includes @superadmin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @admin_user.cached_user_roles.map(&:role), @semiadmin_role
assert_includes @admin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @semiadmin_role

assert_includes @superadmin_user.cached_usergroups, @superadmins
assert_includes @superadmin_user.cached_usergroups, @semiadmins
assert_not_include @superadmin_user.cached_usergroups, @admins
assert_includes @admin_user.cached_usergroups, @semiadmins
assert_includes @admin_user.cached_usergroups, @admins
assert_includes @semiadmin_user.cached_usergroups, @semiadmins
end

test "user is in two joined groups, second membership is removed" do
setup_redundant_scenario

@admins.users = []
assert_not_include @semiadmin_user.cached_user_roles.map(&:role), @admin_role
end

test "user is in three two joined groups, middle membership is removed" do
setup_redundant_scenario
@superadmins = FactoryGirl.create :usergroup, :name => 'um_superadmins'
@superadmins.usergroups = [@semiadmins]
@superadmins.roles<< @admin_role

@admins.users = []
@semiadmin_user.reload
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role

assert_includes @semiadmin_user.cached_usergroups, @superadmins
end

test "diamond-with-tail usergroups, one of way is removed" do
@a = FactoryGirl.create :usergroup, :name => 'um_a'
@b = FactoryGirl.create :usergroup, :name => 'um_b'
@c = FactoryGirl.create :usergroup, :name => 'um_c'
@d = FactoryGirl.create :usergroup, :name => 'um_d'
@e = FactoryGirl.create :usergroup, :name => 'um_e'
@a.usergroups = [@b, @c]
@b.usergroups = [@d]
@c.usergroups = [@d]
@d.usergroups = [@e]

@user1 = FactoryGirl.create(:user, :login => 'um_user1')
@user2 = FactoryGirl.create(:user, :login => 'um_user2')
@user1.usergroups = [@d.reload] # @d cached #users already as []
@user2.usergroups = [@e]
@role = FactoryGirl.create(:role, :name => 'um_role')
@role_ur = FactoryGirl.create :user_group_user_role, :owner => @a, :role => @role

assert_includes @user1.reload.cached_user_roles.map(&:role), @role
assert_includes @user2.reload.cached_user_roles.map(&:role), @role

assert_includes @user1.cached_usergroups, @a
assert_includes @user1.cached_usergroups, @b
assert_includes @user1.cached_usergroups, @c
assert_includes @user1.cached_usergroups, @d
assert_not_includes @user1.cached_usergroups, @e
assert_includes @user2.cached_usergroups, @a
assert_includes @user2.cached_usergroups, @b
assert_includes @user2.cached_usergroups, @c
assert_includes @user2.cached_usergroups, @d
assert_includes @user2.cached_usergroups, @e

@c.usergroups = []
assert_includes @user1.reload.cached_user_roles.map(&:role), @role
assert_includes @user2.reload.cached_user_roles.map(&:role), @role

assert_includes @user1.cached_usergroups, @a
assert_includes @user1.cached_usergroups, @b
assert_not_includes @user1.cached_usergroups, @c
assert_includes @user1.cached_usergroups, @d
assert_not_includes @user1.cached_usergroups, @e
assert_includes @user2.cached_usergroups, @a
assert_includes @user2.cached_usergroups, @b
assert_not_includes @user2.cached_usergroups, @c
assert_includes @user2.cached_usergroups, @d
assert_includes @user2.cached_usergroups, @e
end

test "user is in two joined groups, first membership is removed" do
setup_redundant_scenario

@semiadmins.users = []
@semiadmin_user.reload
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @semiadmin_user.cached_usergroups, @semiadmins
assert_includes @semiadmin_user.cached_usergroups, @admins
end

test "user is in two joined groups, joining is removed" do
setup_redundant_scenario

@semiadmins.usergroups = []
@semiadmin_user.reload

assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @semiadmin_user.cached_usergroups, @semiadmins
assert_includes @semiadmin_user.cached_usergroups, @admins
end

test "user is in two joined groups with redundant role, second membership is removed" do
setup_redundant_scenario
@semiadmin_ur = FactoryGirl.create :user_group_user_role, :owner => @semiadmins, :role => @admin_role

@admins.users = []
@semiadmin_user.reload
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role
assert_includes @semiadmin_user.cached_usergroups, @semiadmins
end

test "user is in two joined groups with redundant role, first membership is removed" do
setup_redundant_scenario
@semiadmin_ur = FactoryGirl.create :user_group_user_role, :owner => @semiadmins, :role => @admin_role

@semiadmins.users = []
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role
end

test "user is in two joined groups with redundant role, joining is removed" do
setup_redundant_scenario
@semiadmin_ur = FactoryGirl.create :user_group_user_role, :owner => @semiadmins, :role => @admin_role

@semiadmins.usergroups = []
assert_includes @semiadmin_user.cached_user_roles.map(&:role), @admin_role
end

def setup_redundant_scenario
@semiadmins = FactoryGirl.create :usergroup, :name => 'um_semiadmins'
@admins = FactoryGirl.create :usergroup, :name => 'um_admins'

@semiadmins.usergroups = [@admins]

@semiadmin_user = FactoryGirl.create(:user, :login => 'um_semiadmin1')

@semiadmins.users = [@semiadmin_user]
@admins.users = [@semiadmin_user]

@admin_role = FactoryGirl.create(:role, :name => 'um_admin')

@admin_ur = FactoryGirl.create :user_group_user_role, :owner => @admins, :role => @admin_role
end

def setup_admins_scenario
@semiadmins = FactoryGirl.create :usergroup, :name => 'um_semiadmins'
@admins = FactoryGirl.create :usergroup, :name => 'um_admins'
@superadmins = FactoryGirl.create :usergroup, :name => 'um_superadmins'

@semiadmins.usergroups = [@admins]
@admins.usergroups = [@superadmins]

@semiadmin_user = FactoryGirl.create(:user, :login => 'um_semiadmin1')
@admin_user = FactoryGirl.create(:user, :login => 'um_admin1')
@superadmin_user = FactoryGirl.create(:user, :login => 'um_superadmin1')

@semiadmins.users = [@semiadmin_user]
@admins.users = [@admin_user]
@superadmins.users = [@superadmin_user]

@semiadmin_role = FactoryGirl.create(:role, :name => 'um_semiadmin')
@admin_role = FactoryGirl.create(:role, :name => 'um_admin')
@superadmin_role = FactoryGirl.create(:role, :name => 'um_superadmin')

@semiadmin_ur = FactoryGirl.create :user_group_user_role, :owner => @semiadmins, :role => @semiadmin_role
@admin_ur = FactoryGirl.create :user_group_user_role, :owner => @admins, :role => @admin_role
@superadmin_ur = FactoryGirl.create :user_group_user_role, :owner => @superadmins, :role => @superadmin_role

@role1 = FactoryGirl.create(:role)
@role2 = FactoryGirl.create(:role)
@role3 = FactoryGirl.create(:role)
@semiadmin_user.roles<< @role1
@admin_user.roles<< @role2
@superadmin_user.roles<< @role3
end
end
(89-89/91)