Browse Source

CLDC-2134 Rework summary and email (#1451)

* remove column errors from bulk upload email

* summarise setup errors only if there are any
pull/1459/head
Phil Lee 2 years ago committed by GitHub
parent
commit
579fa6a969
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      app/components/bulk_upload_error_summary_table_component.rb
  2. 13
      app/mailers/bulk_upload_mailer.rb
  3. 8
      app/models/bulk_upload.rb
  4. 27
      spec/components/bulk_upload_error_summary_table_component_spec.rb
  5. 31
      spec/mailers/bulk_upload_mailer_spec.rb

12
app/components/bulk_upload_error_summary_table_component.rb

@ -12,7 +12,7 @@ class BulkUploadErrorSummaryTableComponent < ViewComponent::Base
end end
def sorted_errors def sorted_errors
@sorted_errors ||= bulk_upload @sorted_errors ||= setup_errors.presence || bulk_upload
.bulk_upload_errors .bulk_upload_errors
.group(:col, :field, :error) .group(:col, :field, :error)
.having("count(*) > ?", display_threshold) .having("count(*) > ?", display_threshold)
@ -26,6 +26,16 @@ class BulkUploadErrorSummaryTableComponent < ViewComponent::Base
private private
def setup_errors
@setup_errors ||= bulk_upload
.bulk_upload_errors
.where(category: "setup")
.group(:col, :field, :error)
.having("count(*) > ?", display_threshold)
.count
.sort_by { |el| el[0][0].rjust(3, "0") }
end
def display_threshold def display_threshold
DISPLAY_THRESHOLD DISPLAY_THRESHOLD
end end

13
app/mailers/bulk_upload_mailer.rb

@ -33,19 +33,7 @@ class BulkUploadMailer < NotifyMailer
) )
end end
def columns_with_errors(bulk_upload:)
array = bulk_upload.columns_with_errors
if array.size > 3
"#{array.take(3).join(', ')} and more"
else
array.join(", ")
end
end
def send_correct_and_upload_again_mail(bulk_upload:) def send_correct_and_upload_again_mail(bulk_upload:)
error_description = "We noticed that you have a lot of similar errors in column #{columns_with_errors(bulk_upload:)}. Please correct your data export and upload again."
summary_report_link = if BulkUploadErrorSummaryTableComponent.new(bulk_upload:).errors? summary_report_link = if BulkUploadErrorSummaryTableComponent.new(bulk_upload:).errors?
summary_bulk_upload_lettings_result_url(bulk_upload) summary_bulk_upload_lettings_result_url(bulk_upload)
else else
@ -60,7 +48,6 @@ class BulkUploadMailer < NotifyMailer
upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time),
year_combo: bulk_upload.year_combo, year_combo: bulk_upload.year_combo,
lettings_or_sales: bulk_upload.log_type, lettings_or_sales: bulk_upload.log_type,
error_description:,
summary_report_link:, summary_report_link:,
}, },
) )

8
app/models/bulk_upload.rb

@ -30,14 +30,6 @@ class BulkUpload < ApplicationRecord
end end
end end
def columns_with_errors
bulk_upload_errors
.select(:col)
.distinct(:col)
.pluck(:col)
.sort_by { |col| col.rjust(2, "0") }
end
def general_needs? def general_needs?
needstype == 1 needstype == 1
end end

27
spec/components/bulk_upload_error_summary_table_component_spec.rb

@ -9,6 +9,7 @@ RSpec.describe BulkUploadErrorSummaryTableComponent, type: :component do
stub_const("BulkUploadErrorSummaryTableComponent::DISPLAY_THRESHOLD", 0) stub_const("BulkUploadErrorSummaryTableComponent::DISPLAY_THRESHOLD", 0)
end end
describe "#sorted_errors" do
context "when no errors" do context "when no errors" do
it "does not renders any tables" do it "does not renders any tables" do
result = render_inline(component) result = render_inline(component)
@ -93,6 +94,32 @@ RSpec.describe BulkUploadErrorSummaryTableComponent, type: :component do
end end
end end
context "when mix of setup and other errors" do
let!(:error_1) { create(:bulk_upload_error, bulk_upload:, col: "A", row: 1, category: "setup") }
before do
create(:bulk_upload_error, bulk_upload:, col: "B", row: 2, category: nil)
end
it "only returns the setup errors" do
result = render_inline(component)
tables = result.css("table")
expect(tables.size).to be(1)
table = result.css("table").css("th, td").map(&:content)
expect(table).to eql([
bulk_upload.prefix_namespace::RowParser.question_for_field(error_1.field.to_sym).to_s,
"Column A",
error_1.error,
"1 error",
])
end
end
end
describe "#errors?" do describe "#errors?" do
context "when there are no errors" do context "when there are no errors" do
it "returns false" do it "returns false" do

31
spec/mailers/bulk_upload_mailer_spec.rb

@ -116,7 +116,7 @@ RSpec.describe BulkUploadMailer do
create(:bulk_upload_error, bulk_upload:, col: "B") create(:bulk_upload_error, bulk_upload:, col: "B")
end end
it "sends correctly formed email with A, B" do it "sends correctly formed email" do
expect(notify_client).to receive(:send_email).with( expect(notify_client).to receive(:send_email).with(
email_address: user.email, email_address: user.email,
template_id: described_class::BULK_UPLOAD_FAILED_CSV_ERRORS_TEMPLATE_ID, template_id: described_class::BULK_UPLOAD_FAILED_CSV_ERRORS_TEMPLATE_ID,
@ -125,7 +125,6 @@ RSpec.describe BulkUploadMailer do
upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time), upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time),
year_combo: bulk_upload.year_combo, year_combo: bulk_upload.year_combo,
lettings_or_sales: bulk_upload.log_type, lettings_or_sales: bulk_upload.log_type,
error_description: "We noticed that you have a lot of similar errors in column A, B. Please correct your data export and upload again.",
summary_report_link: "http://localhost:3000/lettings-logs/bulk-upload-results/#{bulk_upload.id}", summary_report_link: "http://localhost:3000/lettings-logs/bulk-upload-results/#{bulk_upload.id}",
}, },
) )
@ -133,33 +132,5 @@ RSpec.describe BulkUploadMailer do
mailer.send_correct_and_upload_again_mail(bulk_upload:) mailer.send_correct_and_upload_again_mail(bulk_upload:)
end end
end end
context "when 4 columns with errors" do
before do
stub_const("BulkUploadErrorSummaryTableComponent::DISPLAY_THRESHOLD", 0)
create(:bulk_upload_error, bulk_upload:, col: "A")
create(:bulk_upload_error, bulk_upload:, col: "B")
create(:bulk_upload_error, bulk_upload:, col: "C")
create(:bulk_upload_error, bulk_upload:, col: "D")
end
it "sends correctly formed email with A, B, C and more" do
expect(notify_client).to receive(:send_email).with(
email_address: user.email,
template_id: described_class::BULK_UPLOAD_FAILED_CSV_ERRORS_TEMPLATE_ID,
personalisation: {
filename: bulk_upload.filename,
upload_timestamp: bulk_upload.created_at.to_fs(:govuk_date_and_time),
year_combo: bulk_upload.year_combo,
lettings_or_sales: bulk_upload.log_type,
error_description: "We noticed that you have a lot of similar errors in column A, B, C and more. Please correct your data export and upload again.",
summary_report_link: "http://localhost:3000/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary",
},
)
mailer.send_correct_and_upload_again_mail(bulk_upload:)
end
end
end end
end end

Loading…
Cancel
Save