From ba120ca4222a9e0fb5ca2ff51d9e6652e03af75a Mon Sep 17 00:00:00 2001 From: Maik Riechert Date: Sun, 24 Apr 2022 22:27:35 +0200 Subject: [PATCH] Test wrong composite "coordinates" (#29) Co-authored-by: Jon Blower --- schemas/domainBase.json | 62 ++++++++++++++++++-- test/domain_types/test_multipoint.py | 20 +++++-- test/domain_types/test_multipointseries.py | 18 +++++- test/domain_types/test_multipolygon.py | 11 +++- test/domain_types/test_multipolygonseries.py | 11 +++- test/domain_types/test_polygon.py | 11 +++- test/domain_types/test_polygonseries.py | 11 +++- test/domain_types/test_section.py | 16 ++--- test/domain_types/test_trajectory.py | 18 +++++- 9 files changed, 147 insertions(+), 31 deletions(-) diff --git a/schemas/domainBase.json b/schemas/domainBase.json index f9823bd..0bb38ea 100644 --- a/schemas/domainBase.json +++ b/schemas/domainBase.json @@ -77,6 +77,14 @@ "minItems" : 3, "maxItems" : 4 } + }, + "coordinates": + { + "enum": + [ + ["t", "x", "y", "z"], + ["t", "x", "y"] + ] } } } @@ -183,6 +191,14 @@ "minItems" : 2, "maxItems" : 3 } + }, + "coordinates": + { + "enum": + [ + ["x", "y", "z"], + ["x", "y"] + ] } } } @@ -223,6 +239,14 @@ "minItems" : 2, "maxItems" : 3 } + }, + "coordinates": + { + "enum": + [ + ["x", "y", "z"], + ["x", "y"] + ] } } } @@ -263,6 +287,10 @@ "minItems" : 3, "maxItems" : 3 } + }, + "coordinates": + { + "const": ["t", "x", "y"] } } } @@ -299,7 +327,8 @@ { "$comment" : "There can only be one polygon in the axis", "maxItems" : 1 - } + }, + "coordinates": { "const" : ["x", "y"] } } } ] @@ -336,7 +365,8 @@ { "$comment" : "There can only be one polygon in the axis", "maxItems" : 1 - } + }, + "coordinates": { "const" : ["x", "y"] } } } ] @@ -361,7 +391,19 @@ { "properties" : { - "composite" : { "$ref": "/schemas/polygonValuesAxis" }, + "composite" : + { + "allOf" : + [ + { "$ref": "/schemas/polygonValuesAxis" }, + { + "properties" : + { + "coordinates": { "const" : ["x", "y"] } + } + } + ] + }, "z" : { "$ref" : "/schemas/numericSingleValueAxis" }, "t" : { "$ref" : "/schemas/stringSingleValueAxis" } }, @@ -382,7 +424,19 @@ { "properties" : { - "composite" : { "$ref": "/schemas/polygonValuesAxis" }, + "composite" : + { + "allOf" : + [ + { "$ref": "/schemas/polygonValuesAxis" }, + { + "properties" : + { + "coordinates": { "const" : ["x", "y"] } + } + } + ] + }, "z" : { "$ref" : "/schemas/numericSingleValueAxis" }, "t" : { "$ref" : "/schemas/stringValuesAxis" } }, diff --git a/test/domain_types/test_multipoint.py b/test/domain_types/test_multipoint.py index f32ce1d..6a6d096 100644 --- a/test/domain_types/test_multipoint.py +++ b/test/domain_types/test_multipoint.py @@ -63,6 +63,22 @@ def test_wrong_composite_axis_type(validator, multipoint_domain): validator.validate(multipoint_domain) +def test_wrong_composite_axis_coordinates(validator, multipoint_domain): + ''' Invalid: MultiPoint domain with invalid coordinates ''' + + multipoint_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipoint_domain) + + +def test_wrong_composite_axis_coordinates2(validator, multipoint_domain): + ''' Invalid: MultiPoint domain with invalid coordinates ''' + + multipoint_domain["axes"]["composite"]["coordinates"] = ["z", "y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipoint_domain) + + def test_extra_axis(validator, multipoint_domain): ''' Invalid: MultiPoint domain with unrecognised extra axis ''' @@ -86,7 +102,3 @@ def test_empty_t_axis(validator, multipoint_domain): multipoint_domain["axes"]["t"] = { "values" : [] } with pytest.raises(ValidationError): validator.validate(multipoint_domain) - - -# TODO test coordinate identifiers of 'composite' axis -# to be "x","y","z" or "x","y" diff --git a/test/domain_types/test_multipointseries.py b/test/domain_types/test_multipointseries.py index 997c0d0..1a647ed 100644 --- a/test/domain_types/test_multipointseries.py +++ b/test/domain_types/test_multipointseries.py @@ -55,6 +55,22 @@ def test_wrong_composite_axis_type(validator, multipointseries_domain): validator.validate(multipointseries_domain) +def test_wrong_composite_axis_coordinates(validator, multipointseries_domain): + ''' Invalid: MultiPointSeries domain with invalid coordinates ''' + + multipointseries_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipointseries_domain) + + +def test_wrong_composite_axis_coordinates2(validator, multipointseries_domain): + ''' Invalid: MultiPointSeries domain with invalid coordinates ''' + + multipointseries_domain["axes"]["composite"]["coordinates"] = ["z", "y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipointseries_domain) + + def test_composite_axis_with_1_value(validator, multipointseries_domain): ''' Invalid: MultiPointSeries domain with composite axis with tuples of length 1 ''' @@ -88,6 +104,4 @@ def test_extra_axis(validator, multipointseries_domain): validator.validate(multipointseries_domain) -# TODO test coordinate identifiers of 'composite' axis -# to be "x","y","z" or "x","y" # TODO test that all values in 'composite' axis are valid and consistent tuples diff --git a/test/domain_types/test_multipolygon.py b/test/domain_types/test_multipolygon.py index 3881e9a..9888e52 100644 --- a/test/domain_types/test_multipolygon.py +++ b/test/domain_types/test_multipolygon.py @@ -29,6 +29,14 @@ def test_empty_composite_axis(validator, multipolygon_domain): validator.validate(multipolygon_domain) +def test_wrong_composite_axis_coordinates(validator, multipolygon_domain): + ''' Invalid: MultiPolygon domain with invalid coordinates ''' + + multipolygon_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipolygon_domain) + + def test_wrong_composite_axis_type(validator, multipolygon_domain): ''' Invalid: MultiPolygon domain with primitive instead of polygon axis ''' @@ -94,6 +102,3 @@ def test_multivalued_t_axis(validator, multipolygon_domain): multipolygon_domain["axes"]["t"] = { "values" : ["2008-01-01T04:00:00Z", "2008-01-01T05:00:00Z"] } with pytest.raises(ValidationError): validator.validate(multipolygon_domain) - - -# TODO check coordinates are "x","y", in that order diff --git a/test/domain_types/test_multipolygonseries.py b/test/domain_types/test_multipolygonseries.py index 377e974..24b35c3 100644 --- a/test/domain_types/test_multipolygonseries.py +++ b/test/domain_types/test_multipolygonseries.py @@ -47,6 +47,14 @@ def test_wrong_composite_axis_type2(validator, multipolygonseries_domain): validator.validate(multipolygonseries_domain) +def test_wrong_composite_axis_coordinates(validator, multipolygonseries_domain): + ''' Invalid: MultiPolygonSeries domain with invalid coordinates ''' + + multipolygonseries_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(multipolygonseries_domain) + + def test_wrong_data_type(validator, multipolygonseries_domain): ''' Invalid: MultiPolygonSeries domain with wrong data type ''' @@ -86,6 +94,3 @@ def test_empty_t_axis(validator, multipolygonseries_domain): multipolygonseries_domain["axes"]["t"] = { "values" : [] } with pytest.raises(ValidationError): validator.validate(multipolygonseries_domain) - - -# TODO check coordinates are "x","y" diff --git a/test/domain_types/test_polygon.py b/test/domain_types/test_polygon.py index 10edfa3..d673caa 100644 --- a/test/domain_types/test_polygon.py +++ b/test/domain_types/test_polygon.py @@ -58,6 +58,14 @@ def test_composite_axis_with_2_values(validator, polygon_domain): validator.validate(polygon_domain) +def test_wrong_composite_axis_coordinates(validator, polygon_domain): + ''' Invalid: Polygon domain with invalid coordinates ''' + + polygon_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(polygon_domain) + + def test_wrong_data_type(validator, polygon_domain): ''' Invalid: Polygon domain with wrong data type ''' @@ -105,6 +113,3 @@ def test_multivalued_t_axis(validator, polygon_domain): polygon_domain["axes"]["t"] = { "values" : ["2008-01-01T04:00:00Z", "2008-01-01T05:00:00Z"] } with pytest.raises(ValidationError): validator.validate(polygon_domain) - - -# TODO check coordinates are "x","y" diff --git a/test/domain_types/test_polygonseries.py b/test/domain_types/test_polygonseries.py index 34a21e1..5131f3d 100644 --- a/test/domain_types/test_polygonseries.py +++ b/test/domain_types/test_polygonseries.py @@ -39,6 +39,14 @@ def test_wrong_composite_axis_type(validator, polygonseries_domain): validator.validate(polygonseries_domain) +def test_wrong_composite_axis_coordinates(validator, polygonseries_domain): + ''' Invalid: PolygonSeries domain with invalid coordinates ''' + + polygonseries_domain["axes"]["composite"]["coordinates"] = ["y", "x"] + with pytest.raises(ValidationError): + validator.validate(polygonseries_domain) + + def test_wrong_composite_axis_type2(validator, polygonseries_domain): ''' Invalid: PolygonSeries domain with tuple instead of polygon axis (invalid polygons) ''' @@ -97,6 +105,3 @@ def test_empty_t_axis(validator, polygonseries_domain): polygonseries_domain["axes"]["t"] = { "values" : [] } with pytest.raises(ValidationError): validator.validate(polygonseries_domain) - - -# TODO check coordinates are "x","y" diff --git a/test/domain_types/test_section.py b/test/domain_types/test_section.py index fb092e6..00cf572 100644 --- a/test/domain_types/test_section.py +++ b/test/domain_types/test_section.py @@ -56,9 +56,15 @@ def test_composite_axis_with_4_values(validator, section_domain): def test_wrong_composite_axis_type(validator, section_domain): ''' Invalid: Section domain with primitive instead of tuple axis ''' - section_domain["axes"]["composite"] = { - "values": [1, 2, 3] - } + section_domain["axes"]["composite"]["values"] = [1, 2, 3] + with pytest.raises(ValidationError): + validator.validate(section_domain) + + +def test_wrong_composite_axis_coordinates(validator, section_domain): + ''' Invalid: Section domain with invalid coordinates ''' + + section_domain["axes"]["composite"]["coordinates"] = ["t", "y", "x"] with pytest.raises(ValidationError): validator.validate(section_domain) @@ -86,7 +92,3 @@ def test_empty_z_axis(validator, section_domain): section_domain["axes"]["z"] = { "values" : [] } with pytest.raises(ValidationError): validator.validate(section_domain) - - -# TODO test coordinate identifiers of 'composite' axis -# to be "t","x","y" (can these be in another order?) diff --git a/test/domain_types/test_trajectory.py b/test/domain_types/test_trajectory.py index 302e968..9ce3add 100644 --- a/test/domain_types/test_trajectory.py +++ b/test/domain_types/test_trajectory.py @@ -39,6 +39,22 @@ def test_wrong_composite_axis_type(validator, trajectory_domain): validator.validate(trajectory_domain) +def test_wrong_composite_axis_coordinates(validator, trajectory_domain): + ''' Invalid: Trajectory domain with invalid coordinates ''' + + trajectory_domain["axes"]["composite"]["coordinates"] = ["t", "y", "x"] + with pytest.raises(ValidationError): + validator.validate(trajectory_domain) + + +def test_wrong_composite_axis_coordinates2(validator, trajectory_domain): + ''' Invalid: Trajectory domain with invalid coordinates ''' + + trajectory_domain["axes"]["composite"]["coordinates"] = ["t", "z", "y", "x"] + with pytest.raises(ValidationError): + validator.validate(trajectory_domain) + + def test_composite_axis_with_2_values(validator, trajectory_domain): ''' Invalid: Trajectory domain with composite axis with tuples of length 2 ''' @@ -88,6 +104,4 @@ def test_multivalued_z_axis(validator, trajectory_domain): validator.validate(trajectory_domain) -# TODO test coordinate identifiers of 'composite' axis -# to be "t","x","y","z" or "t","x","y" # TODO test there cannot be both 'z' in 'composite' and a 'z' axis