123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- # Redmine - project management software
- # Copyright (C) 2006-2013 Jean-Philippe Lang
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- require File.expand_path('../../test_helper', __FILE__)
-
- class ProjectMembersInheritanceTest < ActiveSupport::TestCase
- fixtures :roles, :users
-
- def setup
- @parent = Project.generate!
- @member = Member.create!(:principal => User.find(2), :project => @parent, :role_ids => [1, 2])
- assert_equal 2, @member.reload.roles.size
- end
-
- def test_project_created_with_inherit_members_disabled_should_not_inherit_members
- assert_no_difference 'Member.count' do
- project = Project.generate_with_parent!(@parent, :inherit_members => false)
-
- assert_equal 0, project.memberships.count
- end
- end
-
- def test_project_created_with_inherit_members_should_inherit_members
- assert_difference 'Member.count', 1 do
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
- project.reload
-
- assert_equal 1, project.memberships.count
- member = project.memberships.first
- assert_equal @member.principal, member.principal
- assert_equal @member.roles.sort, member.roles.sort
- end
- end
-
- def test_turning_on_inherit_members_should_inherit_members
- Project.generate_with_parent!(@parent, :inherit_members => false)
-
- assert_difference 'Member.count', 1 do
- project = Project.order('id desc').first
- project.inherit_members = true
- project.save!
- project.reload
-
- assert_equal 1, project.memberships.count
- member = project.memberships.first
- assert_equal @member.principal, member.principal
- assert_equal @member.roles.sort, member.roles.sort
- end
- end
-
- def test_turning_off_inherit_members_should_remove_inherited_members
- Project.generate_with_parent!(@parent, :inherit_members => true)
-
- assert_difference 'Member.count', -1 do
- project = Project.order('id desc').first
- project.inherit_members = false
- project.save!
- project.reload
-
- assert_equal 0, project.memberships.count
- end
- end
-
- def test_moving_a_root_project_under_a_parent_should_inherit_members
- Project.generate!(:inherit_members => true)
- project = Project.order('id desc').first
-
- assert_difference 'Member.count', 1 do
- project.set_parent!(@parent)
- project.reload
-
- assert_equal 1, project.memberships.count
- member = project.memberships.first
- assert_equal @member.principal, member.principal
- assert_equal @member.roles.sort, member.roles.sort
- end
- end
-
- def test_moving_a_subproject_as_root_should_loose_inherited_members
- Project.generate_with_parent!(@parent, :inherit_members => true)
- project = Project.order('id desc').first
-
- assert_difference 'Member.count', -1 do
- project.set_parent!(nil)
- project.reload
-
- assert_equal 0, project.memberships.count
- end
- end
-
- def test_moving_a_subproject_to_another_parent_should_change_inherited_members
- other_parent = Project.generate!
- other_member = Member.create!(:principal => User.find(4), :project => other_parent, :role_ids => [3])
-
- Project.generate_with_parent!(@parent, :inherit_members => true)
- project = Project.order('id desc').first
- project.set_parent!(other_parent.reload)
- project.reload
-
- assert_equal 1, project.memberships.count
- member = project.memberships.first
- assert_equal other_member.principal, member.principal
- assert_equal other_member.roles.sort, member.roles.sort
- end
-
- def test_inheritance_should_propagate_to_subprojects
- project = Project.generate_with_parent!(@parent, :inherit_members => false)
- subproject = Project.generate_with_parent!(project, :inherit_members => true)
- project.reload
-
- assert_difference 'Member.count', 2 do
- project.inherit_members = true
- project.save
- project.reload
- subproject.reload
-
- assert_equal 1, project.memberships.count
- assert_equal 1, subproject.memberships.count
- member = subproject.memberships.first
- assert_equal @member.principal, member.principal
- assert_equal @member.roles.sort, member.roles.sort
- end
- end
-
- def test_inheritance_removal_should_propagate_to_subprojects
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
- subproject = Project.generate_with_parent!(project, :inherit_members => true)
- project.reload
-
- assert_difference 'Member.count', -2 do
- project.inherit_members = false
- project.save
- project.reload
- subproject.reload
-
- assert_equal 0, project.memberships.count
- assert_equal 0, subproject.memberships.count
- end
- end
-
- def test_adding_a_member_should_propagate
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
-
- assert_difference 'Member.count', 2 do
- member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3])
-
- inherited_member = project.memberships.order('id desc').first
- assert_equal member.principal, inherited_member.principal
- assert_equal member.roles.sort, inherited_member.roles.sort
- end
- end
-
- def test_adding_a_member_should_not_propagate_if_child_does_not_inherit
- project = Project.generate_with_parent!(@parent, :inherit_members => false)
-
- assert_difference 'Member.count', 1 do
- member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3])
-
- assert_nil project.reload.memberships.detect {|m| m.principal == member.principal}
- end
- end
-
- def test_removing_a_member_should_propagate
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
-
- assert_difference 'Member.count', -2 do
- @member.reload.destroy
- project.reload
-
- assert_equal 0, project.memberships.count
- end
- end
-
- def test_adding_a_group_member_should_propagate_with_its_users
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
- group = Group.generate!
- user = User.find(4)
- group.users << user
-
- assert_difference 'Member.count', 4 do
- assert_difference 'MemberRole.count', 8 do
- member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3])
- project.reload
-
- inherited_group_member = project.memberships.detect {|m| m.principal == group}
- assert_not_nil inherited_group_member
- assert_equal member.roles.sort, inherited_group_member.roles.sort
-
- inherited_user_member = project.memberships.detect {|m| m.principal == user}
- assert_not_nil inherited_user_member
- assert_equal member.roles.sort, inherited_user_member.roles.sort
- end
- end
- end
-
- def test_removing_a_group_member_should_propagate
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
- group = Group.generate!
- user = User.find(4)
- group.users << user
- member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3])
-
- assert_difference 'Member.count', -4 do
- assert_difference 'MemberRole.count', -8 do
- member.destroy
- project.reload
-
- inherited_group_member = project.memberships.detect {|m| m.principal == group}
- assert_nil inherited_group_member
-
- inherited_user_member = project.memberships.detect {|m| m.principal == user}
- assert_nil inherited_user_member
- end
- end
- end
-
- def test_adding_user_who_use_is_already_a_member_to_parent_project_should_merge_roles
- project = Project.generate_with_parent!(@parent, :inherit_members => true)
- user = User.find(4)
- Member.create!(:principal => user, :project => project, :role_ids => [1, 2])
-
- assert_difference 'Member.count', 1 do
- Member.create!(:principal => User.find(4), :project => @parent.reload, :role_ids => [1, 3])
-
- member = project.reload.memberships.detect {|m| m.principal == user}
- assert_not_nil member
- assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id)
- end
- end
-
- def test_turning_on_inheritance_with_user_who_is_already_a_member_should_merge_roles
- project = Project.generate_with_parent!(@parent)
- user = @member.user
- Member.create!(:principal => user, :project => project, :role_ids => [1, 3])
- project.reload
-
- assert_no_difference 'Member.count' do
- project.inherit_members = true
- project.save!
-
- member = project.reload.memberships.detect {|m| m.principal == user}
- assert_not_nil member
- assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id)
- end
- end
- end
|