2023-11-16 15:36:59 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'rails_helper'
|
|
|
|
|
2024-09-04 07:12:25 +02:00
|
|
|
RSpec.describe Scheduler::SelfDestructScheduler do
|
2023-11-16 15:36:59 +01:00
|
|
|
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
|