From 2fa1fc0bb5c28a19829728c1f2b01f86ace1c6ab Mon Sep 17 00:00:00 2001 From: Alexander Schlemmer <a.schlemmer@indiscale.com> Date: Thu, 24 Oct 2024 12:33:51 +0200 Subject: [PATCH] TST: two tests for recursive definitions of records --- unittests/test_scanner.py | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py index 680e4abe..b93d5f98 100644 --- a/unittests/test_scanner.py +++ b/unittests/test_scanner.py @@ -405,3 +405,87 @@ def test_units(): assert rec.get_property("may_be_overwritten") is not None assert rec.get_property("may_be_overwritten").value == "400" assert rec.get_property("may_be_overwritten").unit == "°C" + + +def test_recursive_definition(): + """ + + """ + + recursive_yaml = """ +Converter: + type: DictElement + records: + Block: + Experiment: $Experiment + Experiment: + Block: $Block + """ + + crawler_definition = _load_definition_from_yaml_dict( + [yaml.load(recursive_yaml, Loader=yaml.SafeLoader)]) + converter_registry = create_converter_registry(crawler_definition) + + data = { + "value_with_unit": "1.1 m", + "array_with_units": [ + "1.1 cm", + "2.2 cm" + ] + } + records = scan_structure_elements(DictElement(name="", value=data), crawler_definition, + converter_registry) + + assert len(records) == 2 + assert len(records[0].parents) == 1 + assert records[0].parents[0].name == "Block" + assert len(records[1].parents) == 1 + assert records[1].parents[0].name == "Experiment" + + assert records[0].get_property("Experiment").value == records[1] + assert records[1].get_property("Block").value == records[0] + + +def test_recursive_definition_2(): + """ + This is basically a test for: + https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/16 + """ + + recursive_yaml = """ +FirstConverter: + type: DictElement + records: + Experiment: + subtree: + Converter: + type: DictElement + records: + Block: + Experiment: $Experiment + Experiment: + Block: $Block + """ + + crawler_definition = _load_definition_from_yaml_dict( + [yaml.load(recursive_yaml, Loader=yaml.SafeLoader)]) + converter_registry = create_converter_registry(crawler_definition) + + data = {"data": { + "value_with_unit": "1.1 m", + "array_with_units": [ + "1.1 cm", + "2.2 cm" + ] + }} + records = scan_structure_elements(DictElement(name="", value=data), crawler_definition, + converter_registry) + + assert len(records) == 2 + assert len(records[0].parents) == 1 + assert records[0].parents[0].name == "Block" + assert len(records[1].parents) == 1 + assert records[1].parents[0].name == "Experiment" + + assert records[0].get_property("Experiment").value == records[1] + assert records[1].get_property("Block").value == records[0] -- GitLab