61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'rails_helper'
 | 
						|
 | 
						|
describe Scheduler::SelfDestructScheduler do
 | 
						|
  let(:worker) { described_class.new }
 | 
						|
 | 
						|
  describe '#perform' do
 | 
						|
    let!(:account) { Fabricate(:account, domain: nil, suspended_at: nil) }
 | 
						|
 | 
						|
    context 'when not in self destruct mode' do
 | 
						|
      before do
 | 
						|
        allow(SelfDestructHelper).to receive(:self_destruct?).and_return(false)
 | 
						|
      end
 | 
						|
 | 
						|
      it 'returns without processing' do
 | 
						|
        worker.perform
 | 
						|
 | 
						|
        expect(account.reload.suspended_at).to be_nil
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when in self-destruct mode' do
 | 
						|
      before do
 | 
						|
        allow(SelfDestructHelper).to receive(:self_destruct?).and_return(true)
 | 
						|
      end
 | 
						|
 | 
						|
      context 'when sidekiq is overwhelmed' do
 | 
						|
        before do
 | 
						|
          stats = instance_double(Sidekiq::Stats, enqueued: described_class::MAX_ENQUEUED**2)
 | 
						|
          allow(Sidekiq::Stats).to receive(:new).and_return(stats)
 | 
						|
        end
 | 
						|
 | 
						|
        it 'returns without processing' do
 | 
						|
          worker.perform
 | 
						|
 | 
						|
          expect(account.reload.suspended_at).to be_nil
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      context 'when sidekiq is operational' do
 | 
						|
        it 'suspends local non-suspended accounts' do
 | 
						|
          worker.perform
 | 
						|
 | 
						|
          expect(account.reload.suspended_at).to_not be_nil
 | 
						|
        end
 | 
						|
 | 
						|
        it 'suspends local suspended accounts marked for deletion' do
 | 
						|
          account.update(suspended_at: 10.days.ago)
 | 
						|
          deletion_request = Fabricate(:account_deletion_request, account: account)
 | 
						|
 | 
						|
          worker.perform
 | 
						|
 | 
						|
          expect(account.reload.suspended_at).to be > 1.day.ago
 | 
						|
          expect { deletion_request.reload }.to raise_error(ActiveRecord::RecordNotFound)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |