From 2764591a7d4086fbc2a0ed3dff6cacca0dc58168 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 25 Jul 2024 04:29:43 +0300 Subject: [PATCH] Allow revokers to edit revoked blocks --- app/controllers/user_blocks_controller.rb | 5 +- config/locales/en.yml | 1 + .../user_blocks_controller_test.rb | 53 ++++++++++++++----- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/app/controllers/user_blocks_controller.rb b/app/controllers/user_blocks_controller.rb index 3ab217a60..664ac5681 100644 --- a/app/controllers/user_blocks_controller.rb +++ b/app/controllers/user_blocks_controller.rb @@ -63,8 +63,9 @@ class UserBlocksController < ApplicationController def update if @valid_params - if @user_block.creator != current_user - flash[:error] = t(".only_creator_can_edit") + if current_user != @user_block.creator && + current_user != @user_block.revoker + flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit") redirect_to :action => "edit" elsif @user_block.update( :ends_at => Time.now.utc + @block_period.hours, diff --git a/config/locales/en.yml b/config/locales/en.yml index 2b83fec1f..dc7f1a1c0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2940,6 +2940,7 @@ en: flash: "Created a block on user %{name}." update: only_creator_can_edit: "Only the moderator who created this block can edit it." + only_creator_or_revoker_can_edit: "Only the moderators who created or revoked this block can edit it." success: "Block updated." index: title: "User blocks" diff --git a/test/controllers/user_blocks_controller_test.rb b/test/controllers/user_blocks_controller_test.rb index d164d6aef..0c59e1439 100644 --- a/test/controllers/user_blocks_controller_test.rb +++ b/test/controllers/user_blocks_controller_test.rb @@ -483,23 +483,32 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest assert_equal "Original Reason", block.reason session_for(creator_user) + check_block_updates(block) + end + + ## + # test the update action on revoked blocks + def test_update_revoked + creator_user = create(:moderator_user) + revoker_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :revoked, :creator => creator_user, :revoker => revoker_user, :reason => "Original Reason") + + session_for(other_moderator_user) put user_block_path(block, :user_block_period => "0", :user_block => { :needs_view => false, :reason => "Updated Reason" }) - assert_redirected_to user_block_path(block) - assert_equal "Block updated.", flash[:notice] + assert_redirected_to edit_user_block_path(block) + assert_equal "Only the moderators who created or revoked this block can edit it.", flash[:error] block.reload - assert_not block.active? - assert_equal "Updated Reason", block.reason + assert_not_predicate block, :active? + assert_equal "Original Reason", block.reason - put user_block_path(block, - :user_block_period => "0", - :user_block => { :needs_view => true, :reason => "Updated Reason 2" }) - assert_redirected_to user_block_path(block) - assert_equal "Block updated.", flash[:notice] - block.reload - assert_predicate block, :active? - assert_equal "Updated Reason 2", block.reason + session_for(creator_user) + check_block_updates(block) + + session_for(revoker_user) + check_block_updates(block) end ## @@ -794,6 +803,26 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest private + def check_block_updates(block) + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => false, :reason => "Updated Reason" }) + assert_redirected_to user_block_path(block) + assert_equal "Block updated.", flash[:notice] + block.reload + assert_not_predicate block, :active? + assert_equal "Updated Reason", block.reason + + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => true, :reason => "Updated Reason 2" }) + assert_redirected_to user_block_path(block) + assert_equal "Block updated.", flash[:notice] + block.reload + assert_predicate block, :active? + assert_equal "Updated Reason 2", block.reason + 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" -- 2.39.5