Skip to content
Snippets Groups Projects

Get parents recursively

Merged Daniel Hornung requested to merge f-get-parents-recursively into dev
3 files
+ 41
16
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -48,7 +48,26 @@ def teardown_function(function):
setup_module()
@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
def test_get_parents_recursively():
"""Test for https://gitlab.com/caosdb/caosdb-pylib/-/issues/90
> Entity.get_parents_recursively() does not work unless the full ancestry has been retrieved from
> the server.
"""
# Setup
rt_A = db.RecordType(name="TestA")
rt_B = db.RecordType(name="TestB").add_parent(rt_A)
rt_C = db.RecordType(name="TestC").add_parent(rt_B)
db.Container().extend([rt_A, rt_B, rt_C]).insert()
# Retrieve only C
retrieved_C = db.RecordType(name="TestC").retrieve()
parents = retrieved_C.get_parents_recursively(retrieve=True)
assert len(parents) == 2
assert "TestB" in [p.name for p in parents]
assert "TestA" in [p.name for p in parents]
def test_recursive_parents():
# inheritance structure:
# A
@@ -66,29 +85,31 @@ def test_recursive_parents():
parents = C.get_parents_recursively()
assert len(parents) == 3
assert A in parents
assert B in parents
assert B2 in parents
parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
assert (A.id, A.name) in parent_identifiers
assert (B.id, B.name) in parent_identifiers
assert (B2.id, B2.name) in parent_identifiers
parents = c.get_parents_recursively()
assert len(parents) == 4
assert A in parents
assert B in parents
assert B2 in parents
assert C in parents
parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
assert (A.id, A.name) in parent_identifiers
assert (B.id, B.name) in parent_identifiers
assert (B2.id, B2.name) in parent_identifiers
assert (C.id, C.name) in parent_identifiers
# Now do a time travel and great-grand-parentize yourself...
A.add_parent(C).update()
parents = C.get_parents_recursively()
assert len(parents) == 4
assert A in parents
assert B in parents
assert B2 in parents
assert C in parents
parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
assert (A.id, A.name) in parent_identifiers
assert (B.id, B.name) in parent_identifiers
assert (B2.id, B2.name) in parent_identifiers
assert (C.id, C.name) in parent_identifiers
@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
def test_entity_has_parent():
# inheritance structure:
# A
@@ -137,8 +158,8 @@ def test_entity_has_parent():
assert not c.has_parent(fake_C_id, check_name=False,
check_id=True)
fake_B_name_id = RecordType(name="TestTypeB", id=B.id)
fake_C_name_id = RecordType(name="not C", id=C.id * 5)
fake_B_name_id = db.RecordType(name="TestTypeB", id=B.id)
fake_C_name_id = db.RecordType(name="not C", id=C.id * 5)
assert c.has_parent(fake_B_name_id, check_name=True,
check_id=True)
Loading