From 0130c23af641f7ed434875b175a20bdf729ca336 Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Fri, 13 Jan 2023 17:21:48 +0000 Subject: [PATCH] create logs when processing bulk uploads --- app/services/bulk_upload/processor.rb | 19 ++++++++++++ spec/services/bulk_upload/processor_spec.rb | 34 +++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/app/services/bulk_upload/processor.rb b/app/services/bulk_upload/processor.rb index 93d3fd3e7..7e7031c14 100644 --- a/app/services/bulk_upload/processor.rb +++ b/app/services/bulk_upload/processor.rb @@ -8,12 +8,31 @@ class BulkUpload::Processor def call download validator.call + create_logs ensure downloader.delete_local_file! end private + def create_logs + log_creator_class.new( + bulk_upload:, + path: downloader.path, + ).call + end + + def log_creator_class + case bulk_upload.log_type + when "lettings" + BulkUpload::Lettings::LogCreator + when "sales" + BulkUpload::Sales::LogCreator + else + raise "Log creator not found for #{bulk_upload.log_type}" + end + end + def downloader @downloader ||= BulkUpload::Downloader.new(bulk_upload:) end diff --git a/spec/services/bulk_upload/processor_spec.rb b/spec/services/bulk_upload/processor_spec.rb index fce40b998..2114fbfd7 100644 --- a/spec/services/bulk_upload/processor_spec.rb +++ b/spec/services/bulk_upload/processor_spec.rb @@ -5,8 +5,8 @@ RSpec.describe BulkUpload::Processor do let(:bulk_upload) { create(:bulk_upload, :lettings) } - context "when processing a bulk upload with errors" do - describe "#call" do + describe "#call" do + context "when processing a bulk upload with errors" do let(:mock_downloader) do instance_double( BulkUpload::Downloader, @@ -30,5 +30,35 @@ RSpec.describe BulkUpload::Processor do expect(mock_downloader).to have_received(:delete_local_file!) end end + + context "when processing a bulk with perfect data" do + let(:path) { file_fixture("2022_23_lettings_bulk_upload.csv") } + + let(:mock_downloader) do + instance_double( + BulkUpload::Downloader, + call: nil, + path:, + delete_local_file!: nil, + ) + end + + let(:mock_creator) do + instance_double( + BulkUpload::Lettings::LogCreator, + call: nil, + path:, + ) + end + + it "creates logs" do + allow(BulkUpload::Downloader).to receive(:new).with(bulk_upload:).and_return(mock_downloader) + allow(BulkUpload::Lettings::LogCreator).to receive(:new).with(bulk_upload:, path:).and_return(mock_creator) + + processor.call + + expect(mock_creator).to have_received(:call) + end + end end end