require "rails_helper" RSpec.describe LogsHelper, type: :helper do describe "#unique_answers_to_be_cleared" do let(:result) { unique_answers_to_be_cleared(bulk_upload) } context "with a lettings bulk upload with various errors" do let(:bulk_upload) { create(:bulk_upload, :lettings) } 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 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) } 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 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 end