From e959741dc9c361397b7510cb788db11ce80cebd1 Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Fri, 3 Feb 2023 13:42:44 +0000 Subject: [PATCH] bulk upload mails users to fix logs on website --- app/services/bulk_upload/processor.rb | 9 +++ spec/services/bulk_upload/processor_spec.rb | 78 ++++++++++++++++++++- 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/app/services/bulk_upload/processor.rb b/app/services/bulk_upload/processor.rb index d4c86a720..d69f76243 100644 --- a/app/services/bulk_upload/processor.rb +++ b/app/services/bulk_upload/processor.rb @@ -14,6 +14,7 @@ class BulkUpload::Processor create_logs if validator.create_logs? + send_fix_errors_mail if created_logs_but_incompleted? send_success_mail if created_logs_and_all_completed? rescue StandardError => e Sentry.capture_exception(e) @@ -24,10 +25,18 @@ class BulkUpload::Processor private + def send_fix_errors_mail + BulkUploadMailer.send_bulk_upload_with_errors_mail(bulk_upload:).deliver_later + end + def send_success_mail BulkUploadMailer.send_bulk_upload_complete_mail(user:, bulk_upload:).deliver_later end + def created_logs_but_incompleted? + validator.create_logs? && bulk_upload.logs.where.not(status: %w[completed]).count.positive? + end + def created_logs_and_all_completed? validator.create_logs? && bulk_upload.logs.group(:status).count.keys == %w[completed] end diff --git a/spec/services/bulk_upload/processor_spec.rb b/spec/services/bulk_upload/processor_spec.rb index 7c2ebaf06..b751e7dd7 100644 --- a/spec/services/bulk_upload/processor_spec.rb +++ b/spec/services/bulk_upload/processor_spec.rb @@ -91,7 +91,7 @@ RSpec.describe BulkUpload::Processor do end end - context "when processing a bulk upload with errors" do + context "when processing a bulk upload with errors but below threshold (therefore creates logs)" do let(:mock_downloader) do instance_double( BulkUpload::Downloader, @@ -101,12 +101,68 @@ RSpec.describe BulkUpload::Processor do ) end + let(:mock_validator) do + instance_double( + BulkUpload::Lettings::Validator, + invalid?: false, + call: nil, + create_logs?: true, + ) + end + before do allow(BulkUpload::Downloader).to receive(:new).with(bulk_upload:).and_return(mock_downloader) + allow(BulkUpload::Lettings::Validator).to receive(:new).and_return(mock_validator) + end + + it "deletes the local file afterwards" do + processor.call + + expect(mock_downloader).to have_received(:delete_local_file!) end - it "persist the validation errors" do - expect { processor.call }.to change(BulkUploadError, :count) + it "sends fix errors email" do + mail_double = instance_double("ActionMailer::MessageDelivery", deliver_later: nil) + + allow(BulkUploadMailer).to receive(:send_bulk_upload_with_errors_mail).and_return(mail_double) + + processor.call + + expect(BulkUploadMailer).to have_received(:send_bulk_upload_with_errors_mail) + expect(mail_double).to have_received(:deliver_later) + end + + it "does not send success email" do + allow(BulkUploadMailer).to receive(:send_bulk_upload_complete_mail).and_call_original + + processor.call + + expect(BulkUploadMailer).not_to have_received(:send_bulk_upload_complete_mail) + end + end + + context "when processing a bulk upload with errors but above threshold (therefore does not create logs)" do + let(:mock_downloader) do + instance_double( + BulkUpload::Downloader, + call: nil, + path: file_fixture("2022_23_lettings_bulk_upload.csv"), + delete_local_file!: nil, + ) + end + + let(:mock_validator) do + instance_double( + BulkUpload::Lettings::Validator, + invalid?: false, + call: nil, + create_logs?: false, + ) + end + + before do + allow(BulkUpload::Downloader).to receive(:new).with(bulk_upload:).and_return(mock_downloader) + allow(BulkUpload::Lettings::Validator).to receive(:new).and_return(mock_validator) end it "deletes the local file afterwards" do @@ -115,6 +171,14 @@ RSpec.describe BulkUpload::Processor do expect(mock_downloader).to have_received(:delete_local_file!) end + it "does not send fix errors email" do + allow(BulkUploadMailer).to receive(:send_bulk_upload_with_errors_mail).and_call_original + + processor.call + + expect(BulkUploadMailer).not_to have_received(:send_bulk_upload_with_errors_mail) + end + it "does not send success email" do allow(BulkUploadMailer).to receive(:send_bulk_upload_complete_mail).and_call_original @@ -165,6 +229,14 @@ RSpec.describe BulkUpload::Processor do expect(mock_creator).to have_received(:call) end + it "does not send fix errors email" do + allow(BulkUploadMailer).to receive(:send_bulk_upload_with_errors_mail).and_call_original + + processor.call + + expect(BulkUploadMailer).not_to have_received(:send_bulk_upload_with_errors_mail) + end + it "sends success email" do mail_double = instance_double("ActionMailer::MessageDelivery", deliver_later: nil)