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.

principal_memberships_controller_test.rb 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 PrincipalMembershipsControllerTest < ActionController::TestCase
  19. fixtures :projects, :users, :members, :member_roles, :roles, :groups_users
  20. def setup
  21. @request.session[:user_id] = 1
  22. end
  23. def test_new_user_membership
  24. get :new, :user_id => 7
  25. assert_response :success
  26. assert_select 'label', :text => 'eCookbook' do
  27. assert_select 'input[name=?][value="1"]:not([disabled])', 'membership[project_ids][]'
  28. end
  29. end
  30. def test_new_user_membership_should_disable_user_projects
  31. Member.create!(:user_id => 7, :project_id => 1, :role_ids => [1])
  32. get :new, :user_id => 7
  33. assert_response :success
  34. assert_select 'label', :text => 'eCookbook' do
  35. assert_select 'input[name=?][value="1"][disabled=disabled]', 'membership[project_ids][]'
  36. end
  37. end
  38. def test_xhr_new_user_membership
  39. xhr :get, :new, :user_id => 7
  40. assert_response :success
  41. assert_equal 'text/javascript', response.content_type
  42. end
  43. def test_create_user_membership
  44. assert_difference 'Member.count' do
  45. post :create, :user_id => 7, :membership => {:project_ids => [3], :role_ids => [2]}
  46. end
  47. assert_redirected_to '/users/7/edit?tab=memberships'
  48. member = Member.order('id DESC').first
  49. assert_equal User.find(7), member.principal
  50. assert_equal [2], member.role_ids
  51. assert_equal 3, member.project_id
  52. end
  53. def test_create_user_membership_with_multiple_roles
  54. assert_difference 'Member.count' do
  55. post :create, :user_id => 7, :membership => {:project_ids => [3], :role_ids => [2, 3]}
  56. end
  57. member = Member.order('id DESC').first
  58. assert_equal User.find(7), member.principal
  59. assert_equal [2, 3], member.role_ids.sort
  60. assert_equal 3, member.project_id
  61. end
  62. def test_create_user_membership_with_multiple_projects_and_roles
  63. assert_difference 'Member.count', 2 do
  64. post :create, :user_id => 7, :membership => {:project_ids => [1, 3], :role_ids => [2, 3]}
  65. end
  66. members = Member.order('id DESC').limit(2).sort_by(&:project_id)
  67. assert_equal 1, members[0].project_id
  68. assert_equal 3, members[1].project_id
  69. members.each do |member|
  70. assert_equal User.find(7), member.principal
  71. assert_equal [2, 3], member.role_ids.sort
  72. end
  73. end
  74. def test_xhr_create_user_membership
  75. assert_difference 'Member.count' do
  76. xhr :post, :create, :user_id => 7, :membership => {:project_ids => [3], :role_ids => [2]}, :format => 'js'
  77. assert_response :success
  78. assert_template 'create'
  79. assert_equal 'text/javascript', response.content_type
  80. end
  81. member = Member.order('id DESC').first
  82. assert_equal User.find(7), member.principal
  83. assert_equal [2], member.role_ids
  84. assert_equal 3, member.project_id
  85. assert_include 'tab-content-memberships', response.body
  86. end
  87. def test_xhr_create_user_membership_with_failure
  88. assert_no_difference 'Member.count' do
  89. xhr :post, :create, :user_id => 7, :membership => {:project_ids => [3]}, :format => 'js'
  90. assert_response :success
  91. assert_template 'create'
  92. assert_equal 'text/javascript', response.content_type
  93. end
  94. assert_include 'alert', response.body, "Alert message not sent"
  95. assert_include 'Role cannot be empty', response.body, "Error message not sent"
  96. end
  97. def test_update_user_membership
  98. assert_no_difference 'Member.count' do
  99. put :update, :user_id => 2, :id => 1, :membership => {:role_ids => [2]}
  100. assert_redirected_to '/users/2/edit?tab=memberships'
  101. end
  102. assert_equal [2], Member.find(1).role_ids
  103. end
  104. def test_xhr_update_user_membership
  105. assert_no_difference 'Member.count' do
  106. xhr :put, :update, :user_id => 2, :id => 1, :membership => {:role_ids => [2]}, :format => 'js'
  107. assert_response :success
  108. assert_template 'update'
  109. assert_equal 'text/javascript', response.content_type
  110. end
  111. assert_equal [2], Member.find(1).role_ids
  112. assert_include 'tab-content-memberships', response.body
  113. end
  114. def test_destroy_user_membership
  115. assert_difference 'Member.count', -1 do
  116. delete :destroy, :user_id => 2, :id => 1
  117. end
  118. assert_redirected_to '/users/2/edit?tab=memberships'
  119. assert_nil Member.find_by_id(1)
  120. end
  121. def test_xhr_destroy_user_membership_js_format
  122. assert_difference 'Member.count', -1 do
  123. xhr :delete, :destroy, :user_id => 2, :id => 1
  124. assert_response :success
  125. assert_template 'destroy'
  126. assert_equal 'text/javascript', response.content_type
  127. end
  128. assert_nil Member.find_by_id(1)
  129. assert_include 'tab-content-memberships', response.body
  130. end
  131. def test_xhr_new_group_membership
  132. xhr :get, :new, :group_id => 10
  133. assert_response :success
  134. assert_equal 'text/javascript', response.content_type
  135. end
  136. def test_create_group_membership
  137. assert_difference 'Group.find(10).members.count' do
  138. post :create, :group_id => 10, :membership => {:project_ids => [2], :role_ids => ['1', '2']}
  139. end
  140. end
  141. def test_xhr_create_group_membership
  142. assert_difference 'Group.find(10).members.count' do
  143. xhr :post, :create, :group_id => 10, :membership => {:project_ids => [2], :role_ids => ['1', '2']}
  144. assert_response :success
  145. assert_template 'create'
  146. assert_equal 'text/javascript', response.content_type
  147. end
  148. assert_match /OnlineStore/, response.body
  149. end
  150. def test_xhr_create_group_membership_with_failure
  151. assert_no_difference 'Group.find(10).members.count' do
  152. xhr :post, :create, :group_id => 10, :membership => {:project_ids => [999], :role_ids => ['1', '2']}
  153. assert_response :success
  154. assert_template 'create'
  155. assert_equal 'text/javascript', response.content_type
  156. end
  157. assert_match /alert/, response.body, "Alert message not sent"
  158. end
  159. def test_update_group_membership
  160. assert_no_difference 'Group.find(10).members.count' do
  161. put :update, :group_id => 10, :id => 6, :membership => {:role_ids => ['1', '3']}
  162. end
  163. end
  164. def test_xhr_update_group_membership
  165. assert_no_difference 'Group.find(10).members.count' do
  166. xhr :post, :update, :group_id => 10, :id => 6, :membership => {:role_ids => ['1', '3']}
  167. assert_response :success
  168. assert_template 'update'
  169. assert_equal 'text/javascript', response.content_type
  170. end
  171. end
  172. def test_destroy_group_membership
  173. assert_difference 'Group.find(10).members.count', -1 do
  174. delete :destroy, :group_id => 10, :id => 6
  175. end
  176. end
  177. def test_xhr_destroy_group_membership
  178. assert_difference 'Group.find(10).members.count', -1 do
  179. xhr :delete, :destroy, :group_id => 10, :id => 6
  180. assert_response :success
  181. assert_template 'destroy'
  182. assert_equal 'text/javascript', response.content_type
  183. end
  184. end
  185. end