diff --git a/tests/test_version.py b/tests/test_version.py index 8d45090db0810a1766d92e74d0c2864a13d99e55..0d96aa012750ed880db91f365db25194243eb4a2 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -40,8 +40,11 @@ def test_version_object(): from caosdb.common.versioning import Version -def insertion(name="TestRT"): - rt = c.RecordType(name, description="TestDescription1").insert() +def insertion(name="TestRT", parents=[]): + rt = c.RecordType(name, description="TestDescription1") + for par in parents: + rt.add_parent(par) + rt.insert() assert rt.version is not None assert rt.version.id is not None assert rt.version.date is not None @@ -92,8 +95,9 @@ def test_update_description(): def test_update_parent(): - par1 = insertion("TestRTParent1") - par2 = insertion("TestRTParent2") + superpar = insertion("TestRTParentSuper") + par1 = insertion("TestRTParent1", parents=[superpar]) + par2 = insertion("TestRTParent2", parents=[superpar]) rt = insertion("TestRTChild") assert len(rt.get_parents()) == 0 @@ -119,13 +123,13 @@ def test_update_parent(): assert len(c.execute_query("FIND TestRTParent2")) == 2 assert c.execute_query("FIND TestRTChild", unique=True).id == rt.id - rt_head = c.Container().retrieve(query=str(rt.id), sync=False)[0] + rt_head = c.Container().retrieve(query=str(rt.id), sync=False, flags={"cache": "false"})[0] rt_v1 = c.Container().retrieve(query=str(rt.id) + "@" + first_version.id, - sync=False)[0] + sync=False, flags={"cache": "false"})[0] rt_v2 = c.Container().retrieve(query=str(rt.id) + "@" + second_version.id, - sync=False)[0] + sync=False, flags={"cache": "false"})[0] rt_v3 = c.Container().retrieve(query=str(rt.id) + "@" + third_version.id, - sync=False)[0] + sync=False, flags={"cache": "false"})[0] assert rt_head.version == third_version assert rt_v1.version.id == first_version.id @@ -133,9 +137,11 @@ def test_update_parent(): assert rt_v3.version.id == third_version.id assert len(rt_v3.get_parents()) == 1 + print(rt_v3) assert rt_v3.get_parent("TestRTParent1") is None assert rt_v3.get_parent("TestRTParent2") is not None + print(rt_v2) assert len(rt_v2.get_parents()) == 1 assert rt_v2.get_parent("TestRTParent1") is not None assert rt_v2.get_parent("TestRTParent2") is None @@ -390,6 +396,39 @@ def test_bug_cached_parent_name_in_old_version(): assert old_rec.get_parent(del_rt_name) is None +@mark.xfail(reason="bug fix needed") +def test_bug_parent_name_in_old_version(): + """ mysql backend return current name even if this historically not + correct.""" + OLD_NAME = "TestRT1_old" + NEW_NAME = "TestRT1_cur" + rt = c.RecordType(name=OLD_NAME).insert() + + rec = c.Record(name="TestRec").add_parent(rt) + rec.insert() + rec.description = "v2" + rec.update() + + rec_v1 = c.Container().retrieve(str(rec.id) + "@HEAD~1", + sync=False, + flags={"cache": "false"}, + raise_exception_on_error=False)[0] + rec_v2 = c.Container().retrieve(str(rec.id) + "@HEAD", + sync=False, + flags={"cache": "false"}, + raise_exception_on_error=False)[0] + + assert [OLD_NAME] == [p.name for p in rec_v2.get_parents()] + assert [OLD_NAME] == [p.name for p in rec_v1.get_parents()] + + # change parent + rt.name = NEW_NAME + assert [NEW_NAME] == [p.name for p in rec_v2.get_parents()] + assert [OLD_NAME] == [p.name for p in rec_v1.get_parents()] + + + + def test_reference_deleted_in_old_version(): ref_rt = insertion("TestReferencedObject") rt = insertion("TestRT")