<%= check_box_tag "confirm", "yes", false, { :class => "form-check-input" } %>
diff --git a/app/views/user_blocks/blocks_on.html.erb b/app/views/users/received_blocks/show.html.erb
similarity index 77%
rename from app/views/user_blocks/blocks_on.html.erb
rename to app/views/users/received_blocks/show.html.erb
index 73748e5570..ada2a568fe 100644
--- a/app/views/user_blocks/blocks_on.html.erb
+++ b/app/views/users/received_blocks/show.html.erb
@@ -3,11 +3,11 @@
<% content_for :heading_class, "pb-0" %>
<% content_for :heading do %>
<%= t(".heading_html", :name => link_to(@user.display_name, @user)) %>
- <%= render :partial => "navigation" %>
+ <%= render :partial => "user_blocks/navigation" %>
<% end %>
<% unless @user_blocks.empty? %>
-<%= render :partial => "page" %>
+<%= render :partial => "user_blocks/page" %>
<% else %>
<%= t ".empty", :name => @user.display_name %>
<% end %>
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index f392245022..c168972aac 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -35,14 +35,14 @@
<% if current_user.blocks.exists? %>
- <%= link_to t(".blocks on me"), user_blocks_on_path(current_user) %>
+ <%= link_to t(".blocks on me"), user_received_blocks_path(current_user) %>
<%= number_with_delimiter(current_user.blocks.active.size) %>
<% end %>
<% if can?(:create, UserBlock) and current_user.blocks_created.exists? %>
- <%= link_to t(".blocks by me"), user_blocks_by_path(current_user) %>
+ <%= link_to t(".blocks by me"), user_issued_blocks_path(current_user) %>
<%= number_with_delimiter(current_user.blocks_created.active.size) %>
<% end %>
@@ -93,21 +93,21 @@
<% if @user.blocks.exists? %>
- <%= link_to t(".block_history"), user_blocks_on_path(@user) %>
+ <%= link_to t(".block_history"), user_received_blocks_path(@user) %>
<%= number_with_delimiter(@user.blocks.active.size) %>
<% end %>
<% if @user.moderator? and @user.blocks_created.exists? %>
- <%= link_to t(".moderator_history"), user_blocks_by_path(@user) %>
+ <%= link_to t(".moderator_history"), user_issued_blocks_path(@user) %>
<%= number_with_delimiter(@user.blocks_created.active.size) %>
<% end %>
- <% if can?(:revoke_all, UserBlock) and @user.blocks.active.exists? %>
+ <% if can?(:destroy, UserBlock) and @user.blocks.active.exists? %>
- <%= link_to t(".revoke_all_blocks"), revoke_all_user_blocks_path(@user) %>
+ <%= link_to t(".revoke_all_blocks"), edit_user_received_blocks_path(@user) %>
<% end %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 5628d3ea94..4f21742065 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -2850,6 +2850,27 @@ en:
report: Report this User
go_public:
flash success: "All your edits are now public, and you are now allowed to edit."
+ issued_blocks:
+ show:
+ title: "Blocks by %{name}"
+ heading_html: "List of Blocks by %{name}"
+ empty: "%{name} has not made any blocks yet."
+ received_blocks:
+ show:
+ title: "Blocks on %{name}"
+ heading_html: "List of Blocks on %{name}"
+ empty: "%{name} has not been blocked yet."
+ edit:
+ title: "Revoking all blocks on %{block_on}"
+ heading_html: "Revoking all blocks on %{block_on}"
+ empty: "%{name} has no active blocks."
+ confirm: "Are you sure you wish to revoke %{active_blocks}?"
+ active_blocks:
+ one: "%{count} active block"
+ other: "%{count} active blocks"
+ revoke: "Revoke!"
+ destroy:
+ flash: "All active blocks have been revoked."
lists:
show:
title: Users
@@ -2926,16 +2947,6 @@ en:
title: "User blocks"
heading: "List of user blocks"
empty: "No blocks have been made yet."
- revoke_all:
- title: "Revoking all blocks on %{block_on}"
- heading_html: "Revoking all blocks on %{block_on}"
- empty: "%{name} has no active blocks."
- confirm: "Are you sure you wish to revoke %{active_blocks}?"
- active_blocks:
- one: "%{count} active block"
- other: "%{count} active blocks"
- revoke: "Revoke!"
- flash: "All active blocks have been revoked."
helper:
time_future_html: "Ends in %{time}."
until_login: "Active until the user logs in."
@@ -2966,14 +2977,6 @@ en:
read_html: "read at %{time}"
time_in_future_title: "%{time_absolute}; in %{time_relative}"
time_in_past_title: "%{time_absolute}; %{time_relative}"
- blocks_on:
- title: "Blocks on %{name}"
- heading_html: "List of Blocks on %{name}"
- empty: "%{name} has not been blocked yet."
- blocks_by:
- title: "Blocks by %{name}"
- heading_html: "List of Blocks by %{name}"
- empty: "%{name} has not made any blocks yet."
show:
title: "%{block_on} blocked by %{block_by}"
heading_html: "%{block_on} blocked by %{block_by}"
diff --git a/config/routes.rb b/config/routes.rb
index d7b1acd3a9..3ede0d33d5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -271,6 +271,10 @@
# user pages
resources :users, :path => "user", :param => :display_name, :only => [:show, :destroy] do
resource :role, :controller => "user_roles", :path => "roles/:role", :only => [:create, :destroy]
+ scope :module => :users do
+ resource :issued_blocks, :path => "blocks_by", :only => :show
+ resource :received_blocks, :path => "blocks", :only => [:show, :edit, :destroy]
+ end
end
get "/user/:display_name/account", :to => redirect(:path => "/account/edit")
post "/user/:display_name/set_status" => "users#set_status", :as => :set_status_user
@@ -330,11 +334,7 @@
resources :user_mutes, :only => [:index]
# banning pages
- get "/user/:display_name/blocks" => "user_blocks#blocks_on", :as => "user_blocks_on"
- get "/user/:display_name/blocks_by" => "user_blocks#blocks_by", :as => "user_blocks_by"
- get "/blocks/new/:display_name" => "user_blocks#new", :as => "new_user_block"
- resources :user_blocks, :except => :new
- match "/user/:display_name/blocks/revoke_all" => "user_blocks#revoke_all", :via => [:get, :post], :as => "revoke_all_user_blocks"
+ resources :user_blocks, :path_names => { :new => "new/:display_name" }
# issues and reports
resources :issues do
diff --git a/test/controllers/user_blocks/table_test_helper.rb b/test/controllers/user_blocks/table_test_helper.rb
new file mode 100644
index 0000000000..3506c31bb6
--- /dev/null
+++ b/test/controllers/user_blocks/table_test_helper.rb
@@ -0,0 +1,24 @@
+module UserBlocks
+ module TableTestHelper
+ private
+
+ def check_user_blocks_table(user_blocks)
+ assert_dom "table#block_list tbody tr" do |rows|
+ assert_equal user_blocks.count, rows.count, "unexpected number of rows in user blocks table"
+ rows.zip(user_blocks).map do |row, user_block|
+ assert_dom row, "a[href='#{user_block_path user_block}']", 1
+ end
+ end
+ end
+
+ def check_no_page_link(name)
+ assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/, :count => 0 }, "unexpected #{name} page link"
+ end
+
+ def check_page_link(name)
+ assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/ }, "missing #{name} page link" do |buttons|
+ return buttons.first.attributes["href"].value
+ end
+ end
+ end
+end
diff --git a/test/controllers/user_blocks_controller_test.rb b/test/controllers/user_blocks_controller_test.rb
index 183bc9b7ba..ddb33e9035 100644
--- a/test/controllers/user_blocks_controller_test.rb
+++ b/test/controllers/user_blocks_controller_test.rb
@@ -1,11 +1,14 @@
require "test_helper"
+require_relative "user_blocks/table_test_helper"
class UserBlocksControllerTest < ActionDispatch::IntegrationTest
+ include UserBlocks::TableTestHelper
+
##
# test all routes which lead to this controller
def test_routes
assert_routing(
- { :path => "/blocks/new/username", :method => :get },
+ { :path => "/user_blocks/new/username", :method => :get },
{ :controller => "user_blocks", :action => "new", :display_name => "username" }
)
@@ -33,23 +36,6 @@ def test_routes
{ :path => "/user_blocks/1", :method => :delete },
{ :controller => "user_blocks", :action => "destroy", :id => "1" }
)
-
- assert_routing(
- { :path => "/user/username/blocks", :method => :get },
- { :controller => "user_blocks", :action => "blocks_on", :display_name => "username" }
- )
- assert_routing(
- { :path => "/user/username/blocks_by", :method => :get },
- { :controller => "user_blocks", :action => "blocks_by", :display_name => "username" }
- )
- assert_routing(
- { :path => "/user/username/blocks/revoke_all", :method => :get },
- { :controller => "user_blocks", :action => "revoke_all", :display_name => "username" }
- )
- assert_routing(
- { :path => "/user/username/blocks/revoke_all", :method => :post },
- { :controller => "user_blocks", :action => "revoke_all", :display_name => "username" }
- )
end
##
@@ -603,83 +589,6 @@ def test_revoke_using_update_by_other_moderator
assert_equal other_moderator_user, block.revoker
end
- ##
- # test the revoke all page
- def test_revoke_all_page
- blocked_user = create(:user)
- create(:user_block, :user => blocked_user)
-
- # Asking for the revoke all blocks page with a bogus user name should fail
- get user_blocks_on_path("non_existent_user")
- assert_response :not_found
-
- # Check that the revoke all blocks page requires us to login
- get revoke_all_user_blocks_path(blocked_user)
- assert_redirected_to login_path(:referer => revoke_all_user_blocks_path(blocked_user))
-
- # Login as a normal user
- session_for(create(:user))
-
- # Check that normal users can't load the revoke all blocks page
- get revoke_all_user_blocks_path(blocked_user)
- assert_redirected_to :controller => "errors", :action => "forbidden"
-
- # Login as a moderator
- session_for(create(:moderator_user))
-
- # Check that the revoke all blocks page loads for moderators
- get revoke_all_user_blocks_path(blocked_user)
- assert_response :success
- assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
- end
-
- ##
- # test the revoke all action
- def test_revoke_all_action
- blocked_user = create(:user)
- active_block1 = create(:user_block, :user => blocked_user)
- active_block2 = create(:user_block, :user => blocked_user)
- expired_block1 = create(:user_block, :expired, :user => blocked_user)
- blocks = [active_block1, active_block2, expired_block1]
- moderator_user = create(:moderator_user)
-
- assert_predicate active_block1, :active?
- assert_predicate active_block2, :active?
- assert_not_predicate expired_block1, :active?
-
- # Login as a normal user
- session_for(create(:user))
-
- # Check that normal users can't load the block revoke page
- get revoke_all_user_blocks_path(:blocked_user)
- assert_redirected_to :controller => "errors", :action => "forbidden"
-
- # Login as a moderator
- session_for(moderator_user)
-
- # Check that revoking blocks using GET should fail
- get revoke_all_user_blocks_path(blocked_user, :confirm => true)
- assert_response :success
- assert_template "revoke_all"
-
- blocks.each(&:reload)
- assert_predicate active_block1, :active?
- assert_predicate active_block2, :active?
- assert_not_predicate expired_block1, :active?
-
- # Check that revoking blocks works using POST
- post revoke_all_user_blocks_path(blocked_user, :confirm => true)
- assert_redirected_to user_blocks_on_path(blocked_user)
-
- blocks.each(&:reload)
- assert_not_predicate active_block1, :active?
- assert_not_predicate active_block2, :active?
- assert_not_predicate expired_block1, :active?
- assert_equal moderator_user, active_block1.revoker
- assert_equal moderator_user, active_block2.revoker
- assert_not_equal moderator_user, expired_block1.revoker
- end
-
##
# test changes to end/deactivation dates
def test_dates_when_viewed_before_end
@@ -808,170 +717,6 @@ def test_update_legacy_deactivates_at
end
end
- ##
- # test the blocks_on action
- def test_blocks_on
- blocked_user = create(:user)
- unblocked_user = create(:user)
- normal_user = create(:user)
- active_block = create(:user_block, :user => blocked_user)
- revoked_block = create(:user_block, :revoked, :user => blocked_user)
- expired_block = create(:user_block, :expired, :user => unblocked_user)
-
- # Asking for a list of blocks with a bogus user name should fail
- get user_blocks_on_path("non_existent_user")
- assert_response :not_found
- assert_template "users/no_such_user"
- assert_select "h1", "The user non_existent_user does not exist"
-
- # Check the list of blocks for a user that has never been blocked
- get user_blocks_on_path(normal_user)
- assert_response :success
- assert_select "table#block_list", false
- assert_select "p", "#{normal_user.display_name} has not been blocked yet."
-
- # Check the list of blocks for a user that is currently blocked
- get user_blocks_on_path(blocked_user)
- assert_response :success
- assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
- assert_select "table#block_list tbody", :count => 1 do
- assert_select "tr", 2
- assert_select "a[href='#{user_block_path(active_block)}']", 1
- assert_select "a[href='#{user_block_path(revoked_block)}']", 1
- end
-
- # Check the list of blocks for a user that has previously been blocked
- get user_blocks_on_path(unblocked_user)
- assert_response :success
- assert_select "h1 a[href='#{user_path unblocked_user}']", :text => unblocked_user.display_name
- assert_select "table#block_list tbody", :count => 1 do
- assert_select "tr", 1
- assert_select "a[href='#{user_block_path(expired_block)}']", 1
- end
- end
-
- ##
- # test the blocks_on action with multiple pages
- def test_blocks_on_paged
- user = create(:user)
- user_blocks = create_list(:user_block, 50, :user => user).reverse
- next_path = user_blocks_on_path(user)
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[0...20]
- check_no_page_link "Newer Blocks"
- next_path = check_page_link "Older Blocks"
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[20...40]
- check_page_link "Newer Blocks"
- next_path = check_page_link "Older Blocks"
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[40...50]
- check_page_link "Newer Blocks"
- check_no_page_link "Older Blocks"
- end
-
- ##
- # test the blocks_on action with invalid pages
- def test_blocks_on_invalid_paged
- user = create(:user)
-
- %w[-1 0 fred].each do |id|
- get user_blocks_on_path(user, :before => id)
- assert_redirected_to :controller => :errors, :action => :bad_request
-
- get user_blocks_on_path(user, :after => id)
- assert_redirected_to :controller => :errors, :action => :bad_request
- end
- end
-
- ##
- # test the blocks_by action
- def test_blocks_by
- moderator_user = create(:moderator_user)
- second_moderator_user = create(:moderator_user)
- normal_user = create(:user)
- active_block = create(:user_block, :creator => moderator_user)
- expired_block = create(:user_block, :expired, :creator => second_moderator_user)
- revoked_block = create(:user_block, :revoked, :creator => second_moderator_user)
-
- # Asking for a list of blocks with a bogus user name should fail
- get user_blocks_by_path("non_existent_user")
- assert_response :not_found
- assert_template "users/no_such_user"
- assert_select "h1", "The user non_existent_user does not exist"
-
- # Check the list of blocks given by one moderator
- get user_blocks_by_path(moderator_user)
- assert_response :success
- assert_select "h1 a[href='#{user_path moderator_user}']", :text => moderator_user.display_name
- assert_select "table#block_list tbody", :count => 1 do
- assert_select "tr", 1
- assert_select "a[href='#{user_block_path(active_block)}']", 1
- end
-
- # Check the list of blocks given by a different moderator
- get user_blocks_by_path(second_moderator_user)
- assert_response :success
- assert_select "h1 a[href='#{user_path second_moderator_user}']", :text => second_moderator_user.display_name
- assert_select "table#block_list tbody", :count => 1 do
- assert_select "tr", 2
- assert_select "a[href='#{user_block_path(expired_block)}']", 1
- assert_select "a[href='#{user_block_path(revoked_block)}']", 1
- end
-
- # Check the list of blocks (not) given by a normal user
- get user_blocks_by_path(normal_user)
- assert_response :success
- assert_select "table#block_list", false
- assert_select "p", "#{normal_user.display_name} has not made any blocks yet."
- end
-
- ##
- # test the blocks_by action with multiple pages
- def test_blocks_by_paged
- user = create(:moderator_user)
- user_blocks = create_list(:user_block, 50, :creator => user).reverse
- next_path = user_blocks_by_path(user)
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[0...20]
- check_no_page_link "Newer Blocks"
- next_path = check_page_link "Older Blocks"
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[20...40]
- check_page_link "Newer Blocks"
- next_path = check_page_link "Older Blocks"
-
- get next_path
- assert_response :success
- check_user_blocks_table user_blocks[40...50]
- check_page_link "Newer Blocks"
- check_no_page_link "Older Blocks"
- end
-
- ##
- # test the blocks_by action with invalid pages
- def test_blocks_by_invalid_paged
- user = create(:moderator_user)
-
- %w[-1 0 fred].each do |id|
- get user_blocks_by_path(user, :before => id)
- assert_redirected_to :controller => :errors, :action => :bad_request
-
- get user_blocks_by_path(user, :after => id)
- assert_redirected_to :controller => :errors, :action => :bad_request
- end
- end
-
private
def check_block_buttons(block, edit: 0)
@@ -1025,23 +770,4 @@ def check_inactive_block_updates(block)
assert_equal "Updated Reason Again", block.reason
assert_equal original_ends_at, block.ends_at
end
-
- def check_user_blocks_table(user_blocks)
- assert_dom "table#block_list tbody tr" do |rows|
- assert_equal user_blocks.count, rows.count, "unexpected number of rows in user blocks table"
- rows.zip(user_blocks).map do |row, user_block|
- assert_dom row, "a[href='#{user_block_path user_block}']", 1
- end
- end
- end
-
- def check_no_page_link(name)
- assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/, :count => 0 }, "unexpected #{name} page link"
- end
-
- def check_page_link(name)
- assert_select "a.page-link", { :text => /#{Regexp.quote(name)}/ }, "missing #{name} page link" do |buttons|
- return buttons.first.attributes["href"].value
- end
- end
end
diff --git a/test/controllers/users/issued_blocks_controller_test.rb b/test/controllers/users/issued_blocks_controller_test.rb
new file mode 100644
index 0000000000..4fab264e9d
--- /dev/null
+++ b/test/controllers/users/issued_blocks_controller_test.rb
@@ -0,0 +1,95 @@
+require "test_helper"
+require_relative "../user_blocks/table_test_helper"
+
+module Users
+ class IssuedBlocksControllerTest < ActionDispatch::IntegrationTest
+ include UserBlocks::TableTestHelper
+
+ ##
+ # test all routes which lead to this controller
+ def test_routes
+ assert_routing(
+ { :path => "/user/username/blocks_by", :method => :get },
+ { :controller => "users/issued_blocks", :action => "show", :user_display_name => "username" }
+ )
+ end
+
+ def test_show
+ moderator_user = create(:moderator_user)
+ second_moderator_user = create(:moderator_user)
+ normal_user = create(:user)
+ active_block = create(:user_block, :creator => moderator_user)
+ expired_block = create(:user_block, :expired, :creator => second_moderator_user)
+ revoked_block = create(:user_block, :revoked, :creator => second_moderator_user)
+
+ # Asking for a list of blocks with a bogus user name should fail
+ get user_issued_blocks_path("non_existent_user")
+ assert_response :not_found
+ assert_template "users/no_such_user"
+ assert_select "h1", "The user non_existent_user does not exist"
+
+ # Check the list of blocks given by one moderator
+ get user_issued_blocks_path(moderator_user)
+ assert_response :success
+ assert_select "h1 a[href='#{user_path moderator_user}']", :text => moderator_user.display_name
+ assert_select "a.active[href='#{user_issued_blocks_path moderator_user}']"
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 1
+ assert_select "a[href='#{user_block_path(active_block)}']", 1
+ end
+
+ # Check the list of blocks given by a different moderator
+ get user_issued_blocks_path(second_moderator_user)
+ assert_response :success
+ assert_select "h1 a[href='#{user_path second_moderator_user}']", :text => second_moderator_user.display_name
+ assert_select "a.active[href='#{user_issued_blocks_path second_moderator_user}']"
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 2
+ assert_select "a[href='#{user_block_path(expired_block)}']", 1
+ assert_select "a[href='#{user_block_path(revoked_block)}']", 1
+ end
+
+ # Check the list of blocks (not) given by a normal user
+ get user_issued_blocks_path(normal_user)
+ assert_response :success
+ assert_select "table#block_list", false
+ assert_select "p", "#{normal_user.display_name} has not made any blocks yet."
+ end
+
+ def test_show_paged
+ user = create(:moderator_user)
+ user_blocks = create_list(:user_block, 50, :creator => user).reverse
+ next_path = user_issued_blocks_path(user)
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[0...20]
+ check_no_page_link "Newer Blocks"
+ next_path = check_page_link "Older Blocks"
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[20...40]
+ check_page_link "Newer Blocks"
+ next_path = check_page_link "Older Blocks"
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[40...50]
+ check_page_link "Newer Blocks"
+ check_no_page_link "Older Blocks"
+ end
+
+ def test_show_invalid_paged
+ user = create(:moderator_user)
+
+ %w[-1 0 fred].each do |id|
+ get user_issued_blocks_path(user, :before => id)
+ assert_redirected_to :controller => "/errors", :action => :bad_request
+
+ get user_issued_blocks_path(user, :after => id)
+ assert_redirected_to :controller => "/errors", :action => :bad_request
+ end
+ end
+ end
+end
diff --git a/test/controllers/users/received_blocks_controller_test.rb b/test/controllers/users/received_blocks_controller_test.rb
new file mode 100644
index 0000000000..a48a7e2cd5
--- /dev/null
+++ b/test/controllers/users/received_blocks_controller_test.rb
@@ -0,0 +1,179 @@
+require "test_helper"
+require_relative "../user_blocks/table_test_helper"
+
+module Users
+ class ReceivedBlocksControllerTest < ActionDispatch::IntegrationTest
+ include UserBlocks::TableTestHelper
+
+ ##
+ # test all routes which lead to this controller
+ def test_routes
+ assert_routing(
+ { :path => "/user/username/blocks", :method => :get },
+ { :controller => "users/received_blocks", :action => "show", :user_display_name => "username" }
+ )
+ assert_routing(
+ { :path => "/user/username/blocks/edit", :method => :get },
+ { :controller => "users/received_blocks", :action => "edit", :user_display_name => "username" }
+ )
+ assert_routing(
+ { :path => "/user/username/blocks", :method => :delete },
+ { :controller => "users/received_blocks", :action => "destroy", :user_display_name => "username" }
+ )
+ end
+
+ def test_show
+ blocked_user = create(:user)
+ unblocked_user = create(:user)
+ normal_user = create(:user)
+ active_block = create(:user_block, :user => blocked_user)
+ revoked_block = create(:user_block, :revoked, :user => blocked_user)
+ expired_block = create(:user_block, :expired, :user => unblocked_user)
+
+ # Asking for a list of blocks with a bogus user name should fail
+ get user_received_blocks_path("non_existent_user")
+ assert_response :not_found
+ assert_template "users/no_such_user"
+ assert_select "h1", "The user non_existent_user does not exist"
+
+ # Check the list of blocks for a user that has never been blocked
+ get user_received_blocks_path(normal_user)
+ assert_response :success
+ assert_select "table#block_list", false
+ assert_select "p", "#{normal_user.display_name} has not been blocked yet."
+
+ # Check the list of blocks for a user that is currently blocked
+ get user_received_blocks_path(blocked_user)
+ assert_response :success
+ assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
+ assert_select "a.active[href='#{user_received_blocks_path blocked_user}']"
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 2
+ assert_select "a[href='#{user_block_path(active_block)}']", 1
+ assert_select "a[href='#{user_block_path(revoked_block)}']", 1
+ end
+
+ # Check the list of blocks for a user that has previously been blocked
+ get user_received_blocks_path(unblocked_user)
+ assert_response :success
+ assert_select "h1 a[href='#{user_path unblocked_user}']", :text => unblocked_user.display_name
+ assert_select "a.active[href='#{user_received_blocks_path unblocked_user}']"
+ assert_select "table#block_list tbody", :count => 1 do
+ assert_select "tr", 1
+ assert_select "a[href='#{user_block_path(expired_block)}']", 1
+ end
+ end
+
+ def test_show_paged
+ user = create(:user)
+ user_blocks = create_list(:user_block, 50, :user => user).reverse
+ next_path = user_received_blocks_path(user)
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[0...20]
+ check_no_page_link "Newer Blocks"
+ next_path = check_page_link "Older Blocks"
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[20...40]
+ check_page_link "Newer Blocks"
+ next_path = check_page_link "Older Blocks"
+
+ get next_path
+ assert_response :success
+ check_user_blocks_table user_blocks[40...50]
+ check_page_link "Newer Blocks"
+ check_no_page_link "Older Blocks"
+ end
+
+ def test_show_invalid_paged
+ user = create(:user)
+
+ %w[-1 0 fred].each do |id|
+ get user_received_blocks_path(user, :before => id)
+ assert_redirected_to :controller => "/errors", :action => :bad_request
+
+ get user_received_blocks_path(user, :after => id)
+ assert_redirected_to :controller => "/errors", :action => :bad_request
+ end
+ end
+
+ ##
+ # test the revoke all blocks page
+ def test_edit
+ blocked_user = create(:user)
+ create(:user_block, :user => blocked_user)
+
+ # Asking for the revoke all blocks page with a bogus user name should fail
+ get user_received_blocks_path("non_existent_user")
+ assert_response :not_found
+
+ # Check that the revoke all blocks page requires us to login
+ get edit_user_received_blocks_path(blocked_user)
+ assert_redirected_to login_path(:referer => edit_user_received_blocks_path(blocked_user))
+
+ # Login as a normal user
+ session_for(create(:user))
+
+ # Check that normal users can't load the revoke all blocks page
+ get edit_user_received_blocks_path(blocked_user)
+ assert_redirected_to :controller => "/errors", :action => "forbidden"
+
+ # Login as a moderator
+ session_for(create(:moderator_user))
+
+ # Check that the revoke all blocks page loads for moderators
+ get edit_user_received_blocks_path(blocked_user)
+ assert_response :success
+ assert_select "h1 a[href='#{user_path blocked_user}']", :text => blocked_user.display_name
+ end
+
+ ##
+ # test the revoke all action
+ def test_destroy
+ blocked_user = create(:user)
+ active_block1 = create(:user_block, :user => blocked_user)
+ active_block2 = create(:user_block, :user => blocked_user)
+ expired_block1 = create(:user_block, :expired, :user => blocked_user)
+ blocks = [active_block1, active_block2, expired_block1]
+ moderator_user = create(:moderator_user)
+
+ assert_predicate active_block1, :active?
+ assert_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+
+ # Check that normal users can't revoke all blocks
+ session_for(create(:user))
+ delete user_received_blocks_path(blocked_user, :confirm => true)
+ assert_redirected_to :controller => "/errors", :action => "forbidden"
+
+ blocks.each(&:reload)
+ assert_predicate active_block1, :active?
+ assert_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+
+ # Check that confirmation is required
+ session_for(moderator_user)
+ delete user_received_blocks_path(blocked_user)
+
+ blocks.each(&:reload)
+ assert_predicate active_block1, :active?
+ assert_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+
+ # Check that moderators can revoke all blocks
+ delete user_received_blocks_path(blocked_user, :confirm => true)
+ assert_redirected_to user_received_blocks_path(blocked_user)
+
+ blocks.each(&:reload)
+ assert_not_predicate active_block1, :active?
+ assert_not_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+ assert_equal moderator_user, active_block1.revoker
+ assert_equal moderator_user, active_block2.revoker
+ assert_not_equal moderator_user, expired_block1.revoker
+ end
+ end
+end
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb
index 732745539a..ba1af9509e 100644
--- a/test/controllers/users_controller_test.rb
+++ b/test/controllers/users_controller_test.rb
@@ -305,7 +305,7 @@ def test_show
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/account']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
- assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 0
+ assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0
end
# Test a user who has been blocked
@@ -321,7 +321,7 @@ def test_show
assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/account']", 0
assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks']", 1
assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks_by']", 0
- assert_select "a[href='/blocks/new/#{ERB::Util.u(blocked_user.display_name)}']", 0
+ assert_select "a[href='/user_blocks/new/#{ERB::Util.u(blocked_user.display_name)}']", 0
end
# Test a moderator who has applied blocks
@@ -337,7 +337,7 @@ def test_show
assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/account']", 0
assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks_by']", 1
- assert_select "a[href='/blocks/new/#{ERB::Util.u(moderator_user.display_name)}']", 0
+ assert_select "a[href='/user_blocks/new/#{ERB::Util.u(moderator_user.display_name)}']", 0
end
# Login as a normal user
@@ -354,7 +354,7 @@ def test_show
assert_select "a[href='/account/edit']", 1
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
- assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 0
+ assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0
assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 0
end
@@ -372,7 +372,7 @@ def test_show
assert_select "a[href='/account/edit']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
- assert_select "a[href='/blocks/new/#{ERB::Util.u(user.display_name)}']", 1
+ assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 1
assert_select "a[href='/api/0.6/user/#{ERB::Util.u(user.id)}']", 1
end
end
diff --git a/test/system/user_blocks_test.rb b/test/system/user_blocks_test.rb
index e9fa4e7ec4..52fe3bc3dc 100644
--- a/test/system/user_blocks_test.rb
+++ b/test/system/user_blocks_test.rb
@@ -31,7 +31,7 @@ class UserBlocksSystemTest < ApplicationSystemTestCase
blocked_user = create(:user)
sign_in_as(create(:moderator_user))
- visit revoke_all_user_blocks_path(blocked_user)
+ visit edit_user_received_blocks_path(blocked_user)
assert_title "Revoking all blocks on #{blocked_user.display_name}"
assert_text "Revoking all blocks on #{blocked_user.display_name}"
assert_no_button "Revoke!"