Browse Source

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
pull/1358/head
Phil Lee 3 years ago
parent
commit
c1570f451f
  1. 4
      app/services/bulk_upload/lettings/row_parser.rb
  2. 6
      app/services/bulk_upload/lettings/validator.rb
  3. 36
      app/services/bulk_upload/processor.rb
  4. 39
      spec/services/bulk_upload/processor_spec.rb

4
app/services/bulk_upload/lettings/row_parser.rb

@ -203,6 +203,10 @@ class BulkUpload::Lettings::RowParser
block_log_creation block_log_creation
end end
def setup_section_incomplete?
log.form.setup_sections[0].subsections[0].is_incomplete?(log)
end
private private
def validate_location_related def validate_location_related

6
app/services/bulk_upload/lettings/validator.rb

@ -185,12 +185,12 @@ class BulkUpload::Lettings::Validator
QUESTIONS[field] QUESTIONS[field]
end end
private
def any_setup_sections_incomplete? 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 end
private
def over_column_error_threshold? def over_column_error_threshold?
fields = ("field_1".."field_134").to_a fields = ("field_1".."field_134").to_a
percentage_threshold = (row_parsers.size * COLUMN_PERCENTAGE_ERROR_THRESHOLD).ceil percentage_threshold = (row_parsers.size * COLUMN_PERCENTAGE_ERROR_THRESHOLD).ceil

36
app/services/bulk_upload/processor.rb

@ -12,11 +12,15 @@ class BulkUpload::Processor
validator.call validator.call
create_logs if validator.create_logs? if validator.any_setup_sections_incomplete?
send_correct_and_upload_again_mail unless validator.create_logs? send_setup_errors_mail
elsif validator.create_logs?
send_fix_errors_mail if created_logs_but_incompleted? create_logs
send_success_mail if created_logs_and_all_completed? 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 rescue StandardError => e
Sentry.capture_exception(e) Sentry.capture_exception(e)
send_failure_mail send_failure_mail
@ -26,16 +30,28 @@ class BulkUpload::Processor
private 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 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 end
def send_fix_errors_mail 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 end
def send_success_mail 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 end
def created_logs_but_incompleted? def created_logs_but_incompleted?
@ -47,7 +63,9 @@ private
end end
def send_failure_mail 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 end
def user def user

39
spec/services/bulk_upload/processor_spec.rb

@ -91,6 +91,42 @@ RSpec.describe BulkUpload::Processor do
end end
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 context "when processing a bulk upload with errors but below threshold (therefore creates logs)" do
let(:mock_downloader) do let(:mock_downloader) do
instance_double( instance_double(
@ -106,6 +142,7 @@ RSpec.describe BulkUpload::Processor do
BulkUpload::Lettings::Validator, BulkUpload::Lettings::Validator,
invalid?: false, invalid?: false,
call: nil, call: nil,
any_setup_sections_incomplete?: false,
create_logs?: true, create_logs?: true,
) )
end end
@ -156,6 +193,7 @@ RSpec.describe BulkUpload::Processor do
BulkUpload::Lettings::Validator, BulkUpload::Lettings::Validator,
invalid?: false, invalid?: false,
call: nil, call: nil,
any_setup_sections_incomplete?: false,
create_logs?: false, create_logs?: false,
) )
end end
@ -216,6 +254,7 @@ RSpec.describe BulkUpload::Processor do
BulkUpload::Lettings::Validator, BulkUpload::Lettings::Validator,
call: nil, call: nil,
create_logs?: true, create_logs?: true,
any_setup_sections_incomplete?: false,
invalid?: false, invalid?: false,
) )
end end

Loading…
Cancel
Save