From fbc499d3e65fe821db8212b60d44974c230bdc56 Mon Sep 17 00:00:00 2001
From: fspreck <f.spreckelsen@indiscale.com>
Date: Tue, 19 Apr 2022 18:30:10 +0200
Subject: [PATCH] TST: Add integration test for #40

---
 integrationtests/test_assure_functions.py | 51 +++++++++++++++++------
 1 file changed, 38 insertions(+), 13 deletions(-)

diff --git a/integrationtests/test_assure_functions.py b/integrationtests/test_assure_functions.py
index 9f4e387d..88e34a23 100644
--- a/integrationtests/test_assure_functions.py
+++ b/integrationtests/test_assure_functions.py
@@ -1,26 +1,25 @@
 #!/usr/bin/env python
 # encoding: utf-8
 #
-# ** header v3.0
 # This file is a part of the CaosDB Project.
 #
+# Copyright (C) 2022 IndiScale GmbH <info@indiscale.com>
 # Copyright (C) 2021 University Medical Center Göttingen, Institute for Medical Informatics
 # Copyright (C) 2021 Florian Spreckelsen <florian.spreckelsen@med.uni-goettingen.de>
+# Copyright (C) 2021 Florian Spreckelsen <f.spreckelsen@indiscale.com>
 #
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Affero General Public License for more details.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+# details.
 #
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-# ** end header
+# You should have received a copy of the GNU Affero General Public License along
+# with this program. If not, see <https://www.gnu.org/licenses/>.
 """Integration tests for the `assure_...` functions from
 `caosadvancedtools.cfood`. They mainly test the in-place updates when
 no `to_be_updated` is specified.
@@ -90,3 +89,29 @@ def test_assure_list_in_place():
     assert len(rec2.get_property(ref_rt.name).value) == 3
     assert ref_rec2.id in rec2.get_property(ref_rt.name).value
     assert ref_rec3.id in rec2.get_property(ref_rt.name).value
+
+
+def test_add_to_empty_list():
+    """See https://gitlab.com/caosdb/caosdb-advanced-user-tools/-/issues/40."""
+    # @author Florian Spreckelsen
+    # @date 2022-04-19
+    referenced_rt = db.RecordType(name="TestReferencedType").insert()
+    list_prop = db.Property(name="TestListProp",
+                            datatype=db.LIST(referenced_rt)).insert()
+    referencing_rt = db.RecordType(
+        name="TestReferencingType").add_property(list_prop).insert()
+
+    db.Record(name="TestReferencedRecord").add_parent(referenced_rt).insert()
+    db.Record(name="TestReferencingRecord").add_parent(
+        referencing_rt).add_property(list_prop, value=[]).insert()
+
+    referenced_rec = db.execute_query("FIND TestReferencedRecord", unique=True)
+    referencing_rec = db.execute_query(
+        "FIND TestReferencingRecord", unique=True)
+
+    assure_object_is_in_list(referenced_rec, referencing_rec, list_prop.name)
+
+    referencing_rec = db.execute_query(
+        "FIND TestReferencingRecord", unique=True)
+    assert referencing_rec.get_property(list_prop.name).value == [
+        referenced_rec.id]
-- 
GitLab