diff --git a/app/jobs/data_import_job.rb b/app/jobs/data_import_job.rb index b14996fba..0a973c8bd 100644 --- a/app/jobs/data_import_job.rb +++ b/app/jobs/data_import_job.rb @@ -3,6 +3,7 @@ class DataImportJob < ApplicationJob queue_as :low + retry_on ActiveStorage::FileNotFoundError, wait: 1.minute, attempts: 3 def perform(data_import) @data_import = data_import diff --git a/app/models/data_import.rb b/app/models/data_import.rb index 874eb75f8..a44650a22 100644 --- a/app/models/data_import.rb +++ b/app/models/data_import.rb @@ -29,6 +29,7 @@ class DataImport < ApplicationRecord private def process_data_import - DataImportJob.perform_later(self) + # we wait for the file to be uploaded to the cloud + DataImportJob.set(wait: 1.minute).perform_later(self) end end diff --git a/spec/jobs/data_import_job_spec.rb b/spec/jobs/data_import_job_spec.rb index 67ca4dd73..ca20ce43b 100644 --- a/spec/jobs/data_import_job_spec.rb +++ b/spec/jobs/data_import_job_spec.rb @@ -13,6 +13,20 @@ RSpec.describe DataImportJob do end end + describe 'retrying the job' do + context 'when ActiveStorage::FileNotFoundError is raised' do + before do + allow(data_import.import_file).to receive(:download).and_raise(ActiveStorage::FileNotFoundError) + end + + it 'retries the job' do + expect do + described_class.perform_now(data_import) + end.to have_enqueued_job(described_class).at_least(1).times + end + end + end + describe 'importing data' do context 'when the data is valid' do it 'imports data into the account' do diff --git a/spec/models/data_import_spec.rb b/spec/models/data_import_spec.rb index 84805f86d..2b7429cf1 100644 --- a/spec/models/data_import_spec.rb +++ b/spec/models/data_import_spec.rb @@ -10,4 +10,14 @@ RSpec.describe DataImport do expect(build(:data_import, data_type: 'Xyc').valid?).to be false end end + + describe 'callbacks' do + let(:data_import) { build(:data_import) } + + it 'schedules a job after creation' do + expect do + data_import.save + end.to have_enqueued_job(DataImportJob).with(data_import).on_queue('low') + end + end end