From c26b10bfa315b2a0eb5721bb4e6b375b9bb5a28f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Fri, 7 Oct 2022 13:24:45 +0200
Subject: [PATCH] FIX: unittest

There is now additional communication with the server that needs to be
mocked.
---
 src/caoscrawler/crawl.py           |  7 ++++++-
 unittests/simulated_server_data.py | 16 ++++++++--------
 unittests/test_tool.py             | 21 +++++++++++++++++++--
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/src/caoscrawler/crawl.py b/src/caoscrawler/crawl.py
index b3195a7a..cf4ffe02 100644
--- a/src/caoscrawler/crawl.py
+++ b/src/caoscrawler/crawl.py
@@ -785,8 +785,9 @@ class Crawler(object):
         """
         Crawler.set_ids_and_datatype_of_parents_and_properties(to_be_updated)
         parent_updates = db.Container()
+
         for record in to_be_updated:
-            old_entity = db.Entity(id=record.id).retrieve()
+            old_entity = Crawler._get_entity_by_id(record.id)
 
             # Check whether the parents have been changed and add them if missing
             # in the old entity:
@@ -819,6 +820,10 @@ class Crawler(object):
     def _get_entity_by_name(name):
         return db.Entity(name=name).retrieve()
 
+    @staticmethod
+    def _get_entity_by_id(id):
+        return db.Entity(id=id).retrieve()
+
     @staticmethod
     def execute_inserts_in_list(to_be_inserted, securityMode, run_id: int = None,
                                 unique_names=True):
diff --git a/unittests/simulated_server_data.py b/unittests/simulated_server_data.py
index 6a523dbb..dd0c6b4e 100644
--- a/unittests/simulated_server_data.py
+++ b/unittests/simulated_server_data.py
@@ -1,20 +1,20 @@
 
 import caosdb as db
-data_model = {"person": (db.RecordType(id=10001, name="Person")
+data_model = {"person": (db.RecordType(id=259, name="Person")
                          .add_property(name="first_name")
                          .add_property(name="last_name")),
-              "measurement": (db.RecordType(id=10002, name="Measurement")
+              "measurement": (db.RecordType(id=278, name="Measurement")
                               .add_property(name="identifier")
                               .add_property(name="date")
                               .add_property(name="project")),
-              "project": (db.RecordType(id=10003, name="Project")
+              "project": (db.RecordType(id=250, name="Project")
                           .add_property(name="date")
                           .add_property(name="identifier")),
-              "first_name": db.Property(name="first_name", datatype=db.TEXT, id=10004),
-              "responsible": db.Property(name="responsible", datatype="Person", id=10005),
-              "last_name": db.Property(name="last_name", datatype=db.TEXT, id=10006),
-              "identifier": db.Property(name="identifier", datatype=db.TEXT, id=10007),
-              "date": db.Property(name="date", datatype=db.DATETIME, id=10008),
+              "first_name": db.Property(name="first_name", datatype=db.TEXT, id=261),
+              "responsible": db.Property(name="responsible", datatype="Person", id=249),
+              "last_name": db.Property(name="last_name", datatype=db.TEXT, id=262),
+              "identifier": db.Property(name="identifier", datatype=db.TEXT, id=248),
+              "date": db.Property(name="date", datatype=db.DATETIME, id=247),
               }
 existing_data = {
 }
diff --git a/unittests/test_tool.py b/unittests/test_tool.py
index a0b8e675..a190efde 100755
--- a/unittests/test_tool.py
+++ b/unittests/test_tool.py
@@ -29,6 +29,12 @@ def rfp(*pathcomponents):
     return join(dirname(__file__), *pathcomponents)
 
 
+ident = LocalStorageIdentifiableAdapter()
+ident.restore_state(rfp("records.xml"))
+full_data.update({el.name: el for el in ident._records if el.name is not None})
+full_data.update({el.id: el for el in ident._records if el.name is None})
+
+
 def dircheckstr(*pathcomponents):
     """
     Return the debug tree identifier for a given path.
@@ -544,12 +550,21 @@ def test_replace_entities_with_ids(crawler):
     assert a.get_property("C").value == [12345, 233324]
 
 
+def mock_get_entity_by_id(id):
+    candidates = [el for el in list(full_data.values()) if el.id == id]
+    if len(candidates) > 0:
+        return candidates[0]
+    else:
+        raise ValueError()
+
+
 def mock_get_entity_by_name(name):
-    candidates = [el for el in full_data.values() if el.name.lower() == name.lower()]
+    candidates = [el for el in full_data.values()
+                  if (el.name is not None and el.name.lower() == name.lower())]
     if len(candidates) > 0:
         return candidates[0]
     else:
-        return None
+        raise ValueError()
 
 
 def prepare_crawler_with_sec_mode(mode, ident):
@@ -587,6 +602,8 @@ def change_non_identifiable_prop(ident):
     del resps.value[-1]
 
 
+@patch("caoscrawler.crawl.Crawler._get_entity_by_id",
+       new=Mock(side_effect=mock_get_entity_by_id))
 @patch("caoscrawler.crawl.Crawler._get_entity_by_name",
        new=Mock(side_effect=mock_get_entity_by_name))
 @patch("caoscrawler.crawl.db.Container.insert")
-- 
GitLab