diff --git a/src/linkahead/common/models.py b/src/linkahead/common/models.py index be6acf3c3508c28e8a08a2dcc2ee2ec098418360..38c1349067fce68dc3dc0311dc621bd0e383d4b0 100644 --- a/src/linkahead/common/models.py +++ b/src/linkahead/common/models.py @@ -3314,6 +3314,20 @@ class Container(list): if hasattr(prop, 'id'): is_property.add(prop.id) + if isinstance(container_item, Property): + dtype = container_item.datatype + if isinstance(dtype, Entity): + is_being_referenced.add(dtype.id) + elif isinstance(dtype, str): + if is_list_datatype(dtype): + dtype = get_list_datatype(dtype) + try: + is_being_referenced.add(container.get_entity_by_name(dtype).id) + except KeyError: + pass + else: + # plain old scalar datatype + pass dependent_parents = item_id.intersection(is_parent) dependent_properties = item_id.intersection(is_property) diff --git a/unittests/test_container.py b/unittests/test_container.py index 5833fb3f53da613cda482de08be6b582ffe7c287..4cd8fefcaefee9fe6fdc5857805353227b493dfb 100644 --- a/unittests/test_container.py +++ b/unittests/test_container.py @@ -146,7 +146,6 @@ def test_container_dependencies_for_deletion_with_lists(): assert db.Container._find_dependencies_in_container(container) == {2001} -# @pytest.mark.xfail def test_container_deletion_with_references(): """Test if dependencies are checked correctly. """ @@ -154,13 +153,28 @@ def test_container_deletion_with_references(): RT1 = db.RecordType(name="RT1") RT2 = db.RecordType(name="RT2").add_property(name="prop2", datatype=RT1) RT3 = db.RecordType(name="RT3").add_property(name="prop3", datatype="LIST<RT1>") + prop4a = db.Property(name="prop4a", datatype=RT1) + prop4b = db.Property(name="prop4b", datatype="RT1") + prop5 = db.Property(name="prop5", datatype="LIST<RT1>") cont12 = db.Container().extend([RT1, RT2]) cont13 = db.Container().extend([RT1, RT3]) + cont14a = db.Container().extend([RT1, prop4a]) + cont14b = db.Container().extend([RT1, prop4b]) + cont15 = db.Container().extend([RT1, prop5]) cont12.to_xml() cont13.to_xml() + cont14a.to_xml() + cont14b.to_xml() + cont15.to_xml() deps12 = db.Container._find_dependencies_in_container(cont12) deps13 = db.Container._find_dependencies_in_container(cont13) + deps14a = db.Container._find_dependencies_in_container(cont14a) + deps14b = db.Container._find_dependencies_in_container(cont14b) + deps15 = db.Container._find_dependencies_in_container(cont15) assert len(deps12) == 1 and deps12.pop() == -1 assert len(deps13) == 1 and deps13.pop() == -1 + assert len(deps14a) == 1 and deps14a.pop() == -1 + assert len(deps14b) == 1 and deps14b.pop() == -1 + assert len(deps15) == 1 and deps15.pop() == -1