|
6 | 6 | from common.validator.validator import Validator |
7 | 7 |
|
8 | 8 | CSV_HEADER = ( |
9 | | - "academic_year,time_period,time_identifier,geographic_level," |
10 | | - "country_code,country_name,region_code,region_name,new_la_code,la_name," |
11 | | - "old_la_code,school_type,num_schools,enrolments,present_sessions,overall_attendance," |
12 | | - "approved_educational_activity,overall_absence,authorised_absence,unauthorised_absence," |
13 | | - "late_sessions,possible_sessions,reason_present_am,reason_present_pm,reason_present," |
14 | | - "reason_l_present_late_before_registers_closed" |
| 9 | + "NHS_NUMBER,PERSON_FORENAME,PERSON_SURNAME,SITE_CODE," |
| 10 | + "PERFORMING_PROFESSIONAL_FORENAME,PERFORMING_PROFESSIONAL_SURNAME,PRIMARY_SOURCE," |
| 11 | + "VACCINATION_PROCEDURE_CODE,VACCINATION_PROCEDURE_TERM,DOSE_SEQUENCE," |
| 12 | + "VACCINE_PRODUCT_CODE,VACCINE_PRODUCT_TERM,VACCINE_MANUFACTURER,BATCH_NUMBER" |
15 | 13 | ) |
16 | 14 |
|
17 | 15 | schema_data_folder = Path(__file__).parent / "schemas" |
18 | | -schemaFilePath = schema_data_folder / "test_school_schema.json" |
| 16 | +schemaFilePath = schema_data_folder / "test_schema.json" |
19 | 17 |
|
20 | 18 |
|
21 | 19 | class TestValidator(unittest.TestCase): |
| 20 | + @staticmethod |
| 21 | + def build_row(header: str, values: dict) -> str: |
| 22 | + cols = header.split(",") |
| 23 | + return ",".join(str(values.get(col, "")) for col in cols) |
| 24 | + |
22 | 25 | def setUp(self): |
23 | 26 | with open(schemaFilePath) as JSON: |
24 | 27 | SchemaFile = json.load(JSON) |
25 | 28 | self.validator = Validator(SchemaFile) |
26 | 29 |
|
27 | 30 | def test_run_validation_csv_row_success(self): |
28 | | - good_row = ( |
29 | | - "202223,202223,Spring term,Local authority,E92000001,England,E12000004," |
30 | | - "East Midlands,E06000016,Leicester,856,Primary,66,23057,2367094," |
31 | | - "2380687,13593,166808,99826,66982,34090,2547495,1157575,1180365,2337940,29154" |
32 | | - ) |
| 31 | + values = { |
| 32 | + "NHS_NUMBER": "9000000009", |
| 33 | + "PERSON_FORENAME": "JOHN", |
| 34 | + "PERSON_SURNAME": "DOE", |
| 35 | + "SITE_CODE": "RJ1", |
| 36 | + "PERFORMING_PROFESSIONAL_FORENAME": "ALICE", |
| 37 | + "PERFORMING_PROFESSIONAL_SURNAME": "SMITH", |
| 38 | + "PRIMARY_SOURCE": "true", |
| 39 | + "VACCINATION_PROCEDURE_CODE": "PROC123", |
| 40 | + "VACCINATION_PROCEDURE_TERM": "Procedure Term", |
| 41 | + "DOSE_SEQUENCE": 1, |
| 42 | + "VACCINE_PRODUCT_CODE": "VACC123", |
| 43 | + "VACCINE_PRODUCT_TERM": "Vaccine Term", |
| 44 | + "VACCINE_MANUFACTURER": "Manufacturer XYZ", |
| 45 | + "BATCH_NUMBER": "BATCH001", |
| 46 | + } |
| 47 | + good_row = self.build_row(CSV_HEADER, values) |
33 | 48 | error_report = self.validator.validate_csv_row(good_row, CSV_HEADER, True, True, True) |
34 | | - self.assertTrue(error_report == []) |
| 49 | + self.assertEqual(error_report, []) |
35 | 50 |
|
36 | 51 | def test_run_validation_csv_row_failure(self): |
37 | | - # empty time_period |
38 | | - bad_row = ( |
39 | | - "202223,,Spring term,Local authority,E92000001,England,E12000004," |
40 | | - "East Midlands,E06000016,Leicester,856,Primary,66,23057,2367094," |
41 | | - "2380687,13593,166808,99826,66982,34090,2547495,1157575,1180365,2337940,29154" |
42 | | - ) |
| 52 | + # With fieldNameFlat used for CSV, empty NHS_NUMBER should fail the NOTEMPTY check |
| 53 | + values = { |
| 54 | + "NHS_NUMBER": "", |
| 55 | + "PERSON_FORENAME": "JOHN", |
| 56 | + "PERSON_SURNAME": "DOE", |
| 57 | + "SITE_CODE": "RJ1", |
| 58 | + "PERFORMING_PROFESSIONAL_FORENAME": "ALICE", |
| 59 | + "PERFORMING_PROFESSIONAL_SURNAME": "SMITH", |
| 60 | + "PRIMARY_SOURCE": "true", |
| 61 | + "VACCINATION_PROCEDURE_CODE": "PROC123", |
| 62 | + "VACCINATION_PROCEDURE_TERM": "Procedure Term", |
| 63 | + "DOSE_SEQUENCE": 1, |
| 64 | + "VACCINE_PRODUCT_CODE": "VACC123", |
| 65 | + "VACCINE_PRODUCT_TERM": "Vaccine Term", |
| 66 | + "VACCINE_MANUFACTURER": "Manufacturer XYZ", |
| 67 | + "BATCH_NUMBER": "BATCH001", |
| 68 | + } |
| 69 | + bad_row = self.build_row(CSV_HEADER, values) |
43 | 70 | error_report = self.validator.validate_csv_row(bad_row, CSV_HEADER, True, True, True) |
44 | 71 | self.assertTrue(len(error_report) > 0) |
45 | | - error = error_report[0] |
46 | | - self.assertEqual(error.id, "check2") |
47 | | - self.assertEqual(error.message, "Value not empty failure") |
48 | | - self.assertEqual(error.name, "Time Period Not Empty Check") |
49 | | - self.assertEqual(error.details, "Value is empty, not as expected") |
| 72 | + # Assert the NHS Number NOTEMPTY error is present |
| 73 | + messages = [(e.name, e.message, e.details) for e in error_report] |
| 74 | + self.assertIn( |
| 75 | + ("NHS Number Not Empty Check", "Value not empty failure", "Value is empty, not as expected"), messages |
| 76 | + ) |
0 commit comments