Prevent reactivating inactive blocks

This commit is contained in:
Anton Khorev 2024-08-15 12:59:49 +03:00
parent 953d8b4b59
commit 323b7032ba
3 changed files with 39 additions and 15 deletions

View file

@ -67,15 +67,20 @@ class UserBlocksController < ApplicationController
current_user != @user_block.revoker current_user != @user_block.revoker
flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit") flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
redirect_to :action => "edit" redirect_to :action => "edit"
elsif @user_block.update(
:ends_at => Time.now.utc + @block_period.hours,
:reason => params[:user_block][:reason],
:needs_view => params[:user_block][:needs_view]
)
flash[:notice] = t(".success")
redirect_to(@user_block)
else else
render :action => "edit" user_block_was_active = @user_block.active?
@user_block.reason = params[:user_block][:reason]
@user_block.needs_view = params[:user_block][:needs_view]
@user_block.ends_at = Time.now.utc + @block_period.hours
if !user_block_was_active && @user_block.active?
flash.now[:error] = t(".inactive_block_cannot_be_reactivated")
render :action => "edit"
elsif @user_block.save
flash[:notice] = t(".success")
redirect_to @user_block
else
render :action => "edit"
end
end end
else else
redirect_to edit_user_block_path(:id => params[:id]) redirect_to edit_user_block_path(:id => params[:id])

View file

@ -2950,6 +2950,7 @@ en:
update: update:
only_creator_can_edit: "Only the moderator who created this block can edit it." 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." only_creator_or_revoker_can_edit: "Only the moderators who created or revoked this block can edit it."
inactive_block_cannot_be_reactivated: "This block is inactive and cannot be reactivated."
success: "Block updated." success: "Block updated."
index: index:
title: "User blocks" title: "User blocks"

View file

@ -469,7 +469,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
assert_equal "Original Reason", block.reason assert_equal "Original Reason", block.reason
session_for(creator_user) session_for(creator_user)
check_block_updates(block) check_inactive_block_updates(block)
end end
## ##
@ -491,10 +491,10 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
assert_equal "Original Reason", block.reason assert_equal "Original Reason", block.reason
session_for(creator_user) session_for(creator_user)
check_block_updates(block) check_inactive_block_updates(block)
session_for(revoker_user) session_for(revoker_user)
check_block_updates(block) check_inactive_block_updates(block)
end end
## ##
@ -798,7 +798,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
end end
end end
def check_block_updates(block) def check_inactive_block_updates(block)
put user_block_path(block, put user_block_path(block,
:user_block_period => "0", :user_block_period => "0",
:user_block => { :needs_view => false, :reason => "Updated Reason" }) :user_block => { :needs_view => false, :reason => "Updated Reason" })
@ -810,12 +810,30 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest
put user_block_path(block, put user_block_path(block,
:user_block_period => "0", :user_block_period => "0",
:user_block => { :needs_view => true, :reason => "Updated Reason 2" }) :user_block => { :needs_view => true, :reason => "Updated Reason Needs View" })
assert_response :success
assert_equal "This block is inactive and cannot be reactivated.", flash[:error]
block.reload
assert_not_predicate block, :active?
assert_equal "Updated Reason", block.reason
put user_block_path(block,
:user_block_period => "1",
:user_block => { :needs_view => false, :reason => "Updated Reason Duration Extended" })
assert_response :success
assert_equal "This block is inactive and cannot be reactivated.", flash[:error]
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 => false, :reason => "Updated Reason Again" })
assert_redirected_to user_block_path(block) assert_redirected_to user_block_path(block)
assert_equal "Block updated.", flash[:notice] assert_equal "Block updated.", flash[:notice]
block.reload block.reload
assert_predicate block, :active? assert_not_predicate block, :active?
assert_equal "Updated Reason 2", block.reason assert_equal "Updated Reason Again", block.reason
end end
def check_user_blocks_table(user_blocks) def check_user_blocks_table(user_blocks)