Fix already-invalid reports failing to resolve (#29027)
This commit is contained in:
parent
e1be281e3d
commit
297ad9aeb8
2 changed files with 15 additions and 4 deletions
|
@ -44,9 +44,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
|
||||||
|
@ -154,8 +154,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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue