Browse Source

refactor: check fields/columns count within csv parser, not validator

pull/1588/head
Sam Seed 3 years ago
parent
commit
0e2c282d45
  1. 8
      app/services/bulk_upload/lettings/validator.rb
  2. 18
      app/services/bulk_upload/lettings/year2022/csv_parser.rb
  3. 18
      app/services/bulk_upload/lettings/year2023/csv_parser.rb
  4. 2
      spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb

8
app/services/bulk_upload/lettings/validator.rb

@ -132,15 +132,13 @@ private
def validate_field_numbers_count def validate_field_numbers_count
return if halt_validations? return if halt_validations?
errors.add(:base, :wrong_field_numbers_count) if csv_parser.valid_field_numbers_count != csv_parser.class::FIELDS errors.add(:base, :wrong_field_numbers_count) if csv_parser.incorrect_field_count?
end end
def validate_max_columns_count_if_no_headers def validate_max_columns_count_if_no_headers
return if halt_validations? || csv_parser.with_headers? return if halt_validations?
max_columns_count = body_rows.map(&:size).max - col_offset
errors.add(:base, :over_max_column_count) if max_columns_count > csv_parser.class::MAX_COLUMNS errors.add(:base, :over_max_column_count) if csv_parser.too_many_columns?
end end
def halt_validations! def halt_validations!

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

@ -47,12 +47,18 @@ class BulkUpload::Lettings::Year2022::CsvParser
cols[field_numbers.find_index(field) + col_offset] cols[field_numbers.find_index(field) + col_offset]
end end
def valid_field_numbers_count def incorrect_field_count?
field_numbers.count { |f| f != "field_blank" } valid_field_numbers_count = field_numbers.count { |f| f != "field_blank" }
valid_field_numbers_count != FIELDS
end end
def with_headers? def too_many_columns?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) } return if with_headers?
max_columns_count = body_rows.map(&:size).max - col_offset
max_columns_count > MAX_COLUMNS
end end
private private
@ -69,6 +75,10 @@ private
end end
end end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
end
def row_sep def row_sep
"\n" "\n"
end end

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

@ -47,12 +47,18 @@ class BulkUpload::Lettings::Year2023::CsvParser
cols[field_numbers.find_index(field) + col_offset] cols[field_numbers.find_index(field) + col_offset]
end end
def valid_field_numbers_count def incorrect_field_count?
field_numbers.count { |f| f != "field_blank" } valid_field_numbers_count = field_numbers.count { |f| f != "field_blank" }
valid_field_numbers_count != FIELDS
end end
def with_headers? def too_many_columns?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) } return if with_headers?
max_columns_count = body_rows.map(&:size).max - col_offset
max_columns_count > MAX_COLUMNS
end end
private private
@ -69,6 +75,10 @@ private
end end
end end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
end
def row_sep def row_sep
"\n" "\n"
end end

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

@ -102,7 +102,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do
end end
it "counts the number of valid field numbers correctly" do it "counts the number of valid field numbers correctly" do
expect(service.valid_field_numbers_count).to be(134) expect(service.incorrect_field_count?).to be false
end end
end end

Loading…
Cancel
Save