From 1602ed9139d1699ce6cb59f5dbf46d2263a70dd1 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Tue, 7 May 2024 21:58:01 +0200
Subject: [PATCH] WIP: test for import

---
 tests/test_file.py | 135 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 129 insertions(+), 6 deletions(-)

diff --git a/tests/test_file.py b/tests/test_file.py
index 5869af4..35e4a0b 100644
--- a/tests/test_file.py
+++ b/tests/test_file.py
@@ -421,21 +421,144 @@ def test_import_directoy_recursively():
     c.append(directory)
     c.insert()
 
-    assert len(c) == 2
+    assert len(c) == 3 # testfolder, testfolder/subfolder, testfolder/subfolder/some_data.csv
     for e in c:
         if e.role == "Directory":
-            assert e.path == "testfolder/subfolder"
+            assert e.path == "/testfolder/subfolder" or e.path == "/testfolder"
         else:
             assert e.role == "File"
-            assert e.path == "testfolder/subfolder/some_data.csv"
+            assert e.path == "/testfolder/subfolder/some_data.csv"
 
-    re = db.execute_query("FIND Entity WHICH IS STORED AT /testfolder/subfolder*")
+    re = db.execute_query("FIND Entity WHICH IS STORED AT /testfolder/subfolder**")
+    assert len(re) == 2
     for e in re:
         if e.role == "Directory":
-            assert e.path == "testfolder/subfolder"
+            assert e.path == "/testfolder/subfolder"
         else:
             assert e.role == "File"
-            assert e.path == "testfolder/subfolder/some_data.csv"
+            assert e.path == "/testfolder/subfolder/some_data.csv"
+
+def test_import_directoy_recursively_deep():
+    path = get_config().get("IntegrationTests",
+                            "test_files.test_import_files_in_dir.local")
+    if not path.endswith("/"):
+        path = path[:-1]
+    folders = ["/testfolder" + folder for folder in [
+    "/subfolder1",
+    "/subfolder1/subsubfolder1.1",
+    "/subfolder2",
+    "/subfolder2/subsubfolder2.1",
+    "/subfolder2/subsubfolder2.2",
+    "/subfolder2/subsubfolder2.2/subsubsubfolder2.2.1",
+    "/subfolder3",
+    "/subfolder3/subsubfolder3.1",
+    "/subfolder3/subsubfolder3.2",
+    "/subfolder3/subsubfolder3.2/subsubsubfolder3.2.1",
+    "/subfolder3/subsubfolder3.2/subsubsubfolder3.2.2",
+    "/subfolder3/subsubfolder3.2/subsubsubfolder3.2.2/subsubsubsubfolder3.2.2.1",
+    "/subfolder3/subsubfolder3.3",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.1",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.2",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.2/subsubsubsubfolder3.3.2.1",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.3",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.3/subsubsubsubfolder3.3.3.1",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.3/subsubsubsubfolder3.3.3.2",
+    "/subfolder3/subsubfolder3.3/subsubsubfolder3.3.3/subsubsubsubfolder3.3.3.2/subsubsubsubsubfolder3.3.3.2.1",
+            ]]
+    files = []
+    for folder in folders:
+        os.makedirs(path + folder)
+
+        with open(path + folder + "/some_data1.csv", "w") as test_file1:
+            test_file1.write(f"1: hello {folder}\n")
+            files.append(folder + "/some_data1.csv")
+        with open(path + folder + "/some_data2.csv", "w") as test_file1:
+            test_file1.write(f"2: hello {folder}\n")
+            files.append(folder + "/some_data2.csv")
+    folders.append("/testfolder")
+
+    directory = db.common.models.Directory(recursive_import=True, path="testfolder")
+
+    c = db.Container()
+    c.append(directory)
+    c.insert()
+
+    assert len(c) == 20+20+20+1
+    assert set(folders + files) == set([e.path for e in c])
+
+    re = execute_query("FIND ENTITY WHICH IS STORED AT testfolder**")
+    assert len(re) == 20+20+20+1
+    assert set(folders + files) == set([e.path for e in re])
+
+
+def test_update_import_single_file():
+    path = get_config().get("IntegrationTests",
+                            "test_files.test_import_files_in_dir.local") + "testfolder/"
+
+    os.makedirs(path)
+    os.makedirs(path + "subfolder/")
+    local_file = os.path.join(path, "subfolder", "some_data.csv")
+    with open(local_file, "w") as test_file1:
+        test_file1.write("hello, world\n")
+
+    file_ = db.File(import_file=True,
+                    path="testfolder/subfolder/some_data.csv")
+
+    file_.insert()
+    version = file_.version
+
+    file_.checksum = None
+    file_.size = None
+    re = file_.update(sync=False)
+    assert re.version == version
+    assert re.messages[0].description == "Nothing to be updated."
+
+    # update file on the disc
+    with open(local_file, "w") as test_file1:
+        test_file1.write("hello, othre worlds\n")
+
+    # do a consistency_check
+    c = runCheck(None, "testfolder/subfolder/some_data.csv")
+    assert c.messages["Error",
+                      0][0] == 'CHANGED:SIZE - DEFAULT:testfolder/subfolder/some_data.csv'
+
+    re = file_.update(sync=False)
+    assert re.version != version
+
+    # update file on the disc
+    with open(local_file, "w") as test_file1:
+        test_file1.write("hello, other worlds\n")
+    c = runCheck(None, "testfolder/subfolder/some_data.csv")
+    assert c.messages["Error",
+                      0][0] == 'CHANGED:HASH - DEFAULT:testfolder/subfolder/some_data.csv'
+
+    re = file_.update(sync=False)
+    assert re.version != version
+
+
+def test_update_import_directory_new_children():
+    path = get_config().get("IntegrationTests",
+                            "test_files.test_import_files_in_dir.local") + "testfolder/"
+
+    os.makedirs(path)
+    os.makedirs(path + "subfolder/")
+    with open(path + "subfolder/some_data.csv", "w") as test_file1:
+        test_file1.write("hello, world\n")
+
+    directory = db.common.models.Directory(recursive_import=True, path="testfolder/subfolder/")
+
+    c = db.Container()
+    c.append(directory)
+    c.insert()
+
+    version = directory.version
+
+    with open(path + "subfolder/some_data2.csv", "w") as test_file1:
+        test_file1.write("hello, world2\n")
+
+    re = directory.update(sync=False)
+    print(re)
+    assert re.version != version
 
 
 def test_consistency_file_was_modified_2():
-- 
GitLab