diff --git a/sage_validation/file_validator/forms.py b/sage_validation/file_validator/forms.py index 990b83ce708a694f1099d3688b0caf7abc67a771..040aaf6eb0624373696d0eb8544c59dd07f5d9b2 100644 --- a/sage_validation/file_validator/forms.py +++ b/sage_validation/file_validator/forms.py @@ -245,6 +245,8 @@ class CSVUploadForm(forms.Form): nominal_account_name = row.get(nominal_account_field) if not cc or not dep or not nominal_account_name: + errors.append(f"Row {index}: Missing values in '{cc_field}', '{dep_field}', or " + f"'{nominal_account_field}'.") continue cc_type = cost_centre_map.get(cc) diff --git a/test/test_file_validator/test_forms.py b/test/test_file_validator/test_forms.py index d32963027934d3464746ed22734d87b7d737739a..0360f71f7edfc4d83e7c969b0281fc485b0ed089 100644 --- a/test/test_file_validator/test_forms.py +++ b/test/test_file_validator/test_forms.py @@ -93,6 +93,24 @@ def test_validate_nc_cc_dep_combination_against_meo_sage_account( in str(form.errors["file"][0])) +def test_validate_nc_cc_dep_combination_against_meo_sage_account_blank_values( + sample_input_file: SimpleUploadedFile, mock_meo_database: MagicMock +) -> None: + """Test validation for nominal analysis fields against MEO valid Sage accounts.""" + modified_file = create_modified_csv( + sample_input_file, + { + "NominalAnalysisNominalCostCentre/1": "", + }) + + form = CSVUploadForm(files={"file": modified_file}) + assert not form.is_valid() + assert ( + "Row 1: Missing values in 'NominalAnalysisNominalCostCentre/1', 'NominalAnalysisNominalDepartment/1'," + " or 'NominalAnalysisNominalAccountNumber/1'." + in str(form.errors["file"][0]) + ) + def test_cheque_fields_must_be_empty(sample_input_file: SimpleUploadedFile, mock_meo_database: MagicMock) -> None: """Test that cheque fields must be empty.""" modified_file = create_modified_csv(sample_input_file,