From f964aaf0b41afb0ece32be5173084351b31bfeb6 Mon Sep 17 00:00:00 2001 From: Sam Seed Date: Wed, 5 Apr 2023 17:34:58 +0100 Subject: [PATCH] feat: add validation for number of field labels --- app/services/bulk_upload/lettings/validator.rb | 7 +++++++ app/services/bulk_upload/lettings/year2023/csv_parser.rb | 5 +++++ config/locales/en.yml | 1 + 3 files changed, 13 insertions(+) diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index 1a0e6ecf5..c85ea3939 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/app/services/bulk_upload/lettings/validator.rb @@ -9,6 +9,7 @@ class BulkUpload::Lettings::Validator attr_reader :bulk_upload, :path validate :validate_file_not_empty + validate :validate_fields_count validate :validate_min_columns validate :validate_max_columns @@ -145,6 +146,12 @@ private errors.add(:base, :over_max_column_count) if column_count > csv_parser.class::MAX_COLUMNS end + def validate_fields_count + return if halt_validations? + + errors.add(:base, :wrong_field_count) if csv_parser.non_blank_fields_count != csv_parser.class::FIELDS + end + def halt_validations! @halt_validations = true end diff --git a/app/services/bulk_upload/lettings/year2023/csv_parser.rb b/app/services/bulk_upload/lettings/year2023/csv_parser.rb index 6f661922c..6c44d047c 100644 --- a/app/services/bulk_upload/lettings/year2023/csv_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/csv_parser.rb @@ -3,6 +3,7 @@ require "csv" class BulkUpload::Lettings::Year2023::CsvParser MIN_COLUMNS = 141 MAX_COLUMNS = 143 + FIELDS = 134 attr_reader :path @@ -47,6 +48,10 @@ class BulkUpload::Lettings::Year2023::CsvParser cols[field_numbers.find_index(field) + col_offset] end + def non_blank_fields_count + field_numbers.count { |f| f != "field_blank" } + end + private def default_field_numbers diff --git a/config/locales/en.yml b/config/locales/en.yml index 12738ad93..7fad1229a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -46,6 +46,7 @@ en: base: over_max_column_count: "too many columns, please ensure you have used the correct template" under_min_column_count: "too few columns, please ensure you have used the correct template" + wrong_field_count: "incorrect number of fields, please ensure you have used the correct template" forms/bulk_upload_lettings/year: attributes: year: