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