Fix already-invalid reports failing to resolve (#29027)

This commit is contained in:
Claire 2024-02-06 10:35:27 +01:00 committed by GitHub
parent 779d987fbc
commit 66dda7c762
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 4 deletions

View file

@ -47,9 +47,9 @@ class Report < ApplicationRecord
delegate :local?, to: :account delegate :local?, to: :account
validates :comment, length: { maximum: 1_000 }, if: :local? validates :comment, length: { maximum: 1_000 }, if: :local?
validates :rule_ids, absence: true, unless: :violation? validates :rule_ids, absence: true, if: -> { (category_changed? || rule_ids_changed?) && !violation? }
validate :validate_rule_ids validate :validate_rule_ids, if: -> { (category_changed? || rule_ids_changed?) && violation? }
# entries here need to be kept in sync with the front-end: # entries here need to be kept in sync with the front-end:
# - app/javascript/mastodon/features/notifications/components/report.jsx # - app/javascript/mastodon/features/notifications/components/report.jsx
@ -162,8 +162,6 @@ class Report < ApplicationRecord
end end
def validate_rule_ids def validate_rule_ids
return unless violation?
errors.add(:rule_ids, I18n.t('reports.errors.invalid_rules')) unless rules.size == rule_ids&.size errors.add(:rule_ids, I18n.t('reports.errors.invalid_rules')) unless rules.size == rule_ids&.size
end end

View file

@ -133,5 +133,18 @@ describe Report do
report = Fabricate.build(:report, account: remote_account, comment: Faker::Lorem.characters(number: 1001)) report = Fabricate.build(:report, account: remote_account, comment: Faker::Lorem.characters(number: 1001))
expect(report.valid?).to be true expect(report.valid?).to be true
end end
it 'is invalid if it references invalid rules' do
report = Fabricate.build(:report, category: :violation, rule_ids: [-1])
expect(report.valid?).to be false
expect(report).to model_have_error_on_field(:rule_ids)
end
it 'is invalid if it references rules but category is not "violation"' do
rule = Fabricate(:rule)
report = Fabricate.build(:report, category: :spam, rule_ids: rule.id)
expect(report.valid?).to be false
expect(report).to model_have_error_on_field(:rule_ids)
end
end end
end end