Closed jorisvandenbossche closed 1 year ago
cc @m-mohr do you think this is a sensible approach to test the json schema? (ensure it passes when it should and errors when it should) Feedback would be very welcome (I never did this before)
I'll have a look in the next days :-)
OK, I updated this PR for the latest changes in the spec and updated to use pytest. This should be ready for review.
Looks reasonable to me. Why commit the test files when you can always generate them on the fly though? May lead to PRs where people update them by hand...
I'd like to propose some additional checks:
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["invalid_column_object"] = {"foo": "bar"}
invalid_cases["invalid_column_object"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = [0,0,0]
invalid_cases["3_element_bbox"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = [0,0,0,0]
valid_cases["4_element_bbox"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = ["0","0","0","0"]
invalid_cases["bbox_invalid_type"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = [0,0,0,0,0]
invalid_cases["5_element_bbox"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = [0.0,0.0,0.0,0.0,0.0,0.0]
valid_cases["6_element_bbox"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["bbox"] = [0,0,0,0,0,0,0]
invalid_cases["7_element_bbox"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"][""] = metadata["columns"]["geometry"]
invalid_cases["empty_column_name"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["primary_geometry"] = ""
invalid_cases["empty_primary_geometry"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["geometry_types"] = ["Point", "Point"]
invalid_cases["geometry_type_uniqueness"] = metadata
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["geometry"]["geometry_types"] = ["PointZ"]
invalid_cases["geometry_type_missing_space"] = metadata
~Some of these may fail with the existing JSON Schema and may need to be added in #131, where we can fix this. I could also add them all in #131.~ Now that #131 was merged, you should be able to just add them here.
@m-mohr thanks for those additional cases! This one I don't fully understand what it is testing for:
metadata = copy.deepcopy(metadata_template)
metadata["columns"]["primary_geometry"] = ""
invalid_cases["empty_primary_geometry"] = metadata
@jorisvandenbossche In #153 we require a minimum length of 1 for the primary geometry and I'm trying to check whether the schema fails for an empty primary geometry.
But I just now realize that it's wrong and should be:
metadata = copy.deepcopy(metadata_template)
metadata["primary_geometry"] = ""
invalid_cases["empty_primary_geometry"] = metadata
OK, that one is already included!
Would there be support for moving the test_json_schema.py
script to the scripts
directory? It feels like that directory has the most complete story around managing python dependencies.
I wouldn't mind that, certainly now it is only a single file (I am also already making use of the python dependencies that are installed for the scripts to run the tests in CI)
I moved this script in #159 and updated it to read the version constant from the schema file. So the tests now assert that metadata without a version or with a version that is different than the schema version is invalid.
Closes https://github.com/opengeospatial/geoparquet/issues/135 (rework of https://github.com/opengeospatial/geoparquet/pull/134 to focus on json schema for now)