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