From 60033a51b653b3bc5b29f2beaee481c0bfa962a9 Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Mon, 12 Oct 2026 12:32:48 +0100 Subject: [PATCH] Require :period to avoid taking a nil for a 0 --- .../moderation_zones_controller.rb | 7 +++ .../moderation_zones_controller_test.rb | 46 ++++++++++++++----- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/app/controllers/moderation_zones_controller.rb b/app/controllers/moderation_zones_controller.rb index 155a4c6d0..ee85e6801 100644 --- a/app/controllers/moderation_zones_controller.rb +++ b/app/controllers/moderation_zones_controller.rb @@ -59,6 +59,13 @@ class ModerationZonesController < ApplicationController end def moderation_zone_params + param! :moderation_zone, Hash do |mz| + mz.param! :name, String + mz.param! :reason, String + mz.param! :zone, String + mz.param! :period, Integer, :min => 0, :required => true + end + params.expect(:moderation_zone => [:name, :reason, :zone, :period]).tap do |safe_params| safe_params[:ends_at] = safe_params.delete("period").to_i.hours.from_now end diff --git a/test/controllers/moderation_zones_controller_test.rb b/test/controllers/moderation_zones_controller_test.rb index 1d06352ba..84d4558de 100644 --- a/test/controllers/moderation_zones_controller_test.rb +++ b/test/controllers/moderation_zones_controller_test.rb @@ -84,7 +84,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :moderation_zone => { **attributes_for(:moderation_zone) .slice(:name, :reason, :zone), - :period => 2.days.in_hours + :period => 2.days.in_hours.to_i } } ) @@ -102,7 +102,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :moderation_zone => { **attributes_for(:moderation_zone) .slice(:name, :reason, :zone), - :period => 2.days.in_hours + :period => 2.days.in_hours.to_i } } ) @@ -125,7 +125,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :moderation_zone => { **attributes_for(:moderation_zone) .slice(:name, :zone), - :period => 6.months.in_hours + :period => 6.months.in_hours.to_i } } ) @@ -183,7 +183,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :name => moderation_zone.name, :reason => moderation_zone.reason, :zone => moderation_zone.zone, - :period => 2.weeks.in_hours + :period => 2.weeks.in_hours.to_i } } ) @@ -202,7 +202,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :name => moderation_zone.name, :reason => moderation_zone.reason, :zone => moderation_zone.zone, - :period => 2.weeks.in_hours + :period => 2.weeks.in_hours.to_i } } ) @@ -213,6 +213,27 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest assert_nil moderation_zone.revoker end + test "update, without period" do + creator = create(:moderator_user) + moderation_zone = create(:moderation_zone, :ends_at => 1.week.from_now, :creator => creator) + initial_ends_at = moderation_zone.ends_at + session_for(creator) + + patch( + moderation_zone_url(moderation_zone), + :params => { + :moderation_zone => { + :name => "New name!" + } + } + ) + assert_response :bad_request + + moderation_zone.reload + assert_nil moderation_zone.revoker + assert_equal initial_ends_at, moderation_zone.ends_at + end + test "update, with errors" do creator = create(:moderator_user) moderation_zone = create(:moderation_zone, :ends_at => 1.week.from_now, :creator => creator) @@ -225,7 +246,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :name => moderation_zone.name, :reason => "", :zone => moderation_zone.zone, - :period => 4.days.in_hours + :period => 4.days.in_hours.to_i } } ) @@ -265,7 +286,8 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest moderation_zone_url(moderation_zone), :params => { :moderation_zone => { - :reason => "Updated reason" + :reason => "Updated reason", + :period => 0 } } ) @@ -285,7 +307,8 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest moderation_zone_url(moderation_zone), :params => { :moderation_zone => { - :reason => "Updated reason" + :reason => "Updated reason", + :period => 0 } } ) @@ -307,7 +330,8 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest moderation_zone_url(moderation_zone), :params => { :moderation_zone => { - :reason => "Updated reason" + :reason => "Updated reason", + :period => 0 } } ) @@ -328,7 +352,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest :params => { :moderation_zone => { :reason => "Updated reason", - :period => 1.week.from_now + :period => 1.week.from_now.to_i } } ) @@ -348,7 +372,7 @@ class ModerationZonesControllerTest < ActionDispatch::IntegrationTest moderation_zone_url(moderation_zone), :params => { :moderation_zone => { - :period => 1.week.from_now + :period => 1.week.from_now.to_i } } ) -- 2.47.3