1 # frozen_string_literal: true
3 require "application_system_test_case"
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)
10 visit user_path(blocked_user)
11 assert_no_link "Revoke all blocks"
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))
19 visit user_path(blocked_user)
20 assert_no_link "Revoke all blocks"
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))
28 visit user_path(blocked_user)
29 assert_no_link "Revoke all blocks"
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))
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!"
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))
47 visit user_path(blocked_user)
48 assert_link "Revoke all blocks"
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!"
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))
64 visit user_path(blocked_user)
65 assert_link "Revoke all blocks"
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!"
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)
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"
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/)
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)
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"
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/)
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)
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"
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/)