From 2e3bbb6861553f624ef2dc01d46620638ff6b33b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 03:58:41 -0400 Subject: [PATCH] Move account suspension related coverage to concern spec (#32432) --- spec/models/account_spec.rb | 66 ------------------- .../concerns/account/suspensions_spec.rb | 65 ++++++++++++++++++ 2 files changed, 65 insertions(+), 66 deletions(-) create mode 100644 spec/models/concerns/account/suspensions_spec.rb diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index bd897a299..7a5deed59 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -10,64 +10,6 @@ RSpec.describe Account do let(:bob) { Fabricate(:account, username: 'bob') } - describe '#suspended_locally?' do - context 'when the account is not suspended' do - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - - context 'when the account is suspended locally' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) - end - - it 'returns true' do - expect(subject.suspended_locally?).to be true - end - end - - context 'when the account is suspended remotely' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) - end - - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - end - - describe '#suspend!' do - it 'marks the account as suspended and creates a deletion request' do - expect { subject.suspend! } - .to change(subject, :suspended?).from(false).to(true) - .and change(subject, :suspended_locally?).from(false).to(true) - .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) - end - - context 'when the account is of a local user' do - subject { local_user_account } - - let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } - - it 'creates a canonical domain block' do - subject.suspend! - expect(CanonicalEmailBlock.block?(subject.user_email)).to be true - end - - context 'when a canonical domain block already exists for that email' do - before do - Fabricate(:canonical_email_block, email: subject.user_email) - end - - it 'does not raise an error' do - expect { subject.suspend! }.to_not raise_error - end - end - end - end - describe '#follow!' do it 'creates a follow' do follow = subject.follow!(bob) @@ -1049,14 +991,6 @@ RSpec.describe Account do end end - describe 'suspended' do - it 'returns an array of accounts who are suspended' do - suspended_account = Fabricate(:account, suspended: true) - _account = Fabricate(:account, suspended: false) - expect(described_class.suspended).to contain_exactly(suspended_account) - end - end - describe 'searchable' do let!(:suspended_local) { Fabricate(:account, suspended: true, username: 'suspended_local') } let!(:suspended_remote) { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') } diff --git a/spec/models/concerns/account/suspensions_spec.rb b/spec/models/concerns/account/suspensions_spec.rb new file mode 100644 index 000000000..3d71f1b72 --- /dev/null +++ b/spec/models/concerns/account/suspensions_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Suspensions do + subject { Fabricate(:account) } + + describe '.suspended' do + let!(:suspended_account) { Fabricate :account, suspended: true } + + before { Fabricate :account, suspended: false } + + it 'returns accounts that are suspended' do + expect(Account.suspended) + .to contain_exactly(suspended_account) + end + end + + describe '#suspended_locally?' do + context 'when the account is not suspended' do + it { is_expected.to_not be_suspended_locally } + end + + context 'when the account is suspended locally' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) } + + it { is_expected.to be_suspended_locally } + end + + context 'when the account is suspended remotely' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) } + + it { is_expected.to_not be_suspended_locally } + end + end + + describe '#suspend!' do + it 'marks the account as suspended and creates a deletion request' do + expect { subject.suspend! } + .to change(subject, :suspended?).from(false).to(true) + .and change(subject, :suspended_locally?).from(false).to(true) + .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) + end + + context 'when the account is of a local user' do + subject { local_user_account } + + let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } + + it 'creates a canonical domain block' do + expect { subject.suspend! } + .to change { CanonicalEmailBlock.block?(subject.user_email) }.from(false).to(true) + end + + context 'when a canonical domain block already exists for that email' do + before { Fabricate(:canonical_email_block, email: subject.user_email) } + + it 'does not raise an error' do + expect { subject.suspend! } + .to_not raise_error + end + end + end + end +end