Mercurial > hg > soundsoftware-site
comparison test/unit/project_members_inheritance_test.rb @ 1298:4f746d8966dd redmine_2.3_integration
Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:28:30 +0100 |
parents | 622f24f53b42 |
children |
comparison
equal
deleted
inserted
replaced
1297:0a574315af3e | 1298:4f746d8966dd |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with this program; if not, write to the Free Software | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 require File.expand_path('../../test_helper', __FILE__) | |
19 | |
20 class ProjectMembersInheritanceTest < ActiveSupport::TestCase | |
21 fixtures :roles, :users | |
22 | |
23 def setup | |
24 @parent = Project.generate! | |
25 @member = Member.create!(:principal => User.find(2), :project => @parent, :role_ids => [1, 2]) | |
26 assert_equal 2, @member.reload.roles.size | |
27 end | |
28 | |
29 def test_project_created_with_inherit_members_disabled_should_not_inherit_members | |
30 assert_no_difference 'Member.count' do | |
31 project = Project.generate_with_parent!(@parent, :inherit_members => false) | |
32 | |
33 assert_equal 0, project.memberships.count | |
34 end | |
35 end | |
36 | |
37 def test_project_created_with_inherit_members_should_inherit_members | |
38 assert_difference 'Member.count', 1 do | |
39 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
40 project.reload | |
41 | |
42 assert_equal 1, project.memberships.count | |
43 member = project.memberships.first | |
44 assert_equal @member.principal, member.principal | |
45 assert_equal @member.roles.sort, member.roles.sort | |
46 end | |
47 end | |
48 | |
49 def test_turning_on_inherit_members_should_inherit_members | |
50 Project.generate_with_parent!(@parent, :inherit_members => false) | |
51 | |
52 assert_difference 'Member.count', 1 do | |
53 project = Project.order('id desc').first | |
54 project.inherit_members = true | |
55 project.save! | |
56 project.reload | |
57 | |
58 assert_equal 1, project.memberships.count | |
59 member = project.memberships.first | |
60 assert_equal @member.principal, member.principal | |
61 assert_equal @member.roles.sort, member.roles.sort | |
62 end | |
63 end | |
64 | |
65 def test_turning_off_inherit_members_should_remove_inherited_members | |
66 Project.generate_with_parent!(@parent, :inherit_members => true) | |
67 | |
68 assert_difference 'Member.count', -1 do | |
69 project = Project.order('id desc').first | |
70 project.inherit_members = false | |
71 project.save! | |
72 project.reload | |
73 | |
74 assert_equal 0, project.memberships.count | |
75 end | |
76 end | |
77 | |
78 def test_moving_a_root_project_under_a_parent_should_inherit_members | |
79 Project.generate!(:inherit_members => true) | |
80 project = Project.order('id desc').first | |
81 | |
82 assert_difference 'Member.count', 1 do | |
83 project.set_parent!(@parent) | |
84 project.reload | |
85 | |
86 assert_equal 1, project.memberships.count | |
87 member = project.memberships.first | |
88 assert_equal @member.principal, member.principal | |
89 assert_equal @member.roles.sort, member.roles.sort | |
90 end | |
91 end | |
92 | |
93 def test_moving_a_subproject_as_root_should_loose_inherited_members | |
94 Project.generate_with_parent!(@parent, :inherit_members => true) | |
95 project = Project.order('id desc').first | |
96 | |
97 assert_difference 'Member.count', -1 do | |
98 project.set_parent!(nil) | |
99 project.reload | |
100 | |
101 assert_equal 0, project.memberships.count | |
102 end | |
103 end | |
104 | |
105 def test_moving_a_subproject_to_another_parent_should_change_inherited_members | |
106 other_parent = Project.generate! | |
107 other_member = Member.create!(:principal => User.find(4), :project => other_parent, :role_ids => [3]) | |
108 | |
109 Project.generate_with_parent!(@parent, :inherit_members => true) | |
110 project = Project.order('id desc').first | |
111 project.set_parent!(other_parent.reload) | |
112 project.reload | |
113 | |
114 assert_equal 1, project.memberships.count | |
115 member = project.memberships.first | |
116 assert_equal other_member.principal, member.principal | |
117 assert_equal other_member.roles.sort, member.roles.sort | |
118 end | |
119 | |
120 def test_inheritance_should_propagate_to_subprojects | |
121 project = Project.generate_with_parent!(@parent, :inherit_members => false) | |
122 subproject = Project.generate_with_parent!(project, :inherit_members => true) | |
123 project.reload | |
124 | |
125 assert_difference 'Member.count', 2 do | |
126 project.inherit_members = true | |
127 project.save | |
128 project.reload | |
129 subproject.reload | |
130 | |
131 assert_equal 1, project.memberships.count | |
132 assert_equal 1, subproject.memberships.count | |
133 member = subproject.memberships.first | |
134 assert_equal @member.principal, member.principal | |
135 assert_equal @member.roles.sort, member.roles.sort | |
136 end | |
137 end | |
138 | |
139 def test_inheritance_removal_should_propagate_to_subprojects | |
140 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
141 subproject = Project.generate_with_parent!(project, :inherit_members => true) | |
142 project.reload | |
143 | |
144 assert_difference 'Member.count', -2 do | |
145 project.inherit_members = false | |
146 project.save | |
147 project.reload | |
148 subproject.reload | |
149 | |
150 assert_equal 0, project.memberships.count | |
151 assert_equal 0, subproject.memberships.count | |
152 end | |
153 end | |
154 | |
155 def test_adding_a_member_should_propagate | |
156 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
157 | |
158 assert_difference 'Member.count', 2 do | |
159 member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3]) | |
160 | |
161 inherited_member = project.memberships.order('id desc').first | |
162 assert_equal member.principal, inherited_member.principal | |
163 assert_equal member.roles.sort, inherited_member.roles.sort | |
164 end | |
165 end | |
166 | |
167 def test_adding_a_member_should_not_propagate_if_child_does_not_inherit | |
168 project = Project.generate_with_parent!(@parent, :inherit_members => false) | |
169 | |
170 assert_difference 'Member.count', 1 do | |
171 member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3]) | |
172 | |
173 assert_nil project.reload.memberships.detect {|m| m.principal == member.principal} | |
174 end | |
175 end | |
176 | |
177 def test_removing_a_member_should_propagate | |
178 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
179 | |
180 assert_difference 'Member.count', -2 do | |
181 @member.reload.destroy | |
182 project.reload | |
183 | |
184 assert_equal 0, project.memberships.count | |
185 end | |
186 end | |
187 | |
188 def test_adding_a_group_member_should_propagate_with_its_users | |
189 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
190 group = Group.generate! | |
191 user = User.find(4) | |
192 group.users << user | |
193 | |
194 assert_difference 'Member.count', 4 do | |
195 assert_difference 'MemberRole.count', 8 do | |
196 member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3]) | |
197 project.reload | |
198 | |
199 inherited_group_member = project.memberships.detect {|m| m.principal == group} | |
200 assert_not_nil inherited_group_member | |
201 assert_equal member.roles.sort, inherited_group_member.roles.sort | |
202 | |
203 inherited_user_member = project.memberships.detect {|m| m.principal == user} | |
204 assert_not_nil inherited_user_member | |
205 assert_equal member.roles.sort, inherited_user_member.roles.sort | |
206 end | |
207 end | |
208 end | |
209 | |
210 def test_removing_a_group_member_should_propagate | |
211 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
212 group = Group.generate! | |
213 user = User.find(4) | |
214 group.users << user | |
215 member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3]) | |
216 | |
217 assert_difference 'Member.count', -4 do | |
218 assert_difference 'MemberRole.count', -8 do | |
219 member.destroy | |
220 project.reload | |
221 | |
222 inherited_group_member = project.memberships.detect {|m| m.principal == group} | |
223 assert_nil inherited_group_member | |
224 | |
225 inherited_user_member = project.memberships.detect {|m| m.principal == user} | |
226 assert_nil inherited_user_member | |
227 end | |
228 end | |
229 end | |
230 | |
231 def test_adding_user_who_use_is_already_a_member_to_parent_project_should_merge_roles | |
232 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
233 user = User.find(4) | |
234 Member.create!(:principal => user, :project => project, :role_ids => [1, 2]) | |
235 | |
236 assert_difference 'Member.count', 1 do | |
237 Member.create!(:principal => User.find(4), :project => @parent.reload, :role_ids => [1, 3]) | |
238 | |
239 member = project.reload.memberships.detect {|m| m.principal == user} | |
240 assert_not_nil member | |
241 assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id) | |
242 end | |
243 end | |
244 | |
245 def test_turning_on_inheritance_with_user_who_is_already_a_member_should_merge_roles | |
246 project = Project.generate_with_parent!(@parent) | |
247 user = @member.user | |
248 Member.create!(:principal => user, :project => project, :role_ids => [1, 3]) | |
249 project.reload | |
250 | |
251 assert_no_difference 'Member.count' do | |
252 project.inherit_members = true | |
253 project.save! | |
254 | |
255 member = project.reload.memberships.detect {|m| m.principal == user} | |
256 assert_not_nil member | |
257 assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id) | |
258 end | |
259 end | |
260 end |