diff --git a/CHANGELOG.md b/CHANGELOG.md index c997d3e3d77a949be42440117a4fcba538de7926..6e8a418d4e00e86fd8654296c772fdd7456db688 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Tests for caosdb-server#154 * Tests for caosdb-server#217 * Tests for caosdb-pylib#61 +* Test for [caosdb-server#136](https://gitlab.com/caosdb/caosdb-server/-/issues/136) ### Changed (for changes in existing functionality) @@ -62,4 +63,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Tests for name queries. [caosdb-server#51](https://gitlab.com/caosdb/caosdb-server/-/issues/51) ### Security (in case of vulnerabilities) - diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index a48f5ce31fa9ad71a248e1eed5f24223d7a99eb3..daa874fb217f1ab9ea49477c74a9abcb3f9a5ecc 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -713,7 +713,8 @@ def test_134_1(): """ p_lng = db.Property(name="longitude", datatype=db.DOUBLE).insert() p_lat = db.Property(name="latitude", datatype=db.DOUBLE).insert() - rt_ev = db.RecordType(name="Event").add_property(p_lng).add_property(p_lat).insert() + rt_ev = db.RecordType(name="Event").add_property( + p_lng).add_property(p_lat).insert() p_ev = db.Property(name="events", datatype=db.LIST(rt_ev)).insert() rt_ds = db.RecordType(name="DataSet").add_property(p_ev).insert() @@ -724,14 +725,17 @@ def test_134_1(): 0.2).add_property("latitude", 0.2).insert() - r_ds = db.Record().add_parent("DataSet").add_property("events", value=[r_ev_1, r_ev_2]).insert() + r_ds = db.Record().add_parent("DataSet").add_property( + "events", value=[r_ev_1, r_ev_2]).insert() result = db.execute_query("SELECT events.latitude FROM RECORD DataSet", unique=True) print(result) assert len(result.get_property("events").value) == 2 - assert result.get_property("events").value[0].get_property("latitude").value == 0.1 - assert result.get_property("events").value[1].get_property("latitude").value == 0.2 + assert result.get_property("events").value[0].get_property( + "latitude").value == 0.1 + assert result.get_property("events").value[1].get_property( + "latitude").value == 0.2 def test_134_2(): @@ -741,7 +745,8 @@ def test_134_2(): """ p_lng = db.Property(name="longitude", datatype=db.DOUBLE).insert() p_lat = db.Property(name="latitude", datatype=db.DOUBLE).insert() - rt_ev = db.RecordType(name="Event").add_property(p_lng).add_property(p_lat).insert() + rt_ev = db.RecordType(name="Event").add_property( + p_lng).add_property(p_lat).insert() rt_ds = db.RecordType(name="DataSet").add_property(name="Event", datatype=db.LIST(rt_ev)).insert() @@ -758,5 +763,40 @@ def test_134_2(): result = db.execute_query("SELECT Event.latitude FROM RECORD DataSet", unique=True) assert len(result.get_property("Event").value) == 2 - assert result.get_property("Event").value[0].get_property("latitude").value == 0.1 - assert result.get_property("Event").value[1].get_property("latitude").value == 0.2 + assert result.get_property("Event").value[0].get_property( + "latitude").value == 0.1 + assert result.get_property("Event").value[1].get_property( + "latitude").value == 0.2 + + +def test_136(): + """Faulty creation of a multi-property when updating a non-list property + with a list value. + + https://gitlab.com/caosdb/caosdb-server/-/issues/136 + + """ + # @author Florian Spreckelsen + # @date 2022-05-23 + + # Insert data model: + rt = db.RecordType(name="TestBug") + p = db.Property(name="TestBugProperty", datatype=db.INTEGER) + db.Container().extend([rt, p]).insert() + + # Insert test record: + r = db.Record(name="TestRecord") + r.add_parent(rt) + r.add_property(p, value=18) + r.insert() + + # Update the record: + test_r = db.Record(id=r.id).retrieve() + test_r.add_parent(rt) + test_r.add_property(id=p.id, value=[18, 12]) + with pytest.raises(db.TransactionError) as err: + test_r.update() + + te = err.value + assert te.has_error(db.UnqualifiedPropertiesError) + assert "Cannot parse value to integer" in str(te)