Browse Source

summarise setup errors only if there are any

pull/1451/head
Phil Lee 3 years ago
parent
commit
28be962302
  1. 12
      app/components/bulk_upload_error_summary_table_component.rb
  2. 27
      spec/components/bulk_upload_error_summary_table_component_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

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

Loading…
Cancel
Save