From e39e681be449f0a4320520578fc7dc5c7ef1dd62 Mon Sep 17 00:00:00 2001 From: Alexander Schlemmer <alexander@mail-schlemmer.de> Date: Fri, 21 Jan 2022 15:56:27 +0100 Subject: [PATCH] FIX: for missing entries in comparison --- src/caosdb/apiutils.py | 8 +++--- unittests/test_apiutils.py | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 4ee0dacd..e0464cc8 100644 --- a/src/caosdb/apiutils.py +++ b/src/caosdb/apiutils.py @@ -558,8 +558,8 @@ def getCommitIn(folder): return t.readline().strip() -COMPARED = ["name", "role", "datatype", "description", "importance"] - +COMPARED = ["name", "role", "datatype", "description", "importance", + "id", "path", "checksum", "size"] def compare_entities(old_entity: Entity, new_entity: Entity): """ @@ -613,7 +613,7 @@ def compare_entities(old_entity: Entity, new_entity: Entity): if new_entity_attr_exists: newdiff[attr] = newattr - + # properties for prop in old_entity.properties: @@ -653,7 +653,7 @@ def compare_entities(old_entity: Entity, new_entity: Entity): olddiff["properties"].pop(prop.name) else: - raise NotImplementedError() + raise NotImplementedError("Comparison not implemented for multi-properties.") for prop in new_entity.properties: if len([0 for p in old_entity.properties if p.name == prop.name]) == 0: diff --git a/unittests/test_apiutils.py b/unittests/test_apiutils.py index 9cf9e1b7..b46d8998 100644 --- a/unittests/test_apiutils.py +++ b/unittests/test_apiutils.py @@ -179,3 +179,55 @@ def test_compare_entities_units(): assert diff_r1["properties"]["test"]["unit"] == "cm" assert diff_r2["properties"]["test"]["unit"] == "m" + + +def test_compare_special_properties(): + # Test for all known special properties: + SPECIAL_PROPERTIES = ("description", "name", "checksum", "size", "path", "id") + INTS = ("size", "id") + HIDDEN = ("checksum", "size") + + for key in SPECIAL_PROPERTIES: + set_key = key + if key in HIDDEN: + set_key = "_" + key + r1 = db.Record() + r2 = db.Record() + if key not in INTS: + setattr(r1, set_key, "bla 1") + setattr(r2, set_key, "bla 1") + else: + setattr(r1, set_key, 1) + setattr(r2, set_key, 1) + + diff_r1, diff_r2 = compare_entities(r1, r2) + print(diff_r1) + print(diff_r2) + assert key not in diff_r1 + assert key not in diff_r2 + assert len(diff_r1["parents"]) == 0 + assert len(diff_r2["parents"]) == 0 + assert len(diff_r1["properties"]) == 0 + assert len(diff_r2["properties"]) == 0 + + if key not in INTS: + setattr(r2, set_key, "bla test") + else: + setattr(r2, set_key, 2) + + diff_r1, diff_r2 = compare_entities(r1, r2) + print(r1) + print(r2) + print(diff_r1) + print(diff_r2) + assert key in diff_r1 + assert key in diff_r2 + if key not in INTS: + assert diff_r1[key] == "bla 1" + assert diff_r2[key] == "bla test" + else: + assert diff_r1[key] == 1 + assert diff_r2[key] == 2 + assert len(diff_r1["properties"]) == 0 + assert len(diff_r2["properties"]) == 0 + -- GitLab