From a4a5d9c8f7f8ae991686f253ebca5a3373e513e7 Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Tue, 9 Jun 2026 14:28:10 +0100 Subject: [PATCH] Assign revoker after update deactivates modzone --- .../moderation_zones_controller.rb | 9 ++++++++ .../moderation_zones_controller_test.rb | 23 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/app/controllers/moderation_zones_controller.rb b/app/controllers/moderation_zones_controller.rb index 552832d78..369dce088 100644 --- a/app/controllers/moderation_zones_controller.rb +++ b/app/controllers/moderation_zones_controller.rb @@ -34,6 +34,8 @@ class ModerationZonesController < ApplicationController end def update + check_revocation(@moderation_zone, moderation_zone_params) + if @moderation_zone.update(moderation_zone_params) redirect_to moderation_zones_url, :notice => t(".success"), :status => :see_other else @@ -52,4 +54,11 @@ class ModerationZonesController < ApplicationController safe_params[:ends_at] = safe_params.delete("period").to_i.hours.from_now end end + + def check_revocation(modzone, modzone_params) + duplicate = modzone.dup + previously_active = duplicate.active? + duplicate.assign_attributes(modzone_params) + modzone.revoker = current_user if previously_active && !duplicate.active? + end end diff --git a/test/controllers/moderation_zones_controller_test.rb b/test/controllers/moderation_zones_controller_test.rb index 4c7f2dbfe..76b24cd17 100644 --- a/test/controllers/moderation_zones_controller_test.rb +++ b/test/controllers/moderation_zones_controller_test.rb @@ -200,6 +200,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest moderation_zone.reload assert_in_delta moderation_zone.ends_at, 2.weeks.from_now, 10.seconds + assert_nil moderation_zone.revoker end test "update, with errors" do @@ -221,4 +222,26 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest assert_response :unprocessable_content assert_dom "option[selected]", :text => "4 days" end + + test "update to revoke" do + revoker = create(:moderator_user) + moderation_zone = create(:moderation_zone, :ends_at => 1.week.from_now) + session_for(revoker) + + patch( + moderation_zone_url(moderation_zone), + :params => { + :moderation_zone => { + :name => moderation_zone.name, + :reason => moderation_zone.reason, + :zone => moderation_zone.zone, + :period => 0 + } + } + ) + assert_redirected_to moderation_zones_url + + moderation_zone.reload + assert_equal revoker, moderation_zone.revoker + end end -- 2.47.3