demarches-normaliennes/spec/jobs/archive_creation_job_spec.rb
2024-08-22 09:26:48 +02:00

43 lines
1.7 KiB
Ruby

# frozen_string_literal: true
describe ArchiveCreationJob, type: :job do
describe 'perform' do
let(:archive) { create(:archive, user_profile: instructeur, job_status: status, groupe_instructeurs: [procedure.groupe_instructeurs.first]) }
let(:instructeur) { create(:instructeur) }
let(:procedure) { create(:procedure, instructeurs: [instructeur]) }
let(:job) { ArchiveCreationJob.new(procedure, archive, instructeur) }
context 'when it fails' do
let(:status) { :pending }
let(:mailer) { double('mailer', deliver_later: true) }
before { expect(UserMailer).not_to receive(:send_archive) }
it 'does not send email and forward error for retry' do
allow(DownloadableFileService).to receive(:download_and_zip).and_raise(StandardError, "kaboom")
expect { job.perform_now }.to raise_error(StandardError, "kaboom")
expect(archive.reload.failed?).to eq(true)
end
end
context 'when it works' do
let(:mailer) { double('mailer', deliver_later: true) }
before do
allow(DownloadableFileService).to receive(:download_and_zip).and_return(true)
expect(UserMailer).to receive(:send_archive).and_return(mailer)
end
context 'when archive failed previously' do
let(:status) { :failed }
it 'restarts and works from failed states' do
expect { job.perform_now }.to change { archive.reload.failed? }.from(true).to(false)
end
end
context 'when archive start from pending state' do
let(:status) { :pending }
it 'restarts and works from failed states' do
expect { job.perform_now }.to change { archive.reload.generated? }.from(false).to(true)
end
end
end
end
end