Browse Source

handle arbitrary number of header rows

pull/1417/head
Phil Lee 3 years ago
parent
commit
e50c17a986
  1. 8
      app/services/bulk_upload/lettings/year2023/csv_parser.rb
  2. 24
      spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb

8
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

24
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 }

Loading…
Cancel
Save