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
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
def validate_max_columns_count_if_no_headers
return if halt_validations? || csv_parser.with_headers?
max_columns_count = body_rows.map(&:size).max - col_offset
return if halt_validations?
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
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]
end
def valid_field_numbers_count
field_numbers.count { |f| f != "field_blank" }
def incorrect_field_count?
valid_field_numbers_count = field_numbers.count { |f| f != "field_blank" }
valid_field_numbers_count != FIELDS
end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
def too_many_columns?
return if with_headers?
max_columns_count = body_rows.map(&:size).max - col_offset
max_columns_count > MAX_COLUMNS
end
private
@ -69,6 +75,10 @@ private
end
end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
end
def row_sep
"\n"
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]
end
def valid_field_numbers_count
field_numbers.count { |f| f != "field_blank" }
def incorrect_field_count?
valid_field_numbers_count = field_numbers.count { |f| f != "field_blank" }
valid_field_numbers_count != FIELDS
end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
def too_many_columns?
return if with_headers?
max_columns_count = body_rows.map(&:size).max - col_offset
max_columns_count > MAX_COLUMNS
end
private
@ -69,6 +75,10 @@ private
end
end
def with_headers?
rows.map { |r| r[0] }.any? { |cell| cell&.match?(/field number/i) }
end
def row_sep
"\n"
end

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

@ -102,7 +102,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::CsvParser do
end
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

Loading…
Cancel
Save