1 # frozen_string_literal: true
4 require_relative "../user_blocks/table_test_helper"
7 class ReceivedBlocksControllerTest < ActionDispatch::IntegrationTest
8 include UserBlocks::TableTestHelper
11 # test all routes which lead to this controller
14 { :path => "/user/username/blocks", :method => :get },
15 { :controller => "users/received_blocks", :action => "show", :user_display_name => "username" }
18 { :path => "/user/username/blocks/edit", :method => :get },
19 { :controller => "users/received_blocks", :action => "edit", :user_display_name => "username" }
22 { :path => "/user/username/blocks", :method => :delete },
23 { :controller => "users/received_blocks", :action => "destroy", :user_display_name => "username" }
28 blocked_user = create(:user)
29 unblocked_user = create(:user)
30 normal_user = create(:user)
31 active_block = create(:user_block, :user => blocked_user)
32 revoked_block = create(:user_block, :revoked, :user => blocked_user)
33 expired_block = create(:user_block, :expired, :user => unblocked_user)
35 # Asking for a list of blocks with a bogus user name should fail
36 get user_received_blocks_path("non_existent_user")
37 assert_response :not_found
38 assert_template "users/no_such_user"
39 assert_select "h1", "The user non_existent_user does not exist"
41 # Check the list of blocks for a user that has never been blocked
42 get user_received_blocks_path(normal_user)
43 assert_response :success
44 assert_select "table#block_list", false
45 assert_select "p", "#{normal_user.display_name} has not been blocked yet."
47 # Check the list of blocks for a user that is currently blocked
48 get user_received_blocks_path(blocked_user)
49 assert_response :success
50 assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
51 assert_select "a.active[href='#{user_received_blocks_path blocked_user}']"
52 assert_select "table#block_list tbody", :count => 1 do
54 assert_select "a[href='#{user_block_path(active_block)}']", 1
55 assert_select "a[href='#{user_block_path(revoked_block)}']", 1
58 # Check the list of blocks for a user that has previously been blocked
59 get user_received_blocks_path(unblocked_user)
60 assert_response :success
61 assert_select "h1 a[href='#{user_path unblocked_user}']", :text => unblocked_user.display_name
62 assert_select "a.active[href='#{user_received_blocks_path unblocked_user}']"
63 assert_select "table#block_list tbody", :count => 1 do
65 assert_select "a[href='#{user_block_path(expired_block)}']", 1
71 user_blocks = create_list(:user_block, 50, :user => user).reverse
72 next_path = user_received_blocks_path(user)
75 assert_response :success
76 check_user_blocks_table user_blocks[0...20]
77 check_no_page_link "Newer Blocks"
78 next_path = check_page_link "Older Blocks"
81 assert_response :success
82 check_user_blocks_table user_blocks[20...40]
83 check_page_link "Newer Blocks"
84 next_path = check_page_link "Older Blocks"
87 assert_response :success
88 check_user_blocks_table user_blocks[40...50]
89 check_page_link "Newer Blocks"
90 check_no_page_link "Older Blocks"
93 def test_show_invalid_paged
96 %w[-1 fred].each do |id|
97 get user_received_blocks_path(user, :before => id)
98 assert_redirected_to :controller => "/errors", :action => :bad_request
100 get user_received_blocks_path(user, :after => id)
101 assert_redirected_to :controller => "/errors", :action => :bad_request
106 # test the revoke all blocks page
108 blocked_user = create(:user)
109 create(:user_block, :user => blocked_user)
111 # Asking for the revoke all blocks page with a bogus user name should fail
112 get user_received_blocks_path("non_existent_user")
113 assert_response :not_found
115 # Check that the revoke all blocks page requires us to login
116 get edit_user_received_blocks_path(blocked_user)
117 assert_redirected_to login_path(:referer => edit_user_received_blocks_path(blocked_user))
119 # Login as a normal user
120 session_for(create(:user))
122 # Check that normal users can't load the revoke all blocks page
123 get edit_user_received_blocks_path(blocked_user)
124 assert_redirected_to :controller => "/errors", :action => "forbidden"
126 # Login as a moderator
127 session_for(create(:moderator_user))
129 # Check that the revoke all blocks page loads for moderators
130 get edit_user_received_blocks_path(blocked_user)
131 assert_response :success
132 assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
136 # test the revoke all action
138 blocked_user = create(:user)
139 active_block1 = create(:user_block, :user => blocked_user)
140 active_block2 = create(:user_block, :user => blocked_user)
141 expired_block1 = create(:user_block, :expired, :user => blocked_user)
142 blocks = [active_block1, active_block2, expired_block1]
143 moderator_user = create(:moderator_user)
145 assert_predicate active_block1, :active?
146 assert_predicate active_block2, :active?
147 assert_not_predicate expired_block1, :active?
149 # Check that normal users can't revoke all blocks
150 session_for(create(:user))
151 delete user_received_blocks_path(blocked_user, :confirm => true)
152 assert_redirected_to :controller => "/errors", :action => "forbidden"
154 blocks.each(&:reload)
155 assert_predicate active_block1, :active?
156 assert_predicate active_block2, :active?
157 assert_not_predicate expired_block1, :active?
159 # Check that confirmation is required
160 session_for(moderator_user)
161 delete user_received_blocks_path(blocked_user)
163 blocks.each(&:reload)
164 assert_predicate active_block1, :active?
165 assert_predicate active_block2, :active?
166 assert_not_predicate expired_block1, :active?
168 # Check that moderators can revoke all blocks
169 delete user_received_blocks_path(blocked_user, :confirm => true)
170 assert_redirected_to user_received_blocks_path(blocked_user)
172 blocks.each(&:reload)
173 assert_not_predicate active_block1, :active?
174 assert_not_predicate active_block2, :active?
175 assert_not_predicate expired_block1, :active?
176 assert_equal moderator_user, active_block1.revoker
177 assert_equal moderator_user, active_block2.revoker
178 assert_not_equal moderator_user, expired_block1.revoker