Add `AccountWarning#appeal_eligible?` method (#33526)
This commit is contained in:
		
							parent
							
								
									3a4aed9890
								
							
						
					
					
						commit
						54e2030146
					
				|  | @ -27,6 +27,7 @@ class AccountWarning < ApplicationRecord | |||
|     suspend: 4_000, | ||||
|   }, suffix: :action | ||||
| 
 | ||||
|   APPEAL_WINDOW = 20.days | ||||
|   RECENT_PERIOD = 3.months.freeze | ||||
| 
 | ||||
|   normalizes :text, with: ->(text) { text.to_s }, apply_to_nil: true | ||||
|  | @ -49,6 +50,10 @@ class AccountWarning < ApplicationRecord | |||
|     overruled_at.present? | ||||
|   end | ||||
| 
 | ||||
|   def appeal_eligible? | ||||
|     created_at >= APPEAL_WINDOW.ago | ||||
|   end | ||||
| 
 | ||||
|   def to_log_human_identifier | ||||
|     target_account.acct | ||||
|   end | ||||
|  |  | |||
|  | @ -16,8 +16,6 @@ | |||
| #  updated_at             :datetime         not null | ||||
| # | ||||
| class Appeal < ApplicationRecord | ||||
|   MAX_STRIKE_AGE = 20.days | ||||
| 
 | ||||
|   TEXT_LENGTH_LIMIT = 2_000 | ||||
| 
 | ||||
|   belongs_to :account | ||||
|  | @ -68,6 +66,6 @@ class Appeal < ApplicationRecord | |||
|   private | ||||
| 
 | ||||
|   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 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ class AccountWarningPolicy < ApplicationPolicy | |||
|   end | ||||
| 
 | ||||
|   def appeal? | ||||
|     target? && record.created_at >= Appeal::MAX_STRIKE_AGE.ago | ||||
|     target? && record.appeal_eligible? | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
|  |  | |||
|  | @ -8,4 +8,18 @@ RSpec.describe AccountWarning do | |||
|       it { is_expected.to normalize(:text).from(nil).to('') } | ||||
|     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 | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ RSpec.describe Appeal do | |||
|     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 | ||||
|       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) } | ||||
|     end | ||||
|  |  | |||
|  | @ -31,11 +31,11 @@ RSpec.describe AccountWarningPolicy do | |||
| 
 | ||||
|     context 'when account is target' 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 | ||||
| 
 | ||||
|       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 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue