Add AccountWarning#appeal_eligible?
method (#33526)
This commit is contained in:
parent
3a4aed9890
commit
54e2030146
6 changed files with 24 additions and 7 deletions
|
@ -27,6 +27,7 @@ class AccountWarning < ApplicationRecord
|
||||||
suspend: 4_000,
|
suspend: 4_000,
|
||||||
}, suffix: :action
|
}, suffix: :action
|
||||||
|
|
||||||
|
APPEAL_WINDOW = 20.days
|
||||||
RECENT_PERIOD = 3.months.freeze
|
RECENT_PERIOD = 3.months.freeze
|
||||||
|
|
||||||
normalizes :text, with: ->(text) { text.to_s }, apply_to_nil: true
|
normalizes :text, with: ->(text) { text.to_s }, apply_to_nil: true
|
||||||
|
@ -49,6 +50,10 @@ class AccountWarning < ApplicationRecord
|
||||||
overruled_at.present?
|
overruled_at.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def appeal_eligible?
|
||||||
|
created_at >= APPEAL_WINDOW.ago
|
||||||
|
end
|
||||||
|
|
||||||
def to_log_human_identifier
|
def to_log_human_identifier
|
||||||
target_account.acct
|
target_account.acct
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
#
|
#
|
||||||
class Appeal < ApplicationRecord
|
class Appeal < ApplicationRecord
|
||||||
MAX_STRIKE_AGE = 20.days
|
|
||||||
|
|
||||||
TEXT_LENGTH_LIMIT = 2_000
|
TEXT_LENGTH_LIMIT = 2_000
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
@ -68,6 +66,6 @@ class Appeal < ApplicationRecord
|
||||||
private
|
private
|
||||||
|
|
||||||
def validate_time_frame
|
def validate_time_frame
|
||||||
errors.add(:base, I18n.t('strikes.errors.too_late')) if strike.created_at < MAX_STRIKE_AGE.ago
|
errors.add(:base, I18n.t('strikes.errors.too_late')) unless strike.appeal_eligible?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ class AccountWarningPolicy < ApplicationPolicy
|
||||||
end
|
end
|
||||||
|
|
||||||
def appeal?
|
def appeal?
|
||||||
target? && record.created_at >= Appeal::MAX_STRIKE_AGE.ago
|
target? && record.appeal_eligible?
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -8,4 +8,18 @@ RSpec.describe AccountWarning do
|
||||||
it { is_expected.to normalize(:text).from(nil).to('') }
|
it { is_expected.to normalize(:text).from(nil).to('') }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#appeal_eligible?' do
|
||||||
|
context 'when created too long ago' do
|
||||||
|
subject { Fabricate.build :account_warning, created_at: (described_class::APPEAL_WINDOW * 2).ago }
|
||||||
|
|
||||||
|
it { is_expected.to_not be_appeal_eligible }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when created recently' do
|
||||||
|
subject { Fabricate.build :account_warning, created_at: (described_class::APPEAL_WINDOW - 2.days).ago }
|
||||||
|
|
||||||
|
it { is_expected.to be_appeal_eligible }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ RSpec.describe Appeal do
|
||||||
it { is_expected.to validate_length_of(:text).is_at_most(described_class::TEXT_LENGTH_LIMIT) }
|
it { is_expected.to validate_length_of(:text).is_at_most(described_class::TEXT_LENGTH_LIMIT) }
|
||||||
|
|
||||||
context 'with a strike created too long ago' do
|
context 'with a strike created too long ago' do
|
||||||
let(:strike) { Fabricate.build :account_warning, created_at: (described_class::MAX_STRIKE_AGE * 2).ago }
|
let(:strike) { Fabricate.build :account_warning, created_at: (AccountWarning::APPEAL_WINDOW * 2).ago }
|
||||||
|
|
||||||
it { is_expected.to_not allow_values(strike).for(:strike).against(:base).on(:create) }
|
it { is_expected.to_not allow_values(strike).for(:strike).against(:base).on(:create) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,11 +31,11 @@ RSpec.describe AccountWarningPolicy do
|
||||||
|
|
||||||
context 'when account is target' do
|
context 'when account is target' do
|
||||||
context 'when record is appealable' do
|
context 'when record is appealable' do
|
||||||
it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago + 1.hour)) }
|
it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: AccountWarning::APPEAL_WINDOW.ago + 1.hour)) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when record is not appealable' do
|
context 'when record is not appealable' do
|
||||||
it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago - 1.hour)) }
|
it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: AccountWarning::APPEAL_WINDOW.ago - 1.hour)) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue