From a10bc1edc02ad3e15611e0f5d5111291e77df362 Mon Sep 17 00:00:00 2001 From: "i.nueske" <i.nueske@indiscale.com> Date: Fri, 8 Nov 2024 08:58:28 +0100 Subject: [PATCH] TST: Extend compare_entities tests --- src/linkahead/apiutils.py | 4 ++++ unittests/test_apiutils.py | 43 +++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/linkahead/apiutils.py b/src/linkahead/apiutils.py index d61daeec..17bd5af4 100644 --- a/src/linkahead/apiutils.py +++ b/src/linkahead/apiutils.py @@ -251,12 +251,16 @@ def compare_entities(entity0: Optional[Entity] = None, # - Should there be a more detailed comparison of parents without id? # - Revisit filter - do we care about RecordType when matching? # How to treat None? + # - Should matching of parents also take the recordtype into account + # for parents that have a name but no id? # Suggestions for enhancements: # - For the comparison of entities in value and properties, consider # keeping a list of traversed entities, not only look at first layer # - Make the empty_diff functionality faster by adding a parameter to # this function so that it returns after the first found difference? # - Add parameter to restrict diff to some characteristics + # - Implement comparison of date where one is a string and the other is + # datetime if entity0 is None and old_entity is None: raise ValueError("Please provide the first entity as first argument (`entity0`)") if entity1 is None and new_entity is None: diff --git a/unittests/test_apiutils.py b/unittests/test_apiutils.py index 35f80e5e..2fb946c5 100644 --- a/unittests/test_apiutils.py +++ b/unittests/test_apiutils.py @@ -438,20 +438,43 @@ def test_compare_entities_battery(): t8 = db.Property(**alt_settings).add_parent(par3).add_property(prop3) diffs_0 = compare_entities(t7, t8), compare_entities(t7, t8, True) diffs_1 = compare_entities(t8, t7)[::-1], compare_entities(t8, t7, True)[::-1] - #assert diffs_0 == diffs_1 + assert diffs_0 == diffs_1 prop_settings = {"datatype": db.REFERENCE, "description": "desc of prop", "value": db.Record().add_parent(par3), "unit": '°'} t1.add_property(db.Property(name="description", **prop_settings)) t2.add_property(db.Property(name="description", **prop_settings)) -# try: -# diffs_0 = compare_entities(t1, t2), compare_entities(t1, t2, True) -# except Exception as e: -# diffs_0 = type(e) -# try: -# diffs_1 = compare_entities(t2, t1)[::-1], compare_entities(t2, t1, True)[::-1] -# except Exception as e: -# diffs_1 = type(e) -# assert diffs_0 == diffs_1 + # Order invariance for multi-property - either both fail or same result + try: + diffs_0 = compare_entities(t1, t2), compare_entities(t1, t2, True) + except Exception as e: + diffs_0 = type(e) + try: + diffs_1 = compare_entities(t2, t1)[::-1], compare_entities(t2, t1, True)[::-1] + except Exception as e: + diffs_1 = type(e) + assert diffs_0 == diffs_1 + # Property types + t09, t10 = db.RecordType(), db.RecordType() + for t, ex in [(db.INTEGER, [-12, 0]), (db.DATETIME, ["2030-01-01", "1012-02-29"]), + (db.DOUBLE, [13.23, 7.1]), (db.BOOLEAN, [True, False])]: + t09.add_property(db.Property(name=f"{t}:{ex[0]}", datatype=t, value=ex[0])) + t10.add_property(db.Property(name=f"{t}:{ex[0]}", datatype=t, value=ex[0])) + t09.add_property(name=f"{t}:{ex[1]}", datatype=t, value=ex[1]) + t10.add_property(name=f"{t}:{ex[1]}", datatype=t, value=ex[1]) + assert empty_diff(t09, t10) + t09.add_property(name=f"diff", value=1) + t10.add_property(name=f"diff", value=2) + assert not empty_diff(t09, t10) + # Default values + t09, t10 = db.Record(), db.Record() + t09.add_property(db.Property(name=f"A1"), value="A") + t10.add_property(name=f"A1", value="A") + t09.add_property(db.Property(id=12, name=f"A2"), value="A") + t10.add_property(id=12, name=f"A2", value="A") + t09.add_property(db.Property(id=15), value="A") + t10.add_property(id=15, value="A") + assert empty_diff(t09, t10) + # ToDo: extended tests for references def test_compare_special_properties(): -- GitLab