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 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2015 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 < ActionController::TestCase
  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_template 'create'
  83. assert_equal 'text/javascript', response.content_type
  84. end
  85. assert User.find(7).member_of?(Project.find(1))
  86. assert User.find(8).member_of?(Project.find(1))
  87. assert User.find(9).member_of?(Project.find(1))
  88. assert_include 'tab-content-members', response.body
  89. end
  90. def test_xhr_create_with_failure
  91. assert_no_difference 'Member.count' do
  92. xhr :post, :create, :project_id => 1, :membership => {:role_ids => [], :user_ids => [7, 8, 9]}
  93. assert_response :success
  94. assert_template 'create'
  95. assert_equal 'text/javascript', response.content_type
  96. end
  97. assert_match /alert/, response.body, "Alert message not sent"
  98. end
  99. def test_update
  100. assert_no_difference 'Member.count' do
  101. put :update, :id => 2, :membership => {:role_ids => [1], :user_id => 3}
  102. end
  103. assert_redirected_to '/projects/ecookbook/settings/members'
  104. end
  105. def test_update_should_not_add_unmanaged_roles
  106. role = Role.find(1)
  107. role.update! :all_roles_managed => false
  108. role.managed_roles = Role.where(:id => [2, 3]).to_a
  109. member = Member.create!(:user => User.find(9), :role_ids => [3], :project_id => 1)
  110. put :update, :id => member.id, :membership => {:role_ids => [1, 2, 3]}
  111. assert_equal [2, 3], member.reload.role_ids.sort
  112. end
  113. def test_update_should_not_remove_unmanaged_roles
  114. role = Role.find(1)
  115. role.update! :all_roles_managed => false
  116. role.managed_roles = Role.where(:id => [2, 3]).to_a
  117. member = Member.create!(:user => User.find(9), :role_ids => [1, 3], :project_id => 1)
  118. put :update, :id => member.id, :membership => {:role_ids => [2]}
  119. assert_equal [1, 2], member.reload.role_ids.sort
  120. end
  121. def test_xhr_update
  122. assert_no_difference 'Member.count' do
  123. xhr :put, :update, :id => 2, :membership => {:role_ids => [1], :user_id => 3}
  124. assert_response :success
  125. assert_template 'update'
  126. assert_equal 'text/javascript', response.content_type
  127. end
  128. member = Member.find(2)
  129. assert_equal [1], member.role_ids
  130. assert_equal 3, member.user_id
  131. assert_include 'tab-content-members', response.body
  132. end
  133. def test_destroy
  134. assert_difference 'Member.count', -1 do
  135. delete :destroy, :id => 2
  136. end
  137. assert_redirected_to '/projects/ecookbook/settings/members'
  138. assert !User.find(3).member_of?(Project.find(1))
  139. end
  140. def test_destroy_should_fail_with_unmanaged_roles
  141. role = Role.find(1)
  142. role.update! :all_roles_managed => false
  143. role.managed_roles = Role.where(:id => [2, 3]).to_a
  144. member = Member.create!(:user => User.find(9), :role_ids => [1, 3], :project_id => 1)
  145. assert_no_difference 'Member.count' do
  146. delete :destroy, :id => member.id
  147. end
  148. end
  149. def test_destroy_should_succeed_with_managed_roles_only
  150. role = Role.find(1)
  151. role.update! :all_roles_managed => false
  152. role.managed_roles = Role.where(:id => [2, 3]).to_a
  153. member = Member.create!(:user => User.find(9), :role_ids => [3], :project_id => 1)
  154. assert_difference 'Member.count', -1 do
  155. delete :destroy, :id => member.id
  156. end
  157. end
  158. def test_xhr_destroy
  159. assert_difference 'Member.count', -1 do
  160. xhr :delete, :destroy, :id => 2
  161. assert_response :success
  162. assert_template 'destroy'
  163. assert_equal 'text/javascript', response.content_type
  164. end
  165. assert_nil Member.find_by_id(2)
  166. assert_include 'tab-content-members', response.body
  167. end
  168. def test_autocomplete
  169. xhr :get, :autocomplete, :project_id => 1, :q => 'mis', :format => 'js'
  170. assert_response :success
  171. assert_include 'User Misc', response.body
  172. end
  173. end