7 changed files with 72 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||||||
|
class ProcessBulkUploadJob < ApplicationJob |
||||||
|
queue_as :default |
||||||
|
|
||||||
|
def perform(bulk_upload:) |
||||||
|
BulkUpload::Processor.new(bulk_upload:).call |
||||||
|
end |
||||||
|
end |
||||||
@ -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 |
||||||
@ -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…
Reference in new issue