]> git.openstreetmap.org Git - rails.git/blob - test/system/user_blocks_test.rb
Merge pull request #6394 from openstreetmap/dependabot/github_actions/ruby/setup...
[rails.git] / test / system / user_blocks_test.rb
1 # frozen_string_literal: true
2
3 require "application_system_test_case"
4
5 class UserBlocksSystemTest < ApplicationSystemTestCase
6   test "revoke all link is absent for anonymous users when viewed user has active blocks" do
7     blocked_user = create(:user)
8     create(:user_block, :user => blocked_user)
9
10     visit user_path(blocked_user)
11     assert_no_link "Revoke all blocks"
12   end
13
14   test "revoke all link is absent for regular users when viewed user has active blocks" do
15     blocked_user = create(:user)
16     create(:user_block, :user => blocked_user)
17     sign_in_as(create(:user))
18
19     visit user_path(blocked_user)
20     assert_no_link "Revoke all blocks"
21   end
22
23   test "revoke all link is absent for moderators when viewed user has no active blocks" do
24     blocked_user = create(:user)
25     create(:user_block, :expired, :user => blocked_user)
26     sign_in_as(create(:moderator_user))
27
28     visit user_path(blocked_user)
29     assert_no_link "Revoke all blocks"
30   end
31
32   test "revoke all page has no controls when viewed user has no active blocks" do
33     blocked_user = create(:user)
34     sign_in_as(create(:moderator_user))
35
36     visit edit_user_received_blocks_path(blocked_user)
37     assert_title "Revoking all blocks on #{blocked_user.display_name}"
38     assert_text "Revoking all blocks on #{blocked_user.display_name}"
39     assert_no_button "Revoke!"
40   end
41
42   test "revoke all link is present and working for moderators when viewed user has one active block" do
43     blocked_user = create(:user)
44     create(:user_block, :user => blocked_user)
45     sign_in_as(create(:moderator_user))
46
47     visit user_path(blocked_user)
48     assert_link "Revoke all blocks"
49
50     click_on "Revoke all blocks"
51     assert_title "Revoking all blocks on #{blocked_user.display_name}"
52     assert_text "Revoking all blocks on #{blocked_user.display_name}"
53     assert_unchecked_field "Are you sure you wish to revoke 1 active block?"
54     assert_button "Revoke!"
55   end
56
57   test "revoke all link is present and working for moderators when viewed user has multiple active blocks" do
58     blocked_user = create(:user)
59     create(:user_block, :user => blocked_user)
60     create(:user_block, :user => blocked_user)
61     create(:user_block, :expired, :user => blocked_user)
62     sign_in_as(create(:moderator_user))
63
64     visit user_path(blocked_user)
65     assert_link "Revoke all blocks"
66
67     click_on "Revoke all blocks"
68     assert_title "Revoking all blocks on #{blocked_user.display_name}"
69     assert_text "Revoking all blocks on #{blocked_user.display_name}"
70     assert_unchecked_field "Are you sure you wish to revoke 2 active blocks?"
71     assert_button "Revoke!"
72   end
73
74   test "duration controls are present for active blocks" do
75     creator_user = create(:moderator_user)
76     block = create(:user_block, :creator => creator_user, :reason => "Testing editing active blocks", :ends_at => Time.now.utc + 2.days)
77     sign_in_as(creator_user)
78
79     visit edit_user_block_path(block)
80     assert_field "Reason", :with => "Testing editing active blocks"
81     assert_select "user_block_period", :selected => "2 days"
82     assert_unchecked_field "Needs view"
83
84     fill_in "Reason", :with => "Editing active blocks works"
85     click_on "Update block"
86     assert_text(/Reason for block:\s+Editing active blocks works/)
87   end
88
89   test "duration controls are removed for inactive blocks" do
90     creator_user = create(:moderator_user)
91     block = create(:user_block, :expired, :creator => creator_user, :reason => "Testing editing expired blocks")
92     sign_in_as(creator_user)
93
94     visit edit_user_block_path(block)
95     assert_field "Reason", :with => "Testing editing expired blocks"
96     assert_no_select "user_block_period"
97     assert_no_field "Needs view"
98
99     fill_in "Reason", :with => "Editing expired blocks works"
100     click_on "Update block"
101     assert_text(/Reason for block:\s+Editing expired blocks works/)
102   end
103
104   test "other moderator can revoke 0-hour blocks" do
105     creator_user = create(:moderator_user)
106     other_moderator_user = create(:moderator_user)
107     block = create(:user_block, :zero_hour, :needs_view, :creator => creator_user, :reason => "Testing revoking 0-hour blocks")
108     sign_in_as(other_moderator_user)
109
110     visit edit_user_block_path(block)
111     assert_field "Reason", :with => "Testing revoking 0-hour blocks"
112     assert_no_select "user_block_period"
113     assert_no_field "Needs view"
114
115     fill_in "Reason", :with => "Revoking 0-hour blocks works"
116     click_on "Revoke block"
117     assert_text(/Revoker:\s+#{Regexp.escape other_moderator_user.display_name}/)
118     assert_text(/Status:\s+Ended/)
119     assert_text(/Reason for block:\s+Revoking 0-hour blocks works/)
120   end
121 end