diff --git a/unittests/json-schema-models/datamodel_atomic_properties.schema.json b/unittests/json-schema-models/datamodel_atomic_properties.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..97a67b1ce5458ebe30ae4c75f218ff2066258bcf --- /dev/null +++ b/unittests/json-schema-models/datamodel_atomic_properties.schema.json @@ -0,0 +1,22 @@ +[ + { + "title": "Dataset1", + "description": "Some description", + "type": "object", + "properties": { + "title": { "type": "string", "description": "full dataset title" }, + "campaign": { "type": "string", "description": "FIXME" }, + "1": { "type": "number", "description": "Some float property" } + }, + "required": [ "title", "1" ] + }, + { + "title": "Dataset2", + "type": "object", + "properties": { + "date": { "type": "string", "format": "date-time" }, + "integer": { "type": "integer", "description": "Some integer property" }, + "boolean": { "type": "boolean" } + } + } +] diff --git a/unittests/test_json_schema_model_parser.py b/unittests/test_json_schema_model_parser.py index c8cae46e4d1abcc5dde21ab7e598c1ddde559c58..4cf4c234216b2aaa8faee51cbe17a96c9394a67d 100644 --- a/unittests/test_json_schema_model_parser.py +++ b/unittests/test_json_schema_model_parser.py @@ -33,9 +33,11 @@ def test_rt_with_string_properties(): model = parse_model_from_json_schema( os.path.join(FILEPATH, - "./datamodel_string_properties.schema.json")) + "datamodel_string_properties.schema.json")) assert "Dataset" in model dataset_rt = model["Dataset"] + assert isinstance(dataset_rt, db.RecordType) + assert dataset_rt.name == "Dataset" assert dataset_rt.description == "" assert len(dataset_rt.get_properties()) == 3 @@ -54,3 +56,52 @@ def test_rt_with_string_properties(): method_prop = dataset_rt.get_property("method") assert method_prop.datatype == db.TEXT assert dataset_rt.get_importance(method_prop.name) == db.RECOMMENDED + + +def test_datamodel_with_atomic_properties(): + """Test read-in of two separate record types with atomic-typed properties.""" + # @author Florian Spreckelsen + # @date 2022-02-18 + + model = parse_model_from_json_schema(os.path.join( + FILEPATH, "datamodel_atomic_properties.schema.json")) + assert "Dataset1" in model + assert "Dataset2" in model + + rt1 = model["Dataset1"] + assert isinstance(rt1, db.RecordType) + assert rt.name == "Dataset1" + assert rt1.description == "Some description" + assert len(rt1.get_properties()) == 3 + + assert rt1.get_property("title") is not None + assert rt1.get_property("campaign") is not None + assert rt1.get_property("1") is not None + + title_prop = rt1.get_property("title") + assert title_prop.datatype == db.TEXT + assert rt1.get_importance(title_prop.name) == db.OBLIGATORY + + campaign_prop = rt1.get_property("campaign") + assert campaign_prop.datatype == db.TEXT + assert rt1.get_importance(campaign_prop.name) == db.RECOMMENDED + + float_prop = rt1.get_property("1") + assert float_prop.datatype == db.DOUBLE + assert rt1.get_importance(float_prop.name) == db.OBLIGATORY + + rt2 = model["Dataset2"] + assert isinstance(rt2, db.RecordType) + assert rt2.name == "Dataset2" + assert not rt2.description + assert len(rt2.get_properties()) == 3 + + date_prop = rt2.get_property("date") + assert date_prop.datatype == db.DATETIME + + int_prop = rt2.get_property("integer") + assert int_prop.datatype == db.INTEGER + assert int_prop.description == "Some integer property" + + bool_prop = rt2.get_property("boolean") + assert bool_prop.datatype == db.BOOLEAN