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/)