diff --git a/app/services/bulk_upload/lettings/year2023/csv_parser.rb b/app/services/bulk_upload/lettings/year2023/csv_parser.rb index 27bf9949f..550ef1825 100644 --- a/app/services/bulk_upload/lettings/year2023/csv_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/csv_parser.rb @@ -10,7 +10,11 @@ class BulkUpload::Lettings::Year2023::CsvParser end def row_offset - with_headers? ? 7 : 0 + if with_headers? + rows.find_index { |row| row[0].match(/field number/i) } + 1 + else + 0 + end end def col_offset @@ -57,7 +61,7 @@ private end def with_headers? - rows[0][0]&.match?(/Question/) + rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) } end def row_sep diff --git a/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb index b7c92f6f4..a8cf227f4 100644 --- a/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb @@ -30,6 +30,30 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do end end + context "when parsing csv with headers with extra rows" do + before do + file.write("Section\n") + file.write("Question\n") + file.write("Additional info\n") + file.write("Values\n") + file.write("Can be empty?\n") + file.write("Type of letting the question applies to\n") + file.write("Duplicate check field?\n") + file.write(BulkUpload::LogToCsv.new(log:).default_2023_field_numbers_row) + file.write(BulkUpload::LogToCsv.new(log:).to_2023_csv_row) + file.rewind + end + + it "returns correct offsets" do + expect(service.row_offset).to eq(8) + expect(service.col_offset).to eq(1) + end + + it "parses csv correctly" do + expect(service.row_parsers[0].field_13).to eql(log.tenancycode) + end + end + context "when parsing csv with headers in arbitrary order" do let(:seed) { rand }