diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 4ee0dacd0ecf0a9e347866965786fb619dd7a725..e0464cc81b51c1c64ad36011c8ec0a75eea63293 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 9cf9e1b7ac0043f3c256f1210272ff15b9df458b..b46d89986b843cef74492f38e3c069538a227872 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 +