diff --git a/unittests/test_parent_cfood.yml b/unittests/test_parent_cfood.yml new file mode 100644 index 0000000000000000000000000000000000000000..809b5e5fec130f889ba22bf71792e1dc3423968c --- /dev/null +++ b/unittests/test_parent_cfood.yml @@ -0,0 +1,35 @@ +--- +metadata: + crawler-version: 0.6.1 +--- +Definitions: + type: Definitions + +data: + type: Dict + match_name: '.*' + records: + Experiment: + name: "e" + Projekt: + parents: ["project"] + name: "p" + Campaign: + name: "c" + subtree: + Experiment: + type: DictElement + match: '.*' + records: + Experiment: + parents: ["Exp"] + Projekt: + parents: ["Projekt"] + Campaign: + parents: ["Cap"] + Experiment2: + type: DictElement + match: '.*' + records: + Campaign: + parents: ["Cap2"] diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py index 1a1c8c1823aee5e84d35b9ddaf7dc919b56e40dc..64b273802495d43462a113fabbb1cc14dbbc05e0 100644 --- a/unittests/test_scanner.py +++ b/unittests/test_scanner.py @@ -276,3 +276,28 @@ def test_variable_deletion_problems(): assert record.get_property("var2").value == "test" else: raise RuntimeError("Wrong name") + +def test_record_parents(): + """ Test the correct list of returned records by the scanner """ + + data = { + 'Experiments': {} + } + + crawler_definition = load_definition(UNITTESTDIR / "test_parent_cfood.yml") + converter_registry = create_converter_registry(crawler_definition) + + records = scan_structure_elements(DictElement(name="", value=data), crawler_definition, + converter_registry) + assert len(records)==3 + for rec in records: + if rec.name == 'e': + assert rec.parents[0].name == 'Exp' # default parent was overwritten + assert len(rec.parents)==1 + elif rec.name == 'c': + assert rec.parents[0].name == 'Cap2' # default parent was overwritten by second + # converter + assert len(rec.parents)==1 + elif rec.name == 'p': + assert rec.parents[0].name == 'Projekt' # top level set parent was overwritten + assert len(rec.parents)==1