Skip to content
Snippets Groups Projects
Commit bceb49a9 authored by Alexander Schlemmer's avatar Alexander Schlemmer
Browse files

ENH: added missing check for multi-properties and added corresponding test cases

parent f70a3716
No related branches found
No related tags found
2 merge requests!107ENH: add entity getters and cached functions,!103Improving the compare_entities functions
Pipeline #36400 passed with warnings
......@@ -267,7 +267,7 @@ def compare_entities(old_entity: Entity, new_entity: Entity,
continue
if ((old_entity_attr_exists != new_entity_attr_exists)
or (oldattr != newattr)):
or (oldattr != newattr)):
if old_entity_attr_exists:
olddiff[attr] = oldattr
......@@ -278,8 +278,16 @@ def compare_entities(old_entity: Entity, new_entity: Entity,
# properties
for prop in old_entity.properties:
# Find the corresponding property in new_entity:
matching = [p for p in new_entity.properties if p.name == prop.name]
# This is needed for checking for multi properties in old_entity:
# TODO: is there a better way?
matching_old = [p for p in old_entity.properties if p.name == prop.name]
if len(matching_old) != 1:
raise NotImplementedError(
"Comparison not implemented for multi-properties.")
if len(matching) == 0:
olddiff["properties"][prop.name] = {}
elif len(matching) == 1:
......
......@@ -261,7 +261,75 @@ def test_compare_properties():
with pytest.raises(NotImplementedError, match=".*abstract properties.*"):
compare_entities(p1, p2)
def test_multi_properties():
# This test is rather lengthy, because:
# - previously the check for multi-properties was only implemented for the
# new_entity paramter of the function.
# - Because of the API of pylib the behavior depended on the order of adding the
# properties to the records.
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=2)
r1.add_property("test", value=4)
r2.add_property("test", value=2)
# That would be expected:
# assert not empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=4)
r1.add_property("test", value=2)
r2.add_property("test", value=2)
# That would be expected:
# assert not empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=4)
r1.add_property("test", value=2)
r2.add_property("test", value=2)
r2.add_property("test", value=4)
# That would be expected:
# assert empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=4)
r2.add_property("test", value=4)
r2.add_property("test", value=2)
# That would be expected:
# assert not empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=4)
r2.add_property("test", value=2)
r2.add_property("test", value=4)
# That would be expected:
# assert not empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
r1 = db.Record()
r2 = db.Record()
r1.add_property("test", value=4)
r1.add_property("test", value=2)
r2.add_property("test", value=2)
r2.add_property("test", value=5)
# That would be expected:
# assert empty_diff(r1, r2)
with pytest.raises(NotImplementedError, match=".*multi-properties.*"):
compare_entities(r1, r2)
def test_copy_entities():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment