Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

project_members_inheritance_test.rb 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2014 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. require File.expand_path('../../test_helper', __FILE__)
  18. class ProjectMembersInheritanceTest < ActiveSupport::TestCase
  19. fixtures :roles, :users
  20. def setup
  21. @parent = Project.generate!
  22. @member = Member.create!(:principal => User.find(2), :project => @parent, :role_ids => [1, 2])
  23. assert_equal 2, @member.reload.roles.size
  24. end
  25. def test_project_created_with_inherit_members_disabled_should_not_inherit_members
  26. assert_no_difference 'Member.count' do
  27. project = Project.generate_with_parent!(@parent, :inherit_members => false)
  28. assert_equal 0, project.memberships.count
  29. end
  30. end
  31. def test_project_created_with_inherit_members_should_inherit_members
  32. assert_difference 'Member.count', 1 do
  33. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  34. project.reload
  35. assert_equal 1, project.memberships.count
  36. member = project.memberships.first
  37. assert_equal @member.principal, member.principal
  38. assert_equal @member.roles.sort, member.roles.sort
  39. end
  40. end
  41. def test_turning_on_inherit_members_should_inherit_members
  42. Project.generate_with_parent!(@parent, :inherit_members => false)
  43. assert_difference 'Member.count', 1 do
  44. project = Project.order('id desc').first
  45. project.inherit_members = true
  46. project.save!
  47. project.reload
  48. assert_equal 1, project.memberships.count
  49. member = project.memberships.first
  50. assert_equal @member.principal, member.principal
  51. assert_equal @member.roles.sort, member.roles.sort
  52. end
  53. end
  54. def test_turning_off_inherit_members_should_remove_inherited_members
  55. Project.generate_with_parent!(@parent, :inherit_members => true)
  56. assert_difference 'Member.count', -1 do
  57. project = Project.order('id desc').first
  58. project.inherit_members = false
  59. project.save!
  60. project.reload
  61. assert_equal 0, project.memberships.count
  62. end
  63. end
  64. def test_moving_a_root_project_under_a_parent_should_inherit_members
  65. Project.generate!(:inherit_members => true)
  66. project = Project.order('id desc').first
  67. assert_difference 'Member.count', 1 do
  68. project.set_parent!(@parent)
  69. project.reload
  70. assert_equal 1, project.memberships.count
  71. member = project.memberships.first
  72. assert_equal @member.principal, member.principal
  73. assert_equal @member.roles.sort, member.roles.sort
  74. end
  75. end
  76. def test_moving_a_subproject_as_root_should_loose_inherited_members
  77. Project.generate_with_parent!(@parent, :inherit_members => true)
  78. project = Project.order('id desc').first
  79. assert_difference 'Member.count', -1 do
  80. project.set_parent!(nil)
  81. project.reload
  82. assert_equal 0, project.memberships.count
  83. end
  84. end
  85. def test_moving_a_subproject_to_another_parent_should_change_inherited_members
  86. other_parent = Project.generate!
  87. other_member = Member.create!(:principal => User.find(4), :project => other_parent, :role_ids => [3])
  88. other_member.reload
  89. Project.generate_with_parent!(@parent, :inherit_members => true)
  90. project = Project.order('id desc').first
  91. project.set_parent!(other_parent.reload)
  92. project.reload
  93. assert_equal 1, project.memberships.count
  94. member = project.memberships.first
  95. assert_equal other_member.principal, member.principal
  96. assert_equal other_member.roles.sort, member.roles.sort
  97. end
  98. def test_inheritance_should_propagate_to_subprojects
  99. project = Project.generate_with_parent!(@parent, :inherit_members => false)
  100. subproject = Project.generate_with_parent!(project, :inherit_members => true)
  101. project.reload
  102. assert_difference 'Member.count', 2 do
  103. project.inherit_members = true
  104. project.save
  105. project.reload
  106. subproject.reload
  107. assert_equal 1, project.memberships.count
  108. assert_equal 1, subproject.memberships.count
  109. member = subproject.memberships.first
  110. assert_equal @member.principal, member.principal
  111. assert_equal @member.roles.sort, member.roles.sort
  112. end
  113. end
  114. def test_inheritance_removal_should_propagate_to_subprojects
  115. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  116. subproject = Project.generate_with_parent!(project, :inherit_members => true)
  117. project.reload
  118. assert_difference 'Member.count', -2 do
  119. project.inherit_members = false
  120. project.save
  121. project.reload
  122. subproject.reload
  123. assert_equal 0, project.memberships.count
  124. assert_equal 0, subproject.memberships.count
  125. end
  126. end
  127. def test_adding_a_member_should_propagate
  128. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  129. assert_difference 'Member.count', 2 do
  130. member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3])
  131. member.reload
  132. inherited_member = project.memberships.order('id desc').first
  133. assert_equal member.principal, inherited_member.principal
  134. assert_equal member.roles.sort, inherited_member.roles.sort
  135. end
  136. end
  137. def test_adding_a_member_should_not_propagate_if_child_does_not_inherit
  138. project = Project.generate_with_parent!(@parent, :inherit_members => false)
  139. assert_difference 'Member.count', 1 do
  140. member = Member.create!(:principal => User.find(4), :project => @parent, :role_ids => [1, 3])
  141. assert_nil project.reload.memberships.detect {|m| m.principal == member.principal}
  142. end
  143. end
  144. def test_removing_a_member_should_propagate
  145. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  146. assert_difference 'Member.count', -2 do
  147. @member.reload.destroy
  148. project.reload
  149. assert_equal 0, project.memberships.count
  150. end
  151. end
  152. def test_adding_a_group_member_should_propagate_with_its_users
  153. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  154. group = Group.generate!
  155. user = User.find(4)
  156. group.users << user
  157. assert_difference 'Member.count', 4 do
  158. assert_difference 'MemberRole.count', 8 do
  159. member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3])
  160. project.reload
  161. member.reload
  162. inherited_group_member = project.memberships.detect {|m| m.principal == group}
  163. assert_not_nil inherited_group_member
  164. assert_equal member.roles.sort, inherited_group_member.roles.sort
  165. inherited_user_member = project.memberships.detect {|m| m.principal == user}
  166. assert_not_nil inherited_user_member
  167. assert_equal member.roles.sort, inherited_user_member.roles.sort
  168. end
  169. end
  170. end
  171. def test_removing_a_group_member_should_propagate
  172. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  173. group = Group.generate!
  174. user = User.find(4)
  175. group.users << user
  176. member = Member.create!(:principal => group, :project => @parent, :role_ids => [1, 3])
  177. assert_difference 'Member.count', -4 do
  178. assert_difference 'MemberRole.count', -8 do
  179. member.destroy
  180. project.reload
  181. inherited_group_member = project.memberships.detect {|m| m.principal == group}
  182. assert_nil inherited_group_member
  183. inherited_user_member = project.memberships.detect {|m| m.principal == user}
  184. assert_nil inherited_user_member
  185. end
  186. end
  187. end
  188. def test_adding_user_who_use_is_already_a_member_to_parent_project_should_merge_roles
  189. project = Project.generate_with_parent!(@parent, :inherit_members => true)
  190. user = User.find(4)
  191. Member.create!(:principal => user, :project => project, :role_ids => [1, 2])
  192. assert_difference 'Member.count', 1 do
  193. Member.create!(:principal => User.find(4), :project => @parent.reload, :role_ids => [1, 3])
  194. member = project.reload.memberships.detect {|m| m.principal == user}
  195. assert_not_nil member
  196. assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id)
  197. end
  198. end
  199. def test_turning_on_inheritance_with_user_who_is_already_a_member_should_merge_roles
  200. project = Project.generate_with_parent!(@parent)
  201. user = @member.user
  202. Member.create!(:principal => user, :project => project, :role_ids => [1, 3])
  203. project.reload
  204. assert_no_difference 'Member.count' do
  205. project.inherit_members = true
  206. project.save!
  207. member = project.reload.memberships.detect {|m| m.principal == user}
  208. assert_not_nil member
  209. assert_equal [1, 2, 3], member.roles.uniq.sort.map(&:id)
  210. end
  211. end
  212. end