Fix already-invalid reports failing to resolve (#29027)
This commit is contained in:
parent
6383a2e4ee
commit
3868a63607
2 changed files with 15 additions and 4 deletions
|
@ -43,9 +43,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? }
|
||||||
|
|
||||||
enum category: {
|
enum category: {
|
||||||
other: 0,
|
other: 0,
|
||||||
|
@ -147,8 +147,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
|
||||||
|
|
||||||
|
|
|
@ -137,5 +137,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