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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. # frozen_string_literal: true
  2. # Redmine - project management software
  3. # Copyright (C) 2006- Jean-Philippe Lang
  4. #
  5. # This program is free software; you can redistribute it and/or
  6. # modify it under the terms of the GNU General Public License
  7. # as published by the Free Software Foundation; either version 2
  8. # of the License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. require_relative '../test_helper'
  19. class PrincipalMembershipsControllerTest < Redmine::ControllerTest
  20. fixtures :projects, :users, :members, :member_roles, :roles, :groups_users
  21. def setup
  22. @request.session[:user_id] = 1
  23. end
  24. def test_new_user_membership
  25. get(:new, :params => {:user_id => 7})
  26. assert_response :success
  27. assert_select 'label', :text => 'eCookbook' do
  28. assert_select 'input[name=?][value="1"]:not([disabled])', 'membership[project_ids][]'
  29. end
  30. end
  31. def test_new_user_membership_should_disable_user_projects
  32. Member.create!(:user_id => 7, :project_id => 1, :role_ids => [1])
  33. get(:new, :params => {:user_id => 7})
  34. assert_response :success
  35. assert_select 'label', :text => 'eCookbook' do
  36. assert_select 'input[name=?][value="1"][disabled=disabled]', 'membership[project_ids][]'
  37. end
  38. end
  39. def test_xhr_new_user_membership
  40. get(:new, :params => {:user_id => 7}, :xhr => true)
  41. assert_response :success
  42. assert_equal 'text/javascript', response.media_type
  43. end
  44. def test_create_user_membership
  45. assert_difference 'Member.count' do
  46. post(
  47. :create,
  48. :params => {
  49. :user_id => 7,
  50. :membership => {
  51. :project_ids => [3],
  52. :role_ids => [2]
  53. }
  54. }
  55. )
  56. end
  57. assert_redirected_to '/users/7/edit?tab=memberships'
  58. member = Member.order('id DESC').first
  59. assert_equal User.find(7), member.principal
  60. assert_equal [2], member.role_ids
  61. assert_equal 3, member.project_id
  62. end
  63. def test_create_user_membership_with_multiple_roles
  64. assert_difference 'Member.count' do
  65. post(
  66. :create,
  67. :params => {
  68. :user_id => 7,
  69. :membership => {
  70. :project_ids => [3],
  71. :role_ids => [2, 3]
  72. }
  73. }
  74. )
  75. end
  76. member = Member.order('id DESC').first
  77. assert_equal User.find(7), member.principal
  78. assert_equal [2, 3], member.role_ids.sort
  79. assert_equal 3, member.project_id
  80. end
  81. def test_create_user_membership_with_multiple_projects_and_roles
  82. assert_difference 'Member.count', 2 do
  83. post(
  84. :create,
  85. :params => {
  86. :user_id => 7,
  87. :membership => {
  88. :project_ids => [1, 3],
  89. :role_ids => [2, 3]
  90. }
  91. }
  92. )
  93. end
  94. members = Member.order('id DESC').limit(2).sort_by(&:project_id)
  95. assert_equal 1, members[0].project_id
  96. assert_equal 3, members[1].project_id
  97. members.each do |member|
  98. assert_equal User.find(7), member.principal
  99. assert_equal [2, 3], member.role_ids.sort
  100. end
  101. end
  102. def test_xhr_create_user_membership
  103. assert_difference 'Member.count' do
  104. post(
  105. :create,
  106. :params => {
  107. :user_id => 7,
  108. :membership => {
  109. :project_ids => [3],
  110. :role_ids => [2]
  111. },
  112. :format => 'js'
  113. },
  114. :xhr => true
  115. )
  116. assert_response :success
  117. assert_equal 'text/javascript', response.media_type
  118. end
  119. member = Member.order('id DESC').first
  120. assert_equal User.find(7), member.principal
  121. assert_equal [2], member.role_ids
  122. assert_equal 3, member.project_id
  123. assert_include 'tab-content-memberships', response.body
  124. end
  125. def test_xhr_create_user_membership_with_failure
  126. assert_no_difference 'Member.count' do
  127. post(
  128. :create,
  129. :params => {
  130. :user_id => 7,
  131. :membership => {
  132. :project_ids => [3]
  133. },
  134. :format => 'js'
  135. },
  136. :xhr => true
  137. )
  138. assert_response :success
  139. assert_equal 'text/javascript', response.media_type
  140. end
  141. assert_include 'alert', response.body, "Alert message not sent"
  142. assert_include 'Role cannot be empty', response.body, "Error message not sent"
  143. end
  144. def test_edit_user_membership
  145. get(
  146. :edit,
  147. :params => {
  148. :user_id => 2,
  149. :id => 1
  150. }
  151. )
  152. assert_response :success
  153. assert_select 'input[name=?][value=?][checked=checked]', 'membership[role_ids][]', '1'
  154. end
  155. def test_xhr_edit_user_membership
  156. get(
  157. :edit,
  158. :params => {
  159. :user_id => 2,
  160. :id => 1
  161. },
  162. :xhr => true
  163. )
  164. assert_response :success
  165. end
  166. def test_update_user_membership
  167. assert_no_difference 'Member.count' do
  168. put(
  169. :update,
  170. :params => {
  171. :user_id => 2,
  172. :id => 1,
  173. :membership => {
  174. :role_ids => [2]
  175. }
  176. }
  177. )
  178. assert_redirected_to '/users/2/edit?tab=memberships'
  179. end
  180. assert_equal [2], Member.find(1).role_ids
  181. end
  182. def test_xhr_update_user_membership
  183. assert_no_difference 'Member.count' do
  184. put(
  185. :update,
  186. :params => {
  187. :user_id => 2,
  188. :id => 1,
  189. :membership => {
  190. :role_ids => [2]
  191. },
  192. :format => 'js'
  193. },
  194. :xhr => true
  195. )
  196. assert_response :success
  197. assert_equal 'text/javascript', response.media_type
  198. end
  199. assert_equal [2], Member.find(1).role_ids
  200. assert_include '$("#member-1-roles").html("Developer").show();', response.body
  201. end
  202. def test_destroy_user_membership
  203. assert_difference 'Member.count', -1 do
  204. delete(
  205. :destroy,
  206. :params => {
  207. :user_id => 2,
  208. :id => 1
  209. }
  210. )
  211. end
  212. assert_redirected_to '/users/2/edit?tab=memberships'
  213. assert_nil Member.find_by_id(1)
  214. end
  215. def test_xhr_destroy_user_membership_js_format
  216. assert_difference 'Member.count', -1 do
  217. delete(
  218. :destroy,
  219. :params => {
  220. :user_id => 2,
  221. :id => 1
  222. },
  223. :xhr => true
  224. )
  225. assert_response :success
  226. assert_equal 'text/javascript', response.media_type
  227. end
  228. assert_nil Member.find_by_id(1)
  229. assert_include 'tab-content-memberships', response.body
  230. end
  231. def test_xhr_new_group_membership
  232. get(:new, :params => {:group_id => 10}, :xhr => true)
  233. assert_response :success
  234. assert_equal 'text/javascript', response.media_type
  235. end
  236. def test_create_group_membership
  237. assert_difference 'Group.find(10).members.count' do
  238. post(
  239. :create,
  240. :params => {
  241. :group_id => 10,
  242. :membership => {
  243. :project_ids => [2],
  244. :role_ids => ['1', '2']
  245. }
  246. }
  247. )
  248. end
  249. end
  250. def test_xhr_create_group_membership
  251. assert_difference 'Group.find(10).members.count' do
  252. post(
  253. :create,
  254. :params => {
  255. :group_id => 10,
  256. :membership => {
  257. :project_ids => [2],
  258. :role_ids => ['1', '2']
  259. }
  260. },
  261. :xhr => true
  262. )
  263. assert_response :success
  264. assert_equal 'text/javascript', response.media_type
  265. end
  266. assert_match /OnlineStore/, response.body
  267. end
  268. def test_xhr_create_group_membership_with_failure
  269. assert_no_difference 'Group.find(10).members.count' do
  270. post(
  271. :create,
  272. :params => {
  273. :group_id => 10,
  274. :membership => {
  275. :project_ids => [999],
  276. :role_ids => ['1', '2']
  277. }
  278. },
  279. :xhr => true
  280. )
  281. assert_response :success
  282. assert_equal 'text/javascript', response.media_type
  283. end
  284. assert_match /alert/, response.body, "Alert message not sent"
  285. end
  286. def test_update_group_membership
  287. assert_no_difference 'Group.find(10).members.count' do
  288. put(
  289. :update,
  290. :params => {
  291. :group_id => 10,
  292. :id => 6,
  293. :membership => {
  294. :role_ids => ['1', '3']
  295. }
  296. }
  297. )
  298. end
  299. end
  300. def test_xhr_update_group_membership
  301. assert_no_difference 'Group.find(10).members.count' do
  302. post(
  303. :update,
  304. :params => {
  305. :group_id => 10,
  306. :id => 6,
  307. :membership => {
  308. :role_ids => ['1', '3']
  309. }
  310. },
  311. :xhr => true
  312. )
  313. assert_response :success
  314. assert_equal 'text/javascript', response.media_type
  315. end
  316. end
  317. def test_destroy_group_membership
  318. assert_difference 'Group.find(10).members.count', -1 do
  319. delete(
  320. :destroy,
  321. :params => {
  322. :group_id => 10,
  323. :id => 6
  324. }
  325. )
  326. end
  327. end
  328. def test_xhr_destroy_group_membership
  329. assert_difference 'Group.find(10).members.count', -1 do
  330. delete(
  331. :destroy,
  332. :params => {
  333. :group_id => 10,
  334. :id => 6
  335. },
  336. :xhr => true
  337. )
  338. assert_response :success
  339. assert_equal 'text/javascript', response.media_type
  340. end
  341. end
  342. end