diff --git a/src/linkahead/apiutils.py b/src/linkahead/apiutils.py index 558266f9c0621cb1b16d38c935fafa1f655e9ba4..e2ed0facea84e6056b1ac877b4417ce6ad8ef504 100644 --- a/src/linkahead/apiutils.py +++ b/src/linkahead/apiutils.py @@ -215,8 +215,9 @@ def compare_entities(old_entity: Entity, new_entity: Entity, compare_referenced_ if old_entity is new_entity: return (olddiff, newdiff) - if (isinstance(old_entity, Property) or isinstance(old_entity, Property)): - raise NotImplementedError("Comparing Properties is currently not supported.") + if type(old_entity) is not type(new_entity): + raise ValueError( + "Comparison of different Entity types is not supported.") for attr in SPECIAL_ATTRIBUTES: try: @@ -249,6 +250,7 @@ def compare_entities(old_entity: Entity, new_entity: Entity, compare_referenced_ newdiff[attr] = newattr # properties + for prop in old_entity.properties: matching = [p for p in new_entity.properties if p.name == prop.name] diff --git a/unittests/test_apiutils.py b/unittests/test_apiutils.py index ea13ba442bfe67ba394d9b360ae88d26ebe113bb..4705f19a1bdfbc4358790f787f2dce9ea97fee48 100644 --- a/unittests/test_apiutils.py +++ b/unittests/test_apiutils.py @@ -103,6 +103,8 @@ def test_compare_entities(): r1.add_parent("lopp") r1.add_property("test", value=2) r2.add_property("test", value=2) + r1.add_property("testi", importance=linkahead.SUGGESTED, value=2) + r2.add_property("testi", importance=linkahead.RECOMMENDED, value=2) r1.add_property("tests", value=3) r2.add_property("tests", value=45) r1.add_property("tester", value=3) @@ -114,8 +116,8 @@ def test_compare_entities(): assert len(diff_r1["parents"]) == 1 assert len(diff_r2["parents"]) == 0 - assert len(diff_r1["properties"]) == 3 - assert len(diff_r2["properties"]) == 3 + assert len(diff_r1["properties"]) == 4 + assert len(diff_r2["properties"]) == 4 assert "test" not in diff_r1["properties"] assert "test" not in diff_r2["properties"] @@ -123,6 +125,9 @@ def test_compare_entities(): assert "tests" in diff_r1["properties"] assert "tests" in diff_r2["properties"] + assert "testi" in diff_r1["properties"] + assert "testi" in diff_r2["properties"] + assert "tester" in diff_r1["properties"] assert "tester" in diff_r2["properties"] @@ -211,6 +216,38 @@ def test_compare_special_properties(): assert len(diff_r2["properties"]) == 0 +def test_compare_properties(): + p1 = db.Property() + p2 = db.Property() + + diff_r1, diff_r2 = compare_entities(p1, p2) + assert len(diff_r1["parents"]) == 0 + assert len(diff_r2["parents"]) == 0 + assert len(diff_r1["properties"]) == 0 + assert len(diff_r2["properties"]) == 0 + + diff_r1, diff_r2 = compare_entities(p1, p2) + assert len(diff_r1["parents"]) == 0 + assert len(diff_r2["parents"]) == 0 + assert len(diff_r1["properties"]) == 0 + assert len(diff_r2["properties"]) == 0 + + p1.value = 42 + p2.value = 4 + + diff_r1, diff_r2 = compare_entities(p1, p2) + assert len(diff_r1["parents"]) == 0 + assert len(diff_r2["parents"]) == 0 + assert len(diff_r1["properties"]) == 0 + assert len(diff_r2["properties"]) == 0 + + # Comparing values currently does not seem to be implemented: + assert "value" in diff_r1 + assert diff_r1["value"] == 42 + assert "value" in diff_r2 + assert diff_r2["value"] == 4 + + def test_copy_entities(): r = db.Record(name="A") r.add_parent(name="B")