Browse Source

able to return column for given field

pull/1417/head
Phil Lee 3 years ago
parent
commit
829fc7a322
  1. 8
      app/services/bulk_upload/lettings/year2022/csv_parser.rb
  2. 6
      app/services/bulk_upload/lettings/year2023/csv_parser.rb
  3. 25
      spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb
  4. 56
      spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb

8
app/services/bulk_upload/lettings/year2022/csv_parser.rb

@ -39,8 +39,16 @@ class BulkUpload::Lettings::Year2022::CsvParser
@rows ||= CSV.parse(normalised_string, row_sep:)
end
def column_for_field(field)
cols[headers.find_index(field) + col_offset]
end
private
def headers
@headers ||= ("field_1".."field_134").to_a
end
def with_headers?
rows[0][0]&.match?(/\D+/)
end

6
app/services/bulk_upload/lettings/year2023/csv_parser.rb

@ -38,6 +38,10 @@ class BulkUpload::Lettings::Year2023::CsvParser
@rows ||= CSV.parse(normalised_string, row_sep:)
end
def column_for_field(field)
cols[field_numbers.find_index(field) + col_offset]
end
private
def default_field_numbers
@ -45,7 +49,7 @@ private
end
def field_numbers
if with_headers?
@field_numbers ||= if with_headers?
rows[row_offset - 1][col_offset..].map { |h| h.present? ? "field_#{h}" : "field_blank" }
else
default_field_numbers

25
spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb

@ -69,4 +69,29 @@ RSpec.describe BulkUpload::Lettings::Year2022::CsvParser do
expect(service.row_parsers[0].field_12.to_i).to eql(log.age1)
end
end
describe "#column_for_field", aggregate_failures: true do
context "when headers present" do
it "returns correct column" do
expect(service.column_for_field("field_1")).to eql("B")
expect(service.column_for_field("field_134")).to eql("EE")
end
end
context "when no headers" do
let(:file) { Tempfile.new }
let(:path) { file.path }
let(:log) { build(:lettings_log, :completed) }
before do
file.write(BulkUpload::LogToCsv.new(log:, col_offset: 0).to_2022_csv_row)
file.rewind
end
it "returns correct column" do
expect(service.column_for_field("field_1")).to eql("A")
expect(service.column_for_field("field_134")).to eql("ED")
end
end
end
end

56
spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb

@ -98,4 +98,60 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do
expect(service.row_parsers[0].field_13).to eql(log.tenancycode)
end
end
describe "#column_for_field", aggregate_failures: true do
context "when with headers using default ordering" do
before do
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 column" do
expect(service.column_for_field("field_5")).to eql("B")
expect(service.column_for_field("field_22")).to eql("EL")
end
end
context "when without headers using default ordering" do
before do
file.write(BulkUpload::LogToCsv.new(log:, col_offset: 0).to_2023_csv_row)
file.rewind
end
it "returns correct column" do
expect(service.column_for_field("field_5")).to eql("A")
expect(service.column_for_field("field_22")).to eql("EK")
end
end
context "when with headers using custom ordering" do
let(:seed) { 123 }
before do
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(seed:))
file.write(BulkUpload::LogToCsv.new(log:).to_2023_csv_row(seed:))
file.rewind
end
it "returns correct column" do
expect(service.column_for_field("field_5")).to eql("N")
expect(service.column_for_field("field_22")).to eql("O")
expect(service.column_for_field("field_26")).to eql("B")
expect(service.column_for_field("field_25")).to eql("EF")
end
end
end
end

Loading…
Cancel
Save