Mercurial > hg > soundsoftware-site
comparison test/unit/project_members_inheritance_test.rb @ 1464:261b3d9a4903 redmine-2.4
Update to Redmine 2.4 branch rev 12663
author | Chris Cannam |
---|---|
date | Tue, 14 Jan 2014 14:37:42 +0000 |
parents | |
children | e248c7af89ec |
comparison
equal
deleted
inserted
replaced
1296:038ba2d95de8 | 1464:261b3d9a4903 |
---|---|
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 other_member.reload | |
109 | |
110 Project.generate_with_parent!(@parent, :inherit_members => true) | |
111 project = Project.order('id desc').first | |
112 project.set_parent!(other_parent.reload) | |
113 project.reload | |
114 | |
115 assert_equal 1, project.memberships.count | |
116 member = project.memberships.first | |
117 assert_equal other_member.principal, member.principal | |
118 assert_equal other_member.roles.sort, member.roles.sort | |
119 end | |
120 | |
121 def test_inheritance_should_propagate_to_subprojects | |
122 project = Project.generate_with_parent!(@parent, :inherit_members => false) | |
123 subproject = Project.generate_with_parent!(project, :inherit_members => true) | |
124 project.reload | |
125 | |
126 assert_difference 'Member.count', 2 do | |
127 project.inherit_members = true | |
128 project.save | |
129 project.reload | |
130 subproject.reload | |
131 | |
132 assert_equal 1, project.memberships.count | |
133 assert_equal 1, subproject.memberships.count | |
134 member = subproject.memberships.first | |
135 assert_equal @member.principal, member.principal | |
136 assert_equal @member.roles.sort, member.roles.sort | |
137 end | |
138 end | |
139 | |
140 def test_inheritance_removal_should_propagate_to_subprojects | |
141 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
142 subproject = Project.generate_with_parent!(project, :inherit_members => true) | |
143 project.reload | |
144 | |
145 assert_difference 'Member.count', -2 do | |
146 project.inherit_members = false | |
147 project.save | |
148 project.reload | |
149 subproject.reload | |
150 | |
151 assert_equal 0, project.memberships.count | |
152 assert_equal 0, subproject.memberships.count | |
153 end | |
154 end | |
155 | |
156 def test_adding_a_member_should_propagate | |
157 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
158 | |
159 assert_difference 'Member.count', 2 do | |
160 member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3]) | |
161 member.reload | |
162 | |
163 inherited_member = project.memberships.order('id desc').first | |
164 assert_equal member.principal, inherited_member.principal | |
165 assert_equal member.roles.sort, inherited_member.roles.sort | |
166 end | |
167 end | |
168 | |
169 def test_adding_a_member_should_not_propagate_if_child_does_not_inherit | |
170 project = Project.generate_with_parent!(@parent, :inherit_members => false) | |
171 | |
172 assert_difference 'Member.count', 1 do | |
173 member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3]) | |
174 | |
175 assert_nil project.reload.memberships.detect {|m| m.principal == member.principal} | |
176 end | |
177 end | |
178 | |
179 def test_removing_a_member_should_propagate | |
180 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
181 | |
182 assert_difference 'Member.count', -2 do | |
183 @member.reload.destroy | |
184 project.reload | |
185 | |
186 assert_equal 0, project.memberships.count | |
187 end | |
188 end | |
189 | |
190 def test_adding_a_group_member_should_propagate_with_its_users | |
191 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
192 group = Group.generate! | |
193 user = User.find(4) | |
194 group.users << user | |
195 | |
196 assert_difference 'Member.count', 4 do | |
197 assert_difference 'MemberRole.count', 8 do | |
198 member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3]) | |
199 project.reload | |
200 member.reload | |
201 | |
202 inherited_group_member = project.memberships.detect {|m| m.principal == group} | |
203 assert_not_nil inherited_group_member | |
204 assert_equal member.roles.sort, inherited_group_member.roles.sort | |
205 | |
206 inherited_user_member = project.memberships.detect {|m| m.principal == user} | |
207 assert_not_nil inherited_user_member | |
208 assert_equal member.roles.sort, inherited_user_member.roles.sort | |
209 end | |
210 end | |
211 end | |
212 | |
213 def test_removing_a_group_member_should_propagate | |
214 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
215 group = Group.generate! | |
216 user = User.find(4) | |
217 group.users << user | |
218 member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3]) | |
219 | |
220 assert_difference 'Member.count', -4 do | |
221 assert_difference 'MemberRole.count', -8 do | |
222 member.destroy | |
223 project.reload | |
224 | |
225 inherited_group_member = project.memberships.detect {|m| m.principal == group} | |
226 assert_nil inherited_group_member | |
227 | |
228 inherited_user_member = project.memberships.detect {|m| m.principal == user} | |
229 assert_nil inherited_user_member | |
230 end | |
231 end | |
232 end | |
233 | |
234 def test_adding_user_who_use_is_already_a_member_to_parent_project_should_merge_roles | |
235 project = Project.generate_with_parent!(@parent, :inherit_members => true) | |
236 user = User.find(4) | |
237 Member.create!(:principal => user, :project => project, :role_ids => [1, 2]) | |
238 | |
239 assert_difference 'Member.count', 1 do | |
240 Member.create!(:principal => User.find(4), :project => @parent.reload, :role_ids => [1, 3]) | |
241 | |
242 member = project.reload.memberships.detect {|m| m.principal == user} | |
243 assert_not_nil member | |
244 assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id) | |
245 end | |
246 end | |
247 | |
248 def test_turning_on_inheritance_with_user_who_is_already_a_member_should_merge_roles | |
249 project = Project.generate_with_parent!(@parent) | |
250 user = @member.user | |
251 Member.create!(:principal => user, :project => project, :role_ids => [1, 3]) | |
252 project.reload | |
253 | |
254 assert_no_difference 'Member.count' do | |
255 project.inherit_members = true | |
256 project.save! | |
257 | |
258 member = project.reload.memberships.detect {|m| m.principal == user} | |
259 assert_not_nil member | |
260 assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id) | |
261 end | |
262 end | |
263 end |