99VALID_DATACITE43_DIR = "../tests/data/datacite43/"
1010INVALID_DATACITE43_DIR = "../tests/data/invalid_datacite43/"
1111
12+
1213# Function to get all JSON files in the directory
1314def get_all_json_files (directory ):
14- return [os .path .join (directory , f ) for f in os .listdir (directory ) if f .endswith ('.json' )]
15+ return [
16+ os .path .join (directory , f ) for f in os .listdir (directory ) if f .endswith (".json" )
17+ ]
18+
1519
1620# Get list of all valid JSON files in the directory
1721VALID_DATACITE43_FILES = get_all_json_files (VALID_DATACITE43_DIR )
1822INVALID_DATACITE43_FILES = get_all_json_files (INVALID_DATACITE43_DIR )
1923
24+
2025@pytest .mark .parametrize ("valid_file" , VALID_DATACITE43_FILES )
2126def test_valid_json (valid_file ):
2227 """Test that valid example files validate successfully."""
@@ -27,12 +32,13 @@ def test_valid_json(valid_file):
2732 validation_errors = validator43 (json_data )
2833 except ValueError as e :
2934 pytest .fail (f"Validation failed for: { valid_file } \n Errors: { str (e )} " )
30-
35+
3136 if validation_errors :
3237 pytest .fail (f"Validation failed for: { valid_file } \n Errors: { validation_errors } " )
3338 else :
3439 print (f"Validation passed for: { valid_file } " )
3540
41+
3642@pytest .mark .parametrize ("invalid_file" , INVALID_DATACITE43_FILES )
3743def test_invalid_json (invalid_file ):
3844 """Test that invalid example files do not validate successfully."""
@@ -44,48 +50,70 @@ def test_invalid_json(invalid_file):
4450 except ValueError :
4551 print (f"Validation failed as expected for: { invalid_file } " )
4652 return # Test passes if validation raises a ValueError
47-
53+
4854 if validation_errors :
4955 print (f"Validation failed as expected for: { invalid_file } " )
5056 else :
5157 pytest .fail (f"Validation passed unexpectedly for: { invalid_file } " )
5258
53- @pytest .mark .parametrize ("missing_field_file" , [
54- {"file" : "../tests/data/missing_creators.json" , "missing_field" : "creators" },
55- {"file" : "../tests/data/missing_titles.json" , "missing_field" : "titles" },
56- ])
59+
60+ @pytest .mark .parametrize (
61+ "missing_field_file" ,
62+ [
63+ {"file" : "../tests/data/missing_creators.json" , "missing_field" : "creators" },
64+ {"file" : "../tests/data/missing_titles.json" , "missing_field" : "titles" },
65+ ],
66+ )
5767def test_missing_required_fields (missing_field_file ):
5868 """Test that JSON files missing required fields fail validation."""
59- print (f"\n Testing missing field: { missing_field_file ['missing_field' ]} in file: { missing_field_file ['file' ]} " )
60- json_data = load_json_path (missing_field_file ['file' ])
61- with pytest .raises (ValueError , match = f"Missing required metadata field: { missing_field_file ['missing_field' ]} " ):
69+ print (
70+ f"\n Testing missing field: { missing_field_file ['missing_field' ]} in file: { missing_field_file ['file' ]} "
71+ )
72+ json_data = load_json_path (missing_field_file ["file" ])
73+ with pytest .raises (
74+ ValueError ,
75+ match = f"Missing required metadata field: { missing_field_file ['missing_field' ]} " ,
76+ ):
6277 validator43 (json_data )
6378
64- @pytest .mark .parametrize ("type_error_file" , [
65- {"file" : "../tests/data/type_error_creators.json" , "field" : "creators" },
66- {"file" : "../tests/data/type_error_dates.json" , "field" : "dates" },
67- ])
79+
80+ @pytest .mark .parametrize (
81+ "type_error_file" ,
82+ [
83+ {"file" : "../tests/data/type_error_creators.json" , "field" : "creators" },
84+ {"file" : "../tests/data/type_error_dates.json" , "field" : "dates" },
85+ ],
86+ )
6887def test_incorrect_field_types (type_error_file ):
6988 """Test that JSON files with incorrect field types fail validation."""
70- print (f"\n Testing incorrect type in field: { type_error_file ['field' ]} for file: { type_error_file ['file' ]} " )
71- json_data = load_json_path (type_error_file ['file' ])
72- with pytest .raises (ValueError , match = f"Incorrect type for field: { type_error_file ['field' ]} " ):
89+ print (
90+ f"\n Testing incorrect type in field: { type_error_file ['field' ]} for file: { type_error_file ['file' ]} "
91+ )
92+ json_data = load_json_path (type_error_file ["file" ])
93+ with pytest .raises (
94+ ValueError , match = f"Incorrect type for field: { type_error_file ['field' ]} "
95+ ):
7396 validator43 (json_data )
7497
98+
7599def test_multiple_errors ():
76100 """Test JSON file with multiple issues to check all errors are raised."""
77101 json_data = load_json_path ("../tests/data/multiple_errors.json" )
78102 with pytest .raises (ValueError , match = "Multiple validation errors" ):
79103 validator43 (json_data )
80104
105+
81106def test_error_logging (caplog ):
82107 """Test that errors are logged correctly during validation."""
83- json_data = load_json_path ("../tests/data/invalid_datacite43/some_invalid_file.json" )
108+ json_data = load_json_path (
109+ "../tests/data/invalid_datacite43/some_invalid_file.json"
110+ )
84111 with caplog .at_level (logging .ERROR ):
85112 with pytest .raises (ValueError ):
86113 validator43 (json_data )
87114 assert "Validation failed" in caplog .text
88115
116+
89117if __name__ == "__main__" :
90118 # Manual test runner for valid files
91119 failed_valid_files = []
@@ -96,14 +124,14 @@ def test_error_logging(caplog):
96124 except AssertionError as e :
97125 failed_valid_files .append (file )
98126 print (f"Error occurred in valid file: { file } \n Error details: { e } " )
99-
127+
100128 if not failed_valid_files :
101129 print ("\n ✅ All valid files passed validation. Test complete." )
102130 else :
103131 print ("\n ❌ The following valid files failed validation:" )
104132 for failed_file in failed_valid_files :
105133 print (f"- { failed_file } " )
106-
134+
107135 # Manual test runner for invalid files
108136 passed_invalid_files = []
109137 print ("\n Running validation for invalid files..." )
@@ -113,9 +141,11 @@ def test_error_logging(caplog):
113141 except AssertionError as e :
114142 passed_invalid_files .append (file )
115143 print (f"Error occurred in invalid file: { file } \n Error details: { e } " )
116-
144+
117145 if not passed_invalid_files :
118- print ("\n ✅ All invalid files failed validation as expected. Test is a success." )
146+ print (
147+ "\n ✅ All invalid files failed validation as expected. Test is a success."
148+ )
119149 else :
120150 print ("\n ❌ The following invalid files unexpectedly passed validation:" )
121151 for passed_file in passed_invalid_files :
0 commit comments