Browse Source

add job to process bulk uploads

pull/1091/head
Phil Lee 3 years ago
parent
commit
d9d833bf3a
  1. 7
      app/jobs/process_bulk_upload_job.rb
  2. 2
      app/models/forms/bulk_upload_lettings/upload_your_file.rb
  3. 2
      app/models/forms/bulk_upload_sales/upload_your_file.rb
  4. 30
      app/services/bulk_upload/processor.rb
  5. 6
      spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb
  6. 6
      spec/models/forms/bulk_upload_sales/upload_your_file_spec.rb
  7. 19
      spec/services/bulk_upload/processor_spec.rb

7
app/jobs/process_bulk_upload_job.rb

@ -0,0 +1,7 @@
class ProcessBulkUploadJob < ApplicationJob
queue_as :default
def perform(bulk_upload:)
BulkUpload::Processor.new(bulk_upload:).call
end
end

2
app/models/forms/bulk_upload_lettings/upload_your_file.rb

@ -43,6 +43,8 @@ module Forms
storage_service.write_file(bulk_upload.identifier, File.read(file.path)) storage_service.write_file(bulk_upload.identifier, File.read(file.path))
ProcessBulkUploadJob.perform_later(bulk_upload:)
true true
end end

2
app/models/forms/bulk_upload_sales/upload_your_file.rb

@ -42,6 +42,8 @@ module Forms
storage_service.write_file(bulk_upload.identifier, File.read(file.path)) storage_service.write_file(bulk_upload.identifier, File.read(file.path))
end end
ProcessBulkUploadJob.perform_later(bulk_upload:)
true true
end end

30
app/services/bulk_upload/processor.rb

@ -0,0 +1,30 @@
class BulkUpload::Processor
attr_reader :bulk_upload
def initialize(bulk_upload:)
@bulk_upload = bulk_upload
end
def call
download
validator.call
end
private
def downloader
@downloader ||= BulkUpload::Downloader.new(bulk_upload:)
end
def download
downloader.call
end
# TODO: handle sales
def validator
@validator ||= BulkUpload::Lettings::Validator.new(
bulk_upload:,
path: downloader.path,
)
end
end

6
spec/models/forms/bulk_upload_lettings/upload_your_file_spec.rb

@ -51,5 +51,11 @@ RSpec.describe Forms::BulkUploadLettings::UploadYourFile do
expect(Storage::S3Service).to have_received(:new) expect(Storage::S3Service).to have_received(:new)
expect(mock_storage_service).to have_received(:write_file).with(bulk_upload.identifier, actual_file.read) expect(mock_storage_service).to have_received(:write_file).with(bulk_upload.identifier, actual_file.read)
end end
it "enqueues job to process bulk upload" do
expect {
form.save!
}.to have_enqueued_job(ProcessBulkUploadJob)
end
end end
end end

6
spec/models/forms/bulk_upload_sales/upload_your_file_spec.rb

@ -49,5 +49,11 @@ RSpec.describe Forms::BulkUploadSales::UploadYourFile do
expect(Storage::S3Service).to have_received(:new) expect(Storage::S3Service).to have_received(:new)
expect(mock_storage_service).to have_received(:write_file).with(bulk_upload.identifier, actual_file.read) expect(mock_storage_service).to have_received(:write_file).with(bulk_upload.identifier, actual_file.read)
end end
it "enqueues job to process bulk upload" do
expect {
form.save!
}.to have_enqueued_job(ProcessBulkUploadJob)
end
end end
end end

19
spec/services/bulk_upload/processor_spec.rb

@ -0,0 +1,19 @@
require "rails_helper"
RSpec.describe BulkUpload::Processor do
subject(:processor) { described_class.new(bulk_upload:) }
let(:bulk_upload) { create(:bulk_upload) }
context "when processing a bulk upload with errors" do
describe "#call" do
let(:mock_downloader) { instance_double(BulkUpload::Downloader, call: nil) }
it "persist the validation errors" do
allow(BulkUpload::Downloader).to receive(:new).with(bulk_upload:).and_return(mock_downloader)
expect { processor.call }.to change(BulkUploadError, :count).by(103)
end
end
end
end
Loading…
Cancel
Save