From c1570f451f02230d9fed8f4c0fbe4467cac9e8e8 Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Wed, 1 Mar 2023 11:58:03 +0000 Subject: [PATCH] bulk upload fix setup errors email - this plumbs in the condition so if any setup sections are incomplete we send that partcular email and prevent the remaining flow --- .../bulk_upload/lettings/row_parser.rb | 4 ++ .../bulk_upload/lettings/validator.rb | 6 +-- app/services/bulk_upload/processor.rb | 36 ++++++++++++----- spec/services/bulk_upload/processor_spec.rb | 39 +++++++++++++++++++ 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/app/services/bulk_upload/lettings/row_parser.rb b/app/services/bulk_upload/lettings/row_parser.rb index 426f122a1..c4493980f 100644 --- a/app/services/bulk_upload/lettings/row_parser.rb +++ b/app/services/bulk_upload/lettings/row_parser.rb @@ -203,6 +203,10 @@ class BulkUpload::Lettings::RowParser block_log_creation end + def setup_section_incomplete? + log.form.setup_sections[0].subsections[0].is_incomplete?(log) + end + private def validate_location_related diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index 992f06196..f6f6614cc 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/app/services/bulk_upload/lettings/validator.rb @@ -185,12 +185,12 @@ class BulkUpload::Lettings::Validator QUESTIONS[field] end -private - def any_setup_sections_incomplete? - row_parsers.any? { |row_parser| row_parser.log.form.setup_sections[0].subsections[0].is_incomplete?(row_parser.log) } + row_parsers.any?(&:setup_section_incomplete?) end +private + def over_column_error_threshold? fields = ("field_1".."field_134").to_a percentage_threshold = (row_parsers.size * COLUMN_PERCENTAGE_ERROR_THRESHOLD).ceil diff --git a/app/services/bulk_upload/processor.rb b/app/services/bulk_upload/processor.rb index bbf7e6cd1..dcf68e594 100644 --- a/app/services/bulk_upload/processor.rb +++ b/app/services/bulk_upload/processor.rb @@ -12,11 +12,15 @@ class BulkUpload::Processor validator.call - create_logs if validator.create_logs? - send_correct_and_upload_again_mail unless validator.create_logs? - - send_fix_errors_mail if created_logs_but_incompleted? - send_success_mail if created_logs_and_all_completed? + if validator.any_setup_sections_incomplete? + send_setup_errors_mail + elsif validator.create_logs? + create_logs + send_fix_errors_mail if created_logs_but_incompleted? + send_success_mail if created_logs_and_all_completed? + else + send_correct_and_upload_again_mail + end rescue StandardError => e Sentry.capture_exception(e) send_failure_mail @@ -26,16 +30,28 @@ class BulkUpload::Processor private + def send_setup_errors_mail + BulkUploadMailer + .send_bulk_upload_failed_file_setup_error_mail(bulk_upload:) + .deliver_later + end + def send_correct_and_upload_again_mail - BulkUploadMailer.send_correct_and_upload_again_mail(bulk_upload:).deliver_later + BulkUploadMailer + .send_correct_and_upload_again_mail(bulk_upload:) + .deliver_later end def send_fix_errors_mail - BulkUploadMailer.send_bulk_upload_with_errors_mail(bulk_upload:).deliver_later + 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 + BulkUploadMailer + .send_bulk_upload_complete_mail(user:, bulk_upload:) + .deliver_later end def created_logs_but_incompleted? @@ -47,7 +63,9 @@ private end def send_failure_mail - BulkUploadMailer.send_bulk_upload_failed_service_error_mail(bulk_upload:).deliver_later + BulkUploadMailer + .send_bulk_upload_failed_service_error_mail(bulk_upload:) + .deliver_later end def user diff --git a/spec/services/bulk_upload/processor_spec.rb b/spec/services/bulk_upload/processor_spec.rb index d56b2ff4e..48b0c0258 100644 --- a/spec/services/bulk_upload/processor_spec.rb +++ b/spec/services/bulk_upload/processor_spec.rb @@ -91,6 +91,42 @@ RSpec.describe BulkUpload::Processor do end end + context "when a log has an incomplete setup section" 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, + any_setup_sections_incomplete?: 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 "sends setup failure email" do + mail_double = instance_double("ActionMailer::MessageDelivery", deliver_later: nil) + + allow(BulkUploadMailer).to receive(:send_bulk_upload_failed_file_setup_error_mail).and_return(mail_double) + + processor.call + + expect(BulkUploadMailer).to have_received(:send_bulk_upload_failed_file_setup_error_mail) + expect(mail_double).to have_received(:deliver_later) + end + end + context "when processing a bulk upload with errors but below threshold (therefore creates logs)" do let(:mock_downloader) do instance_double( @@ -106,6 +142,7 @@ RSpec.describe BulkUpload::Processor do BulkUpload::Lettings::Validator, invalid?: false, call: nil, + any_setup_sections_incomplete?: false, create_logs?: true, ) end @@ -156,6 +193,7 @@ RSpec.describe BulkUpload::Processor do BulkUpload::Lettings::Validator, invalid?: false, call: nil, + any_setup_sections_incomplete?: false, create_logs?: false, ) end @@ -216,6 +254,7 @@ RSpec.describe BulkUpload::Processor do BulkUpload::Lettings::Validator, call: nil, create_logs?: true, + any_setup_sections_incomplete?: false, invalid?: false, ) end