diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 74a627bff7a5f4270418b5190174793425edc075..0651e4930072242524dc955c6ae69ca70b5f877a 100644 --- a/src/caosdb/apiutils.py +++ b/src/caosdb/apiutils.py @@ -387,8 +387,8 @@ def merge_entities(entity_a: Entity, entity_b: Entity, merge_references_with_emp instead. Default is True. force : bool, optional If True, in case `entity_a` and `entity_b` have the same properties, the - values of `entity_b` are sued in the merge. If `False`, a RuntimeError is - raised instead. Default is False. + values of `entity_a` are replaced by those of `entity_b` in the merge. + If `False`, a RuntimeError is raised instead. Default is False. Returns ------- diff --git a/unittests/test_apiutils.py b/unittests/test_apiutils.py index 815288de9d8991267f52a6ebe9ec5f86f177396d..7b22d9956931fff4bded7f4eab813e9b91181997 100644 --- a/unittests/test_apiutils.py +++ b/unittests/test_apiutils.py @@ -479,12 +479,14 @@ def test_force_merge(): assert "Merge conflict" in str(re.value) merge_entities(recA, recB, force=True) - assert recA.name == recB.name + assert "B" == recA.name + # unchanged + assert "B" == recB.name # description overwrite - recA = db.Record(name="A") + recA = db.Record() recA.description = "something" - recB = db.Record(name="B") + recB = db.Record() recB.description = "something else" with pytest.raises(RuntimeError) as re: @@ -492,12 +494,14 @@ def test_force_merge(): assert "Merge conflict" in str(re.value) merge_entities(recA, recB, force=True) - assert recA.description == recB.description + assert recA.description == "something else" + # unchanged + assert recB.description == "something else" # property overwrite - recA = db.Record(name="A") + recA = db.Record() recA.add_property(name="propA", value="something") - recB = db.Record(name="A") + recB = db.Record() recB.add_property(name="propA", value="something else") with pytest.raises(RuntimeError) as re: @@ -505,23 +509,25 @@ def test_force_merge(): assert "Merge conflict" in str(re.value) merge_entities(recA, recB, force=True) - assert recA.get_property("propA").value == recB.get_property("propA").value + assert recA.get_property("propA").value == "something else" + # unchanged + assert recB.get_property("propA").value == "something else" - # don't overwrite a property that's not in recB - recA = db.Record(name="A") + # don't remove a property that's not in recB + recA = db.Record() recA.add_property(name="propA", value="something") recA.add_property(name="propB", value=5.0) - recB = db.Record(name="A") + recB = db.Record() recB.add_property(name="propA", value="something else") merge_entities(recA, recB, force=True) - assert recA.get_property("propA").value == recB.get_property("propA").value + assert recA.get_property("propA").value == "something else" assert recA.get_property("propB").value == 5.0 # also overwrite datatypes ... - rtA = db.RecordType(name="A") + rtA = db.RecordType() rtA.add_property(name="propA", datatype=db.INTEGER) - rtB = db.RecordType(name="B") + rtB = db.RecordType() rtB.add_property(name="propA", datatype=db.TEXT) with pytest.raises(RuntimeError) as re: @@ -529,18 +535,20 @@ def test_force_merge(): assert "Merge conflict" in str(re.value) merge_entities(rtA, rtB, force=True) - assert rtA.get_property( - "propA").datatype == rtB.get_property("propA").datatype + assert rtA.get_property("propA").datatype == db.TEXT + # unchanged + assert rtB.get_property("propA").datatype == db.TEXT # ... and units - recA = db.Record(name="A") + recA = db.Record() recA.add_property(name="propA", value=5, unit="m") - recB = db.Record(name="A") - recB.add_property(name="propA", value=500, unit="cm") + recB = db.Record() + recB.add_property(name="propA", value=5, unit="cm") with pytest.raises(RuntimeError) as re: merge_entities(recA, recB) assert "Merge conflict" in str(re.value) merge_entities(recA, recB, force=True) - assert recA.get_property("propA").value == recB.get_property("propA").value - assert recA.get_property("propA").unit == recB.get_property("propA").unit + assert recA.get_property("propA").unit == "cm" + # unchanged + assert recB.get_property("propA").unit == "cm"