You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

members_controller_test.rb 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2016 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 MembersControllerTest < Redmine::ControllerTest
  19. fixtures :projects, :members, :member_roles, :roles, :users
  20. def setup
  21. User.current = nil
  22. @request.session[:user_id] = 2
  23. end
  24. def test_new
  25. get :new, :project_id => 1
  26. assert_response :success
  27. end
  28. def test_new_should_propose_managed_roles_only
  29. role = Role.find(1)
  30. role.update! :all_roles_managed => false
  31. role.managed_roles = Role.where(:id => [2, 3]).to_a
  32. get :new, :project_id => 1
  33. assert_response :success
  34. assert_select 'div.roles-selection' do
  35. assert_select 'label', :text => 'Manager', :count => 0
  36. assert_select 'label', :text => 'Developer'
  37. assert_select 'label', :text => 'Reporter'
  38. end
  39. end
  40. def test_xhr_new
  41. xhr :get, :new, :project_id => 1
  42. assert_response :success
  43. assert_equal 'text/javascript', response.content_type
  44. end
  45. def test_create
  46. assert_difference 'Member.count' do
  47. post :create, :project_id => 1, :membership => {:role_ids => [1], :user_id => 7}
  48. end
  49. assert_redirected_to '/projects/ecookbook/settings/members'
  50. assert User.find(7).member_of?(Project.find(1))
  51. end
  52. def test_create_multiple
  53. assert_difference 'Member.count', 3 do
  54. post :create, :project_id => 1, :membership => {:role_ids => [1], :user_ids => [7, 8, 9]}
  55. end
  56. assert_redirected_to '/projects/ecookbook/settings/members'
  57. assert User.find(7).member_of?(Project.find(1))
  58. end
  59. def test_create_should_ignore_unmanaged_roles
  60. role = Role.find(1)
  61. role.update! :all_roles_managed => false
  62. role.managed_roles = Role.where(:id => [2, 3]).to_a
  63. assert_difference 'Member.count' do
  64. post :create, :project_id => 1, :membership => {:role_ids => [1, 2], :user_id => 7}
  65. end
  66. member = Member.order(:id => :desc).first
  67. assert_equal [2], member.role_ids
  68. end
  69. def test_create_should_be_allowed_for_admin_without_role
  70. User.find(1).members.delete_all
  71. @request.session[:user_id] = 1
  72. assert_difference 'Member.count' do
  73. post :create, :project_id => 1, :membership => {:role_ids => [1, 2], :user_id => 7}
  74. end
  75. member = Member.order(:id => :desc).first
  76. assert_equal [1, 2], member.role_ids
  77. end
  78. def test_xhr_create
  79. assert_difference 'Member.count', 3 do
  80. xhr :post, :create, :project_id => 1, :membership => {:role_ids => [1], :user_ids => [7, 8, 9]}
  81. assert_response :success
  82. assert_equal 'text/javascript', response.content_type
  83. end
  84. assert User.find(7).member_of?(Project.find(1))
  85. assert User.find(8).member_of?(Project.find(1))
  86. assert User.find(9).member_of?(Project.find(1))
  87. assert_include 'tab-content-members', response.body
  88. end
  89. def test_xhr_create_with_failure
  90. assert_no_difference 'Member.count' do
  91. xhr :post, :create, :project_id => 1, :membership => {:role_ids => [], :user_ids => [7, 8, 9]}
  92. assert_response :success
  93. assert_equal 'text/javascript', response.content_type
  94. end
  95. assert_match /alert/, response.body, "Alert message not sent"
  96. end
  97. def test_edit
  98. get :edit, :id => 2
  99. assert_response :success
  100. assert_select 'input[name=?][value=?][checked=checked]', 'membership[role_ids][]', '2'
  101. end
  102. def test_xhr_edit
  103. xhr :get, :edit, :id => 2
  104. assert_response :success
  105. end
  106. def test_update
  107. assert_no_difference 'Member.count' do
  108. put :update, :id => 2, :membership => {:role_ids => [1], :user_id => 3}
  109. end
  110. assert_redirected_to '/projects/ecookbook/settings/members'
  111. end
  112. def test_update_locked_member_should_be_allowed
  113. User.find(3).lock!
  114. put :update, :id => 2, :membership => {:role_ids => [1]}
  115. assert_response 302
  116. member = Member.find(2)
  117. assert member.user.locked?
  118. assert_equal [1], member.role_ids
  119. end
  120. def test_update_should_not_add_unmanaged_roles
  121. role = Role.find(1)
  122. role.update! :all_roles_managed => false
  123. role.managed_roles = Role.where(:id => [2, 3]).to_a
  124. member = Member.create!(:user => User.find(9), :role_ids => [3], :project_id => 1)
  125. put :update, :id => member.id, :membership => {:role_ids => [1, 2, 3]}
  126. assert_equal [2, 3], member.reload.role_ids.sort
  127. end
  128. def test_update_should_not_remove_unmanaged_roles
  129. role = Role.find(1)
  130. role.update! :all_roles_managed => false
  131. role.managed_roles = Role.where(:id => [2, 3]).to_a
  132. member = Member.create!(:user => User.find(9), :role_ids => [1, 3], :project_id => 1)
  133. put :update, :id => member.id, :membership => {:role_ids => [2]}
  134. assert_equal [1, 2], member.reload.role_ids.sort
  135. end
  136. def test_xhr_update
  137. assert_no_difference 'Member.count' do
  138. xhr :put, :update, :id => 2, :membership => {:role_ids => [1], :user_id => 3}
  139. assert_response :success
  140. assert_equal 'text/javascript', response.content_type
  141. end
  142. member = Member.find(2)
  143. assert_equal [1], member.role_ids
  144. assert_equal 3, member.user_id
  145. assert_include 'tab-content-members', response.body
  146. end
  147. def test_destroy
  148. assert_difference 'Member.count', -1 do
  149. delete :destroy, :id => 2
  150. end
  151. assert_redirected_to '/projects/ecookbook/settings/members'
  152. assert !User.find(3).member_of?(Project.find(1))
  153. end
  154. def test_destroy_locked_member_should_be_allowed
  155. assert User.find(3).lock!
  156. assert_difference 'Member.count', -1 do
  157. delete :destroy, :id => 2
  158. end
  159. end
  160. def test_destroy_should_fail_with_unmanaged_roles
  161. role = Role.find(1)
  162. role.update! :all_roles_managed => false
  163. role.managed_roles = Role.where(:id => [2, 3]).to_a
  164. member = Member.create!(:user => User.find(9), :role_ids => [1, 3], :project_id => 1)
  165. assert_no_difference 'Member.count' do
  166. delete :destroy, :id => member.id
  167. end
  168. end
  169. def test_destroy_should_succeed_with_managed_roles_only
  170. role = Role.find(1)
  171. role.update! :all_roles_managed => false
  172. role.managed_roles = Role.where(:id => [2, 3]).to_a
  173. member = Member.create!(:user => User.find(9), :role_ids => [3], :project_id => 1)
  174. assert_difference 'Member.count', -1 do
  175. delete :destroy, :id => member.id
  176. end
  177. end
  178. def test_xhr_destroy
  179. assert_difference 'Member.count', -1 do
  180. xhr :delete, :destroy, :id => 2
  181. assert_response :success
  182. assert_equal 'text/javascript', response.content_type
  183. end
  184. assert_nil Member.find_by_id(2)
  185. assert_include 'tab-content-members', response.body
  186. end
  187. def test_autocomplete
  188. xhr :get, :autocomplete, :project_id => 1, :q => 'mis', :format => 'js'
  189. assert_response :success
  190. assert_include 'User Misc', response.body
  191. end
  192. end