Skip to content
Snippets Groups Projects
Commit 46c31df1 authored by florian's avatar florian
Browse files

TST: Add more tests for pattern properties

parent f1643f98
No related branches found
No related tags found
2 merge requests!73MAINT: change wording of TableImporter argument and allow converters and...,!72Extend json-schema model parser
Pipeline #36822 failed
...@@ -917,8 +917,11 @@ class JsonSchemaParser(Parser): ...@@ -917,8 +917,11 @@ class JsonSchemaParser(Parser):
pattern_prop = self._get_pattern_prop() pattern_prop = self._get_pattern_prop()
returns = [] returns = []
for ii, (key, element) in enumerate(pattern_elements.items()): for ii, (key, element) in enumerate(pattern_elements.items()):
if not "title" in element:
name_suffix = f"_{ii+1}" if num_patterns > 1 else "" name_suffix = f"_{ii+1}" if num_patterns > 1 else ""
name = name_prefix + "Entry" + name_suffix name = name_prefix + "Entry" + name_suffix
else:
name = element["title"]
if element["type"] == "object": if element["type"] == "object":
# simple, is already an object, so can be treated like any other # simple, is already an object, so can be treated like any other
# record type. # record type.
......
[
{
"title": "Dataset",
"type": "object",
"patternProperties": {
"^[0-9]{4,4}": {
"type": "boolean"
},
"^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}": {
"type": "object",
"properties": {
"date_id": {
"type": [
"string",
"null"
],
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
}
}
}
}
},
{
"title": "Dataset2",
"type": "object",
"properties": {
"datetime": {
"type": "string",
"format": "date-time"
}
},
"patternProperties": {
".*": {
"title": "Literally anything",
"type": "object"
}
}
}
]
...@@ -441,3 +441,48 @@ def test_missing_array_items(): ...@@ -441,3 +441,48 @@ def test_missing_array_items():
rt = model["something_with_missing_array_items"] rt = model["something_with_missing_array_items"]
assert rt.get_property("missing") is not None assert rt.get_property("missing") is not None
assert rt.get_property("missing").datatype == db.LIST(db.FILE) assert rt.get_property("missing").datatype == db.LIST(db.FILE)
def test_pattern_properties():
model = parse_model_from_json_schema(os.path.join(
FILEPATH, "datamodel_pattern_properties.schema.json"))
assert "Dataset" in model
rt1 = model["Dataset"]
assert len(rt1.properties) == 2
for name in ["DatasetEntry_1", "DatasetEntry_2"]:
assert rt1.get_property(name) is not None
assert rt1.get_property(name).is_reference()
pattern_boolean_rt = model["DatasetEntry_1"]
assert "pattern: " in pattern_boolean_rt.description
assert len(pattern_boolean_rt.properties) == 2
pp = pattern_boolean_rt.get_property("__matched_pattern")
assert pp.datatype == db.TEXT
assert pattern_boolean_rt.get_importance(pp.name) == db.OBLIGATORY
value_prop = pattern_boolean_rt.get_property("DatasetEntry_1_value")
assert value_prop.datatype == db.BOOLEAN
pattern_object_rt = model["DatasetEntry_2"]
assert "pattern: " in pattern_object_rt.description
assert len(pattern_object_rt.properties) == 2
pp = pattern_object_rt.get_property("__matched_pattern")
assert pp.datatype == db.TEXT
assert pattern_object_rt.get_importance(pp.name) == db.OBLIGATORY
date_id_prop = pattern_object_rt.get_property("date_id")
assert date_id_prop.datatype == db.TEXT
assert "Dataset2" in model
rt2 = model["Dataset2"]
assert len(rt2.properties) == 2
# This has been tested elsewhere, just make sure that it is properly created
# in the presence of pattern properties, too.
assert rt2.get_property("datetime") is not None
assert rt2.get_property("Literally anything") is not None
assert rt2.get_property("Literally anything").is_reference()
pattern_named_rt = model["Literally anything"]
assert len(pattern_named_rt.properties) == 1
assert pattern_named_rt.get_property("__matched_pattern") is not None
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment