77
88from jsonpath_ng .ext import parse
99
10+ from models .constants import Constants
1011from models .fhir_immunization import ImmunizationValidator
1112from models .fhir_immunization_pre_validators import PreValidators
1213from models .utils .generic_utils import (
@@ -487,18 +488,55 @@ def test_pre_validate_patient_name(self):
487488 valid_list_element = [{"family" : "Test" , "given" : ["TestA" ]}],
488489 )
489490
490- def test_pre_validate_patient_name_given (self ):
491- """Test pre_validate_patient_name_given accepts valid values and rejects invalid values"""
492- valid_json_data = deepcopy (self .json_data )
493- # invalid_json
491+ def test_pre_validate_patient_name_given_rejects_invalid_input (self ):
492+ """Test pre_validate_patient_name_given rejects invalid values"""
493+ given_name_field_loc = patient_name_given_field_location (self .json_data )
494+
495+ test_cases = [
496+ ([None ], "contained[?(@.resourceType=='Patient')].name[0].given[0] must be a string" ),
497+ ([], "contained[?(@.resourceType=='Patient')].name[0].given must be a non-empty array" ),
498+ (["" ], "contained[?(@.resourceType=='Patient')].name[0].given[0] must be a non-empty string" ),
499+ ([" \n " ], "contained[?(@.resourceType=='Patient')].name[0].given[0] must be a non-empty string" ),
500+ (["Test" , " " ], "contained[?(@.resourceType=='Patient')].name[0].given[1] must be a non-empty string" ),
501+ (
502+ ["Too" , "many" , "items" , "1" , "2" , "5" ],
503+ "contained[?(@.resourceType=='Patient')].name[0].given must be an array of maximum length 5" ,
504+ ),
505+ (
506+ ["Stringtoolongeruti olgkriahfyrtoiuhg" ],
507+ "contained[?(@.resourceType=='Patient')].name[0].given[0] must be 35 or fewer characters" ,
508+ ),
509+ ]
494510
495- ValidatorModelTests .test_list_value (
496- self ,
497- field_location = patient_name_given_field_location (valid_json_data ),
498- valid_lists_to_test = [["Test" ], ["Test test" ]],
499- valid_list_element = "Test" ,
500- is_list_of_strings = True ,
501- )
511+ for invalid_data , expected_error in test_cases :
512+ with self .subTest ():
513+ invalid_json_data = deepcopy (self .json_data )
514+ parse (given_name_field_loc ).update (invalid_json_data , invalid_data )
515+
516+ with self .assertRaises (Exception ) as error :
517+ PreValidators (invalid_json_data ).pre_validate_patient_name_given (values = invalid_json_data )
518+
519+ self .assertEqual (str (error .exception ), expected_error )
520+ self .assertIsInstance (error .exception , (ValueError , TypeError ))
521+
522+ def test_pre_validate_patient_name_given_accepts_valid_input (self ):
523+ """Test pre_validate_patient_name_given accepts valid values"""
524+ given_name_field_loc = patient_name_given_field_location (self .json_data )
525+
526+ test_cases = [
527+ ["Test" ],
528+ ["Multiple test" , "values" ],
529+ ["One" , "Two" , "Three" , "Four" , "Five" ],
530+ [" Can have spaces " ],
531+ ["Exactlythirtyfivecharactersuiopasdf" ],
532+ ]
533+
534+ for valid_input in test_cases :
535+ with self .subTest ():
536+ valid_json_data = deepcopy (self .json_data )
537+ parse (given_name_field_loc ).update (valid_json_data , valid_input )
538+
539+ PreValidators (valid_json_data ).pre_validate_patient_name_given (values = valid_json_data )
502540
503541 def test_pre_validate_patient_name_family (self ):
504542 """Test pre_validate_patient_name_family accepts valid values and rejects invalid values"""
@@ -507,7 +545,7 @@ def test_pre_validate_patient_name_family(self):
507545 self ,
508546 field_location = patient_name_family_field_location (valid_json_data ),
509547 valid_strings_to_test = ["test" , "Quitelongsurname" , "Surnamewithjustthirtyfivecharacters" ],
510- max_length = PreValidators . PERSON_SURNAME_MAX_LENGTH ,
548+ max_length = Constants . PERSON_NAME_ELEMENT_MAX_LENGTH ,
511549 invalid_length_strings_to_test = ["Surnamethathasgotthirtysixcharacters" ],
512550 )
513551
@@ -666,16 +704,50 @@ def test_pre_validate_practitioner_name(self):
666704 valid_list_element = {"family" : "Test" },
667705 )
668706
669- def test_pre_validate_practitioner_name_given (self ):
670- """Test pre_validate_practitioner_name_given accepts valid values and rejects invalid values"""
671- valid_json_data = deepcopy (self .json_data )
672- ValidatorModelTests .test_list_value (
673- self ,
674- field_location = practitioner_name_given_field_location (valid_json_data ),
675- valid_lists_to_test = [["Test" ], ["Test test" ]],
676- valid_list_element = "Test" ,
677- is_list_of_strings = True ,
678- )
707+ def test_pre_validate_practitioner_name_given_rejects_invalid_data (self ):
708+ """Test pre_validate_practitioner_name_given rejects invalid values"""
709+ practitioner_name_field_loc = practitioner_name_given_field_location (self .json_data )
710+
711+ test_cases = [
712+ ([None ], "contained[?(@.resourceType=='Practitioner')].name[0].given[0] must be a string" ),
713+ ([123 , 456 ], "contained[?(@.resourceType=='Practitioner')].name[0].given[0] must be a string" ),
714+ ([], "contained[?(@.resourceType=='Practitioner')].name[0].given must be a non-empty array" ),
715+ (["" ], "contained[?(@.resourceType=='Practitioner')].name[0].given[0] must be a non-empty string" ),
716+ ([" \n " ], "contained[?(@.resourceType=='Practitioner')].name[0].given[0] must be a non-empty string" ),
717+ (
718+ ["Test" , " " ],
719+ "contained[?(@.resourceType=='Practitioner')].name[0].given[1] must be a non-empty string" ,
720+ ),
721+ ]
722+
723+ for invalid_data , expected_error in test_cases :
724+ with self .subTest ():
725+ invalid_json_data = deepcopy (self .json_data )
726+ parse (practitioner_name_field_loc ).update (invalid_json_data , invalid_data )
727+
728+ with self .assertRaises (Exception ) as error :
729+ PreValidators (invalid_json_data ).pre_validate_practitioner_name_given (values = invalid_json_data )
730+
731+ self .assertEqual (str (error .exception ), expected_error )
732+ self .assertIsInstance (error .exception , (ValueError , TypeError ))
733+
734+ def test_pre_validate_practitioner_name_given_accepts_valid_input (self ):
735+ """Test pre_validate_practitioner_name_given accepts valid values"""
736+ practitioner_name_field_loc = practitioner_name_given_field_location (self .json_data )
737+
738+ test_cases = [
739+ ["Test" ],
740+ ["Multiple test" , "values" ],
741+ ["One" , "Two" , "Three" , "Four" , "Five" , "Very many not restricted by length" ],
742+ [" Can have spaces " ],
743+ ]
744+
745+ for valid_input in test_cases :
746+ with self .subTest ():
747+ valid_json_data = deepcopy (self .json_data )
748+ parse (practitioner_name_field_loc ).update (valid_json_data , valid_input )
749+
750+ PreValidators (valid_json_data ).pre_validate_practitioner_name_given (values = valid_json_data )
679751
680752 def test_pre_validate_practitioner_name_family (self ):
681753 """Test pre_validate_practitioner_name_family accepts valid values and rejects invalid values"""
0 commit comments