diff --git a/app/services/bulk_upload/sales/validator.rb b/app/services/bulk_upload/sales/validator.rb index 91fa50096..32e9f7533 100644 --- a/app/services/bulk_upload/sales/validator.rb +++ b/app/services/bulk_upload/sales/validator.rb @@ -5,6 +5,7 @@ class BulkUpload::Sales::Validator attr_reader :bulk_upload, :path validate :validate_file_not_empty + validate :validate_field_numbers_count validate :validate_max_columns validate :validate_missing_required_headers validate :validate_correct_template @@ -166,6 +167,14 @@ private if csv_parser.missing_required_headers? errors.add :base, I18n.t("activemodel.errors.models.bulk_upload/sales/validator.attributes.base.no_headers", guidance_link: bulk_upload_sales_log_url(id: "guidance", form: { year: bulk_upload.year }, host: ENV["APP_HOST"], anchor: "using-the-bulk-upload-template")) + end + end + + def validate_field_numbers_count + return if halt_validations? + + unless csv_parser.correct_field_count? + errors.add(:base, :wrong_field_numbers_count) halt_validations! end end diff --git a/app/services/bulk_upload/sales/year2023/csv_parser.rb b/app/services/bulk_upload/sales/year2023/csv_parser.rb index 42b0764d9..036198981 100644 --- a/app/services/bulk_upload/sales/year2023/csv_parser.rb +++ b/app/services/bulk_upload/sales/year2023/csv_parser.rb @@ -59,6 +59,10 @@ class BulkUpload::Sales::Year2023::CsvParser false end + def correct_field_count? + true + end + private def default_field_numbers diff --git a/app/services/bulk_upload/sales/year2024/csv_parser.rb b/app/services/bulk_upload/sales/year2024/csv_parser.rb index e53f0ec28..2dc9d38a1 100644 --- a/app/services/bulk_upload/sales/year2024/csv_parser.rb +++ b/app/services/bulk_upload/sales/year2024/csv_parser.rb @@ -3,6 +3,7 @@ require "csv" class BulkUpload::Sales::Year2024::CsvParser include CollectionTimeHelper + FIELDS = 131 MAX_COLUMNS = 142 FORM_YEAR = 2024 @@ -59,6 +60,12 @@ class BulkUpload::Sales::Year2024::CsvParser !with_headers? end + def correct_field_count? + valid_field_numbers_count = field_numbers.count { |f| f != "field_blank" } + + valid_field_numbers_count == FIELDS + end + private def default_field_numbers diff --git a/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb index e4391212a..ef90bd834 100644 --- a/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/csv_parser_spec.rb @@ -28,6 +28,10 @@ RSpec.describe BulkUpload::Sales::Year2024::CsvParser do it "parses csv correctly" do expect(service.row_parsers[0].field_22).to eql(log.uprn) end + + it "counts the number of valid field numbers correctly" do + expect(service).to be_correct_field_count + end end context "when parsing csv with headers in arbitrary order" do