Mercurial > hg > soundsoftware-site
comparison test/unit/project_members_inheritance_test.rb @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
| author | Chris Cannam |
|---|---|
| date | Fri, 14 Jun 2013 09:02:21 +0100 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1294:3e4c3460b6ca | 1295:622f24f53b42 |
|---|---|
| 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 |
