diff --git a/unittests/simulated_server_data.py b/unittests/simulated_server_data.py new file mode 100644 index 0000000000000000000000000000000000000000..6a523dbb06397b380510f72502a76cc6bda5f06c --- /dev/null +++ b/unittests/simulated_server_data.py @@ -0,0 +1,24 @@ + +import caosdb as db +data_model = {"person": (db.RecordType(id=10001, name="Person") + .add_property(name="first_name") + .add_property(name="last_name")), + "measurement": (db.RecordType(id=10002, name="Measurement") + .add_property(name="identifier") + .add_property(name="date") + .add_property(name="project")), + "project": (db.RecordType(id=10003, 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), + } +existing_data = { +} + +full_data = {} +full_data.update(data_model) +full_data.update(existing_data) diff --git a/unittests/test_table_converter.py b/unittests/test_table_converter.py index eecb674eae9db4410f254b157128eb64d5d66880..85255d3efd34dc666d5d2e97423f33177dea6732 100644 --- a/unittests/test_table_converter.py +++ b/unittests/test_table_converter.py @@ -29,12 +29,12 @@ test the converters module from caoscrawler.converters import Converter from caoscrawler.stores import GeneralStore from caoscrawler.converters import (ConverterValidationError, - DictConverter, XLSXTableConverter, CSVTableConverter) + DictConverter, XLSXTableConverter, CSVTableConverter) from caoscrawler.structure_elements import Directory from caoscrawler.structure_elements import (File, DictTextElement, - DictListElement, DictElement, - DictBooleanElement, DictDictElement, - DictIntegerElement, DictFloatElement) + DictListElement, DictElement, + DictBooleanElement, DictDictElement, + DictIntegerElement, DictFloatElement) from os.path import join, dirname, basename @@ -103,7 +103,10 @@ def crawler(): def test_convert_table(converter_registry): - for file_ext in ["xlsx", "ods", "csv", "tsv"]: + extentions = ["xlsx", "csv", "tsv"] + if importlib.util.find_spec("odf") is not None: + extentions.append("ods") + for file_ext in extentions: def_opt = {"skiprows": ["1", "2"], "header": 0} if file_ext == "tsv": def_opt["sep"] = "\t" diff --git a/unittests/test_tool.py b/unittests/test_tool.py index cf86cc47f48ec4fcad55260e9d89480666d16808..fac8b60ac2d8f03322ba331c4d23e8ec69f9e1d4 100755 --- a/unittests/test_tool.py +++ b/unittests/test_tool.py @@ -6,6 +6,7 @@ from caoscrawler.crawl import Crawler, SecurityMode from caoscrawler.structure_elements import File, DictTextElement, DictListElement from caoscrawler.identifiable_adapters import IdentifiableAdapter, LocalStorageIdentifiableAdapter +from simulated_server_data import full_data from functools import partial from copy import deepcopy from unittest.mock import patch @@ -549,10 +550,13 @@ def test_security_mode_trivial(updateCacheMock, insmock, upmock, ident): rfp("scifolder_cfood.yml")) crawler.identifiableAdapter = ident - def find_record(name): - print(name) - return [el for el in ident.get_records() if el.name == name][0] - Crawler._get_entity_by_name = find_record + def mock_get_entity_by_name(name): + candidates = [el for el in full_data.values() if el.name.lower() == name.lower()] + if len(candidates) > 0: + return candidates[0] + else: + return None + Crawler._get_entity_by_name = mock_get_entity_by_name #Crawler._get_entity_by_name = lambda x: db.RecordType(id=1111, name="A") insl, updl = crawler.synchronize(commit_changes=True) assert crawler.run_id is not None @@ -570,29 +574,13 @@ def test_security_mode_forbidden(updateCacheMock, insmock, upmock, ident): rfp("scifolder_cfood.yml")) crawler.identifiableAdapter = ident - def find_record(name): - name = name.lower() - state = {"person": (db.RecordType(id=10001) - .add_parent(name="Person") - .add_property(name="first_name") - .add_property(name="last_name")), - "measurement": (db.RecordType(id=10002) - .add_parent(name="Measurement") - .add_property(name="identifier") - .add_property(name="date") - .add_property(name="project")), - "project": (db.RecordType(id=10003) - .add_parent(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), - } - return state[name] - Crawler._get_entity_by_name = find_record + def mock_get_entity_by_name(name): + candidates = [el for el in full_data.values() if el.name.lower() == name.lower()] + if len(candidates) > 0: + return candidates[0] + else: + return None + Crawler._get_entity_by_name = mock_get_entity_by_name del ident._records[-1] insl, updl = crawler.synchronize(commit_changes=True) assert crawler.run_id is not None @@ -609,30 +597,16 @@ def test_security_mode_forbidden_up(updateCacheMock, insmock, upmock, ident): crawler.crawl_directory(rfp("test_directories", "examples_article"), rfp("scifolder_cfood.yml")) crawler.identifiableAdapter = ident + state = full_data + + def mock_get_entity_by_name(name): + candidates = [el for el in full_data.values() if el.name.lower() == name.lower()] + if len(candidates) > 0: + return candidates[0] + else: + return None + Crawler._get_entity_by_name = mock_get_entity_by_name - def find_record(name): - name = name.lower() - state = {"person": (db.RecordType(id=10001) - .add_parent(name="Person") - .add_property(name="first_name") - .add_property(name="last_name")), - "measurement": (db.RecordType(id=10002) - .add_parent(name="Measurement") - .add_property(name="identifier") - .add_property(name="date") - .add_property(name="project")), - "project": (db.RecordType(id=10003) - .add_parent(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), - } - return state[name] - Crawler._get_entity_by_name = find_record del ident._registered_identifiables["Person"] insl, updl = crawler.synchronize(commit_changes=True) assert crawler.run_id is not None