diff --git a/app/helpers/logs_helper.rb b/app/helpers/logs_helper.rb index e499f2585..4b8f6211f 100644 --- a/app/helpers/logs_helper.rb +++ b/app/helpers/logs_helper.rb @@ -78,7 +78,7 @@ module LogsHelper end def unique_answers_to_be_cleared(bulk_upload) - all_answers_to_be_cleared(bulk_upload.bulk_upload_errors).uniq(&:field) + all_answers_to_be_cleared(bulk_upload.bulk_upload_errors).uniq { |error| [error.field, error.row] } end def answers_to_be_deleted_title_text(bulk_upload) diff --git a/spec/helpers/logs_helper_spec.rb b/spec/helpers/logs_helper_spec.rb index fe06e79cf..d75768eb0 100644 --- a/spec/helpers/logs_helper_spec.rb +++ b/spec/helpers/logs_helper_spec.rb @@ -7,57 +7,132 @@ RSpec.describe LogsHelper, type: :helper do context "with a lettings bulk upload with various errors" do let(:bulk_upload) { create(:bulk_upload, :lettings) } - before do - errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered), - OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category), - OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category), - OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category), - OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category)] - errors.each do |error| - bulk_upload.bulk_upload_errors.create!( - field: error.attribute, - error: error.message, - tenant_code: "test", - property_ref: "test", - row: "test", - cell: "test", - col: "test", - category: error.category, - ) + context "with one row" do + before do + errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation)] + errors.each do |error| + bulk_upload.bulk_upload_errors.create!( + field: error.attribute, + error: error.message, + tenant_code: "test", + property_ref: "test", + row: "test", + cell: "test", + col: "test", + category: error.category, + ) + end + end + + it "returns the correct unique answers to be cleared" do + expect(result.count).to eq(3) + expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62]) end end - it "returns the correct unique answers to be cleared" do - expect(result.count).to eq(3) - expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62]) + context "with multiple rows" do + before do + errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered, row: 1), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category, row: 1), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category, row: 1), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 1), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 1), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation, row: 1), + OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered, row: 2), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category, row: 2), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category, row: 2), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 2), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 2), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation, row: 2)] + errors.each do |error| + bulk_upload.bulk_upload_errors.create!( + field: error.attribute, + error: error.message, + tenant_code: "test", + property_ref: "test", + row: error.row, + cell: "test", + col: "test", + category: error.category, + ) + end + end + + it "returns the correct unique answers to be cleared" do + expect(result.count).to eq(6) + expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62 field_60 field_61 field_62]) + end end end context "with a sales bulk upload with various errors" do let(:bulk_upload) { create(:bulk_upload, :sales) } - before do - errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered), - OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category), - OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category), - OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category), - OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category)] - errors.each do |error| - bulk_upload.bulk_upload_errors.create!( - field: error.attribute, - error: error.message, - purchaser_code: "test", - row: "test", - cell: "test", - col: "test", - category: error.category, - ) + context "with one row" do + before do + errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation)] + errors.each do |error| + bulk_upload.bulk_upload_errors.create!( + field: error.attribute, + error: error.message, + tenant_code: "test", + property_ref: "test", + row: "test", + cell: "test", + col: "test", + category: error.category, + ) + end + end + + it "returns the correct unique answers to be cleared" do + expect(result.count).to eq(3) + expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62]) end end - it "returns the correct unique answers to be cleared" do - expect(result.count).to eq(3) - expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62]) + context "with multiple rows" do + before do + errors = [OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered, row: 1), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category, row: 1), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category, row: 1), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 1), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 1), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation, row: 1), + OpenStruct.new(attribute: "field_50", message: "you must answer field 50", category: :not_answered, row: 2), + OpenStruct.new(attribute: "field_60", message: "some compound error", category: :other_category, row: 2), + OpenStruct.new(attribute: "field_61", message: "some compound error", category: :other_category, row: 2), + OpenStruct.new(attribute: "field_61", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 2), + OpenStruct.new(attribute: "field_62", message: "some other compound error that overlaps with a previous error field", category: :another_category, row: 2), + OpenStruct.new(attribute: "field_63", message: "some soft validation error", category: :soft_validation, row: 2)] + errors.each do |error| + bulk_upload.bulk_upload_errors.create!( + field: error.attribute, + error: error.message, + tenant_code: "test", + property_ref: "test", + row: error.row, + cell: "test", + col: "test", + category: error.category, + ) + end + end + + it "returns the correct unique answers to be cleared" do + expect(result.count).to eq(6) + expect(result.map(&:field)).to match_array(%w[field_60 field_61 field_62 field_60 field_61 field_62]) + end end end end