diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index aba32fd0e..e78c1138b 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/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! diff --git a/app/services/bulk_upload/lettings/year2022/csv_parser.rb b/app/services/bulk_upload/lettings/year2022/csv_parser.rb index 5671280cf..3e6aaa640 100644 --- a/app/services/bulk_upload/lettings/year2022/csv_parser.rb +++ b/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 diff --git a/app/services/bulk_upload/lettings/year2023/csv_parser.rb b/app/services/bulk_upload/lettings/year2023/csv_parser.rb index b46270607..cc351d603 100644 --- a/app/services/bulk_upload/lettings/year2023/csv_parser.rb +++ b/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 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 1815580ba..fc82faa8d 100644 --- a/spec/services/bulk_upload/lettings/year2023/csv_parser_spec.rb +++ b/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