diff --git a/unittests/test_high_level_api.py b/unittests/test_high_level_api.py index 296ac71b09ea67a7b341fc21080fe97361279d8a..72ac2bc340caaf6a6518b24ec3bfa875bfaa0582 100644 --- a/unittests/test_high_level_api.py +++ b/unittests/test_high_level_api.py @@ -26,13 +26,16 @@ import caosdb as db from caosdb.high_level_api import (convert_to_entity, convert_to_python_object) -from caosdb.high_level_api import (CaosDBPythonUnresolvedParent,) +from caosdb.high_level_api import (CaosDBPythonUnresolvedParent, + CaosDBPythonUnresolvedReference) import pytest from lxml import etree import os import tempfile import pickle +import sys, traceback, pdb + @pytest.fixture def testrecord(): parser = etree.XMLParser(remove_comments=True) @@ -104,5 +107,48 @@ def test_convert_with_references(): r = db.Record() r.add_property(name="ref", value=r_ref) + # try: + obj = convert_to_python_object(r) + # except: + # extype, value, tb = sys.exc_info() + # traceback.print_exc() + # pdb.post_mortem(tb) + assert obj.ref.a == 42 + + # With datatype: + r_ref = db.Record() + r_ref.add_parent("bla") + r_ref.add_property(name="a", value=42) + + r = db.Record() + r.add_property(name="ref", value=r_ref) + + obj = convert_to_python_object(r) + assert obj.ref.a == 42 + # Parent does not automatically lead to a datatype: + assert obj.get_property_metadata("ref").datatype is None + assert obj.ref.has_parent("bla") is True + + # Add datatype explicitely: + r_ref = db.Record() + r_ref.add_parent("bla") + r_ref.add_property(name="a", value=42) + + r = db.Record() + r.add_property(name="ref", value=r_ref, datatype="bla") + + obj = convert_to_python_object(r) + assert obj.ref.a == 42 + # Parent does not automatically lead to a datatype: + assert obj.get_property_metadata("ref").datatype is "bla" + assert obj.ref.has_parent("bla") is True + + # Unresolved Reference: + r = db.Record() + r.add_property(name="ref", value=27, datatype="bla") + obj = convert_to_python_object(r) - breakpoint() + # Parent does not automatically lead to a datatype: + assert obj.get_property_metadata("ref").datatype is "bla" + assert isinstance(obj.ref, CaosDBPythonUnresolvedReference) + assert obj.ref.id == 27