Move account suspension related coverage to concern spec (#32432)
This commit is contained in:
		
							parent
							
								
									4134ccdbe0
								
							
						
					
					
						commit
						2e3bbb6861
					
				@ -10,64 +10,6 @@ RSpec.describe Account do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    let(:bob) { Fabricate(:account, username: 'bob') }
 | 
					    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
 | 
					    describe '#follow!' do
 | 
				
			||||||
      it 'creates a follow' do
 | 
					      it 'creates a follow' do
 | 
				
			||||||
        follow = subject.follow!(bob)
 | 
					        follow = subject.follow!(bob)
 | 
				
			||||||
@ -1049,14 +991,6 @@ RSpec.describe Account do
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    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
 | 
					    describe 'searchable' do
 | 
				
			||||||
      let!(:suspended_local)        { Fabricate(:account, suspended: true, username: 'suspended_local') }
 | 
					      let!(:suspended_local)        { Fabricate(:account, suspended: true, username: 'suspended_local') }
 | 
				
			||||||
      let!(:suspended_remote)       { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') }
 | 
					      let!(:suspended_remote)       { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										65
									
								
								spec/models/concerns/account/suspensions_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								spec/models/concerns/account/suspensions_spec.rb
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user