FIX: Bump reject_reason limit for reviewables to 2000 characters (#27507)

Followup 783c935dcb

Some admins were finding that the limit introduced above was
too short especially when sending an email to rejected users.
This commit bumps the limit from 500 to 2000 and also fixes
an issue where the friendly error message was not shown in
the browser.

c.f. https://meta.discourse.org/t/500-character-reject-reason-is-too-small-a-limit/291884
This commit is contained in:
Martin Brennan 2024-06-18 15:49:58 +10:00 committed by GitHub
parent 006169f782
commit 6b872c4c53
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 22 additions and 2 deletions

View File

@ -173,6 +173,7 @@ export default Component.extend({
`/review/${reviewable.id}/perform/${performableAction.server_action}?version=${version}`,
{
type: "PUT",
dataType: "json",
data,
}
)

View File

@ -36,7 +36,7 @@ class Reviewable < ActiveRecord::Base
enum :priority, { low: 0, medium: 5, high: 10 }, scopes: false, suffix: true
enum :sensitivity, { disabled: 0, low: 9, medium: 6, high: 3 }, scopes: false, suffix: true
validates :reject_reason, length: { maximum: 500 }
validates :reject_reason, length: { maximum: 2000 }
after_create { log_history(:created, created_by) }

View File

@ -2,7 +2,7 @@
RSpec.describe Reviewable, type: :model do
describe "Validations" do
it { is_expected.to validate_length_of(:reject_reason).is_at_most(500) }
it { is_expected.to validate_length_of(:reject_reason).is_at_most(2000) }
end
describe ".create" do

View File

@ -187,6 +187,25 @@ RSpec.describe ReviewablesController do
expect(json["errors"][0]).to eq(I18n.t("reviewables.already_handled_and_user_not_exist"))
end
it "returns a readable error message if reject_reason is too long" do
sign_in(admin)
Jobs.run_immediately!
SiteSetting.must_approve_users = true
user = Fabricate(:user)
user.activate
reviewable = ReviewableUser.find_by(target: user)
put "/review/#{reviewable.id}/perform/delete_user.json?version=0",
params: {
send_email: true,
reject_reason: "a" * 3000,
}
expect(response.code).to eq("422")
expect(response.parsed_body["errors"]).to eq(
["Reject reason " + I18n.t("errors.messages.too_long", count: 2000)],
)
end
context "when filtering by range" do
let(:from) { 3.days.ago.strftime("%F") }
let(:to) { 1.day.ago.strftime("%F") }