Project

General

Profile

Patch #43640 » 0001-tests-group-controller-remove_users.patch

Florian Walchshofer, 2026-03-09 21:35

View differences:

test/functional/context_menus_controller_test.rb
314 314

  
315 315
  def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects
316 316
    @request.session[:user_id] = 2
317
    version = Version.create!(:name => 'Shared', :sharing => 'system', :project_id => 1)
317
    Version.create!(:name => 'Shared', :sharing => 'system', :project_id => 1)
318 318

  
319 319
    get(
320 320
      :issues,
......
522 522
      assert_select 'a.icon-del', :count => 0
523 523
    end
524 524
  end
525

  
526
  def test_context_menu_multiple_users_should_show_add_user_to_group_links
527
    get :users, params: { ids: [1, 2] }
528
    assert_response :success
529

  
530
    assert_select 'a.submenu', text: I18n.t(:label_add_user_to_group), count: 1
531
    assert_select 'a.submenu', text: I18n.t(:label_remove_user_from_group), count: 0
532

  
533
    assert_select 'a.icon.icon-lock span.icon-label', text: 'Lock', count: 1
534
    assert_select 'a.icon.icon-del span.icon-label', text: 'Delete', count: 1
535

  
536
    assert_select 'li.folder' do |folders|
537
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_add_user_to_group) }
538
      assert rem_folder, "a.submenu '#{I18n.t(:label_add_user_to_group)}' not found"
539
      if rem_folder
540
        assert_select rem_folder, '> ul > li', count: 2
541
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='post']", count: 2
542
      end
543
    end
544
  end
545

  
546
  def test_context_menu_multiple_users_should_show_remove_add_user_from_group_links
547
    get :users, params: { ids: [1, 8] }
548
    assert_response :success
549

  
550
    assert_select 'a.icon.icon-lock span.icon-label', text: 'Lock', count: 1
551
    assert_select 'a.icon.icon-del span.icon-label', text: 'Delete', count: 1
552

  
553
    assert_select 'a.submenu', text: I18n.t(:label_add_user_to_group), count: 1
554
    assert_select 'a.submenu', text: I18n.t(:label_remove_user_from_group), count: 1
555

  
556
    assert_select 'li.folder' do |folders|
557
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_add_user_to_group) }
558
      assert rem_folder, "a.submenu '#{I18n.t(:label_add_user_to_group)}' not found"
559
      if rem_folder
560
        assert_select rem_folder, '> ul > li', count: 2
561
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='post']", count: 2
562
      end
563

  
564
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_remove_user_from_group) }
565
      assert rem_folder, "a.submenu '#{I18n.t(:label_remove_user_from_group)}' not found"
566
      if rem_folder
567
        assert_select rem_folder, '> ul > li', count: 2
568
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='delete']", count: 2
569
      end
570
    end
571
  end
572

  
573
  def test_context_menu_single_user_should_show_remove_user_from_group_links
574
    get :users, params: { ids: [8] }
575
    assert_response :success
576

  
577
    assert_select 'a.submenu', text: I18n.t(:label_remove_user_from_group), count: 1
578
    assert_select 'a.submenu', text: I18n.t(:label_add_user_to_group), count: 0
579

  
580
    assert_select 'a.icon.icon-lock span.icon-label', text: 'Lock', count: 1
581
    assert_select 'a.icon.icon-edit span.icon-label', text: 'Edit', count: 1
582
    assert_select 'a.icon.icon-del span.icon-label', text: 'Delete', count: 1
583

  
584
    assert_select 'li.folder' do |folders|
585
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_remove_user_from_group) }
586
      assert rem_folder, "a.submenu '#{I18n.t(:label_remove_user_from_group)}' not found"
587
      if rem_folder
588
        assert_select rem_folder, '> ul > li', count: 2
589
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='delete']", count: 2
590
        assert_select rem_folder, 'a[data-confirm]' do |links|
591
          value = links.first['data-confirm']
592
          assert value.start_with?('Are you sure you want to remove 1 user')
593
        end
594
      end
595
    end
596
  end
597

  
598
  def test_context_menu_mulitple_user_should_show_remove_add_user_from_group_links
599
    group = Group.find(10)
600
    user = User.find(9)
601
    group.users << user
602

  
603
    get :users, params: { ids: [8, 9] }
604
    assert_response :success
605

  
606
    assert_select 'a.icon.icon-edit span.icon-label', text: 'Edit', count: 0
607
    assert_select 'a.icon.icon-lock span.icon-label', text: 'Lock', count: 1
608
    assert_select 'a.icon.icon-del span.icon-label', text: 'Delete', count: 1
609

  
610
    assert_select 'a.submenu', text: I18n.t(:label_remove_user_from_group), count: 1
611
    assert_select 'a.submenu', text: I18n.t(:label_add_user_to_group), count: 1
612

  
613
    assert_select 'li.folder' do |folders|
614
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_add_user_to_group) }
615
      assert rem_folder, "a.submenu '#{I18n.t(:label_add_user_to_group)}' not found"
616
      if rem_folder
617
        assert_select rem_folder, '> ul > li', count: 1
618
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='post']", count: 1
619
      end
620

  
621
      rem_folder = folders.find { |li| li.at_css('> a.submenu')&.text&.strip == I18n.t(:label_remove_user_from_group) }
622
      assert rem_folder, "a.submenu '#{I18n.t(:label_remove_user_from_group)}' not found"
623
      if rem_folder
624
        assert_select rem_folder, '> ul > li', count: 2
625
        assert_select rem_folder, "ul > li > a[rel='nofollow'][data-method='delete']", count: 2
626
        assert_select rem_folder, 'a[data-confirm]' do |links|
627
          value = links.first['data-confirm']
628
          assert value.start_with?('Are you sure you want to remove 2 users')
629
        end
630
      end
631
    end
632
  end
525 633
end
test/functional/groups_controller_test.rb
249 249
    assert_match /John Smith/, response.body
250 250
  end
251 251

  
252
  def test_remove_user
252
  def test_remove_users
253 253
    assert_difference 'Group.find(10).users.count', -1 do
254 254
      delete(
255
        :remove_user,
255
        :remove_users,
256 256
        :params => {
257 257
          :id => 10,
258 258
          :user_id => '8'
......
261 261
    end
262 262
  end
263 263

  
264
  def test_xhr_remove_user
264
  def test_xhr_remove_users
265 265
    assert_difference 'Group.find(10).users.count', -1 do
266 266
      delete(
267
        :remove_user,
267
        :remove_users,
268 268
        :params => {
269 269
          :id => 10,
270 270
          :user_id => '8'
......
276 276
    end
277 277
  end
278 278

  
279
  def test_remove_users_patch
280
    group = Group.find(10)
281
    user = User.find(9)
282
    group.users << user
283

  
284
    assert_difference 'Group.find(10).users.count', -2 do
285
      delete(
286
        :remove_users,
287
        :params => {
288
          :id => 10,
289
          :user_ids => ['8', '9']
290
        }
291
      )
292
    end
293
  end
294

  
295
  def test_xhr_remove_users_patch
296
    group = Group.find(10)
297
    user = User.find(9)
298
    group.users << user
299

  
300
    assert_difference 'Group.find(10).users.count', -2 do
301
      delete(
302
        :remove_users,
303
        :params => {
304
          :id => 10,
305
          :user_ids => ['8', '9']
306
        },
307
        :xhr => true
308
      )
309
      assert_response :success
310
      assert_equal 'text/javascript', response.media_type
311
    end
312
  end
313

  
279 314
  def test_autocomplete_for_user
280 315
    get(
281 316
      :autocomplete_for_user,
test/integration/api_test/api_routing_test.rb
51 51

  
52 52
  def test_group_users
53 53
    should_route 'POST /groups/567/users' => 'groups#add_users', :id => '567'
54
    should_route 'DELETE /groups/567/users/12' => 'groups#remove_user', :id => '567', :user_id => '12'
54
    should_route 'DELETE /groups/567/users/12' => 'groups#remove_users', :id => '567', :user_id => '12'
55
    should_route 'DELETE /groups/567/users' => 'groups#remove_users', :id => '567'
55 56
  end
56 57

  
57 58
  def test_issue_categories
test/integration/api_test/groups_test.rb
237 237
    end
238 238
    assert_not_include User.find(8), group.reload.users
239 239
  end
240

  
241
  test "DELETE /groups/:id/users.xml should remove users from the group" do
242
    group = Group.generate!
243
    group.users << User.find(5)
244
    group.users << User.find(6)
245
    assert_difference 'group.reload.users.count', -2 do
246
      delete(
247
        "/groups/#{group.id}/users.xml",
248
        :params => {:user_ids => [5, 6]},
249
        :headers => credentials('admin')
250
      )
251
      assert_response :no_content
252
      assert_equal '', @response.body
253
    end
254
    assert_not_include User.find(5), group.reload.users
255
    assert_not_include User.find(6), group.reload.users
256
  end
257

  
258
  test "DELETE /groups/:id/users.xml removes users and skips unknown user IDs" do
259
    group = Group.generate!
260
    group.users << User.find(5)
261
    group.users << User.find(6)
262
    group.users << User.find(7)
263
    assert_difference 'group.reload.users.count', -2 do
264
      delete(
265
        "/groups/#{group.id}/users.xml",
266
        :params => {:user_ids => [5, 6, 8]},
267
        :headers => credentials('admin')
268
      )
269
      assert_response :no_content
270
      assert_equal '', @response.body
271
    end
272
    assert_not_include User.find(5), group.reload.users
273
    assert_not_include User.find(6), group.reload.users
274
    assert_include User.find(7), group.reload.users
275
  end
240 276
end
test/integration/routing/groups_test.rb
37 37
  def test_group_users
38 38
    should_route 'GET /groups/567/users/new' => 'groups#new_users', :id => '567'
39 39
    should_route 'POST /groups/567/users' => 'groups#add_users', :id => '567'
40
    should_route 'DELETE /groups/567/users/12' => 'groups#remove_user', :id => '567', :user_id => '12'
40
    should_route 'DELETE /groups/567/users/12' => 'groups#remove_users', :id => '567', :user_id => '12'
41
    should_route 'DELETE /groups/567/users' => 'groups#remove_users', :id => '567'
41 42
  end
42 43
end
(11-11/11)