From 025f61f1928d614dfceaf8ed3952310df4fcde24 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Mon, 7 Feb 2022 16:38:32 +0100
Subject: [PATCH] WIP: pipeline

---
 tests/test_issues_server.py | 81 ++++++++++++++++++++++++++++++++++++-
 tests/test_permissions.py   | 32 ++++++++-------
 tests/test_query.py         |  7 ++--
 3 files changed, 101 insertions(+), 19 deletions(-)

diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py
index a05a1ca..7f14550 100644
--- a/tests/test_issues_server.py
+++ b/tests/test_issues_server.py
@@ -49,7 +49,6 @@ def setup():
 def teardown():
     """Deleting entities again."""
     setup_module()
-    pass
 
 
 # ########################### Issue tests start here #####################
@@ -463,3 +462,83 @@ def test_issue_183():
                     value="2015-05-05T20:15").insert()
     assert cm.value.errors[0].msg == ("Cannot parse value to datetime format "
                                       "(yyyy-mm-dd'T'hh:mm:ss[.fffffffff][TimeZone]).")
+
+
+@pytest.mark.xfail(reason="fix https://gitlab.com/caosdb/caosdb-server/-/issues/130")
+def test_issue_130():
+    """Test select queries where names contain spaces
+
+    https://gitlab.com/caosdb/caosdb-server/-/issues/130
+
+    However, this bug was actually about quotation marks
+    """
+    db.RecordType(name="TestRT_A").insert()
+    r1 = db.Record("ReferencedRecord").add_parent("TestRT_A").insert()
+    p1 = db.Property(name="TestWrapper", datatype="TestRT_A").insert()
+    p2 = db.Property(name="TestWrapper With Spaces", datatype="TestRT_A").insert()
+    db.RecordType(name="TestRT_B"
+                 ).add_property(name="TestWrapper"
+                               ).add_property("TestWrapper With Spaces"
+                                             ).insert()
+    db.Record().add_parent("TestRT_B"
+                          ).add_property("TestWrapper", value=r1
+                                        ).add_property("TestWrapper With Spaces",
+                                                       value=r1
+                                                      ).insert()
+
+
+    query = "SELECT TestWrapper FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper"))
+    assert row == [(r1.id,)]
+
+    query = "SELECT TestWrapper FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "id"))
+    assert row == [(p1.id,)]
+
+    query = "SELECT 'TestWrapper' FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "id"))
+    assert row == [(r1.id,)] #FAILS
+
+    query = "SELECT TestWrapper FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "name"))
+    assert row == [("TestWrapper",)]
+
+    query = "SELECT TestWrapper.name FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "name"))
+    assert row == [("ReferencedRecord",)]
+
+    query = "SELECT 'TestWrapper.name' FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "name"))
+    assert row == [("ReferencedRecord",)] #FAILS
+
+    query = "SELECT 'TestWrapper'.name FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper", "name"))
+    assert row == [("ReferencedRecord",)] #FAILS
+
+    query = "SELECT TestWrapper With Spaces FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces"))
+    assert row == [(r1.id,)]
+
+    query = "SELECT TestWrapper With Spaces FROM RECORD TestRT_B"
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "id"))
+    assert row == [(p2.id,)]
+
+    query = 'SELECT TestWrapper With Spaces FROM RECORD TestRT_B'
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "name"))
+    assert row == [("TestWrapper With Spaces",)]
+
+    query = 'SELECT "TestWrapper With Spaces" FROM RECORD TestRT_B'
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "name"))
+    assert row == [("ReferencedRecord",)] #FAILS
+
+    query = 'SELECT TestWrapper With Spaces.name FROM RECORD TestRT_B'
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "name"))
+    assert row == [("ReferencedRecord",)] #Works!!! This is about the quotation marks
+
+    query = 'SELECT "TestWrapper With Spaces.name" FROM RECORD TestRT_B'
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "name"))
+    assert row == [("ReferencedRecord",)] #FAILS
+
+    query = 'SELECT "TestWrapper With Spaces".name FROM RECORD TestRT_B'
+    row = db.execute_query(query).get_property_values(("TestWrapper With Spaces", "name"))
+    assert row == [("ReferencedRecord",)] #FAILS
diff --git a/tests/test_permissions.py b/tests/test_permissions.py
index 182c4fd..16bb9cf 100644
--- a/tests/test_permissions.py
+++ b/tests/test_permissions.py
@@ -45,7 +45,9 @@ easy_pw = "1234"
 
 
 def setup_module():
-    switch_to_admin_user()
+    d = db.execute_query("FIND *")
+    if len(d) > 0:
+        d.delete()
     insert_test_user()
 
 
@@ -62,6 +64,9 @@ def teardown_module():
         os.remove("test2.dat")
     except BaseException:
         pass
+    d = db.execute_query("FIND *")
+    if len(d) > 0:
+        d.delete()
 
 
 @mark.skip
@@ -486,13 +491,12 @@ def test_update_role():
 
 
 def test_update_move_file():
-    upload_file = open("test.dat", "w")
-    upload_file.write("hello world\n")
-    upload_file.close()
+    with open("test.dat", "w") as upload_file:
+        upload_file.write("hello world\n")
 
     f = db.File(
         name="TestFile",
-        path="/permissiontestfiles/test.dat",
+        path="/testfiles/permissiontestfiles/test.dat",
         file="test.dat").insert()
     assert f.is_valid()
 
@@ -500,22 +504,22 @@ def test_update_move_file():
     grant_permission(f, "UPDATE:FILE:MOVE")
 
     '''SUCCESS'''
-    f.path = "/otherpermissiontestfiles/test.dat"
+    f.path = "/testfiles/otherpermissiontestfiles/test.dat"
     f.update()
 
     f2 = db.execute_query("FIND TestFile", unique=True)
-    assert_equal(f2.path, "/otherpermissiontestfiles/test.dat")
+    assert_equal(f2.path, "/testfiles/otherpermissiontestfiles/test.dat")
 
     deny_permission(f, "UPDATE:FILE:MOVE")
 
     '''FAILURE'''
-    f.path = "/againotherpermissiontestfiles/test.dat"
+    f.path = "/testfiles/againotherpermissiontestfiles/test.dat"
     with raises(db.TransactionError) as te:
         f.update()
     assert te.value.has_error(db.AuthorizationError)
 
     f2 = db.execute_query("FIND TestFile", unique=True)
-    assert f2.path == "/otherpermissiontestfiles/test.dat"
+    assert f2.path == "/testfiles/otherpermissiontestfiles/test.dat"
 
 
 def test_update_add_file():
@@ -529,7 +533,7 @@ def test_update_add_file():
     grant_permission(f, "RETRIEVE:ENTITY")
     '''FAILURE'''
 
-    f.path = "/permissiontestfiles/newtest.dat"
+    f.path = "/testfiles/permissiontestfiles/newtest.dat"
     f.file = upload_file
     with raises(db.TransactionError) as te:
         f.update()
@@ -542,13 +546,13 @@ def test_update_add_file():
     grant_permission(f, "UPDATE:FILE:ADD")
 
     f2 = db.execute_query("FIND TestFile", unique=True)
-    f2.path = "/permissiontestfiles/newtest.dat"
+    f2.path = "/testfiles/permissiontestfiles/newtest.dat"
     f2.file = upload_file
     f2.update()
     assert f2.is_valid()
 
     f2 = db.execute_query("FIND TestFile", unique=True)
-    assert_equal(f2.path, "/permissiontestfiles/newtest.dat")
+    assert_equal(f2.path, "/testfiles/permissiontestfiles/newtest.dat")
 
 
 def test_update_change_file():
@@ -563,7 +567,7 @@ def test_update_change_file():
     f = db.File(
         name="TestFile",
         file=upload_file,
-        path="permissiontestfiles/test.dat").insert()
+        path="testfiles/permissiontestfiles/test.dat").insert()
     assert f.is_valid()
     grant_permission(f, "RETRIEVE:ENTITY")
     grant_permission(f, "RETRIEVE:FILE")
@@ -925,7 +929,7 @@ def test_download_file():
     f = db.File(
         name="TestFile",
         file=upload_file,
-        path="permissiontestfiles/test.dat").insert()
+        path="testfiles/permissiontestfiles/test.dat").insert()
     assert f.is_valid()
 
     '''FAILURE'''
diff --git a/tests/test_query.py b/tests/test_query.py
index 92639f2..ad3fc94 100644
--- a/tests/test_query.py
+++ b/tests/test_query.py
@@ -45,7 +45,7 @@ def setup_module():
 
 def setup():
     try:
-        db.execute_query("FIND Test*").delete()
+        db.execute_query("FIND *").delete()
     except Exception as e:
         print(e)
 
@@ -633,9 +633,8 @@ def store_file(path, name=None, f=None):
 
 def test_stored_at_wildcards():
 
-    upload_file = open("test.dat", "w")
-    upload_file.write("hello world\n")
-    upload_file.close()
+    with open("test.dat", "w") as upload_file:
+        upload_file.write("hello world\n")
 
     file1 = store_file("test1.dat", f=upload_file)
 
-- 
GitLab