From f2a24be0cdb6387b0ca3e1dff2e09ddf05a9ebbb Mon Sep 17 00:00:00 2001 From: Alexander Schlemmer <alexander@mail-schlemmer.de> Date: Tue, 1 Feb 2022 11:15:13 +0100 Subject: [PATCH] TST: added unit test for file identifiables --- src/newcrawler/identifiable_adapters.py | 7 +++- unittests/test_file_identifiables.py | 47 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 unittests/test_file_identifiables.py diff --git a/src/newcrawler/identifiable_adapters.py b/src/newcrawler/identifiable_adapters.py index f5cc2a3a..4896226c 100644 --- a/src/newcrawler/identifiable_adapters.py +++ b/src/newcrawler/identifiable_adapters.py @@ -214,6 +214,8 @@ class IdentifiableAdapter(metaclass=ABCMeta): This function will return None if there is either no identifiable registered or no corresponding identified record in the database for a given record. + + Warning: this function is not expected to work correctly for file identifiables. """ pass @@ -253,6 +255,9 @@ class LocalStorageIdentifiableAdapter(IdentifiableAdapter): def get_records(self): return self._records + def get_file(self, identifiable: db.File): + raise NotImplementedError() + def store_state(self, filename): with open(filename, "w") as f: f.write(db.common.utils.xml2str(db.Container().extend(self._records).to_xml())) @@ -331,7 +336,7 @@ class LocalStorageIdentifiableAdapter(IdentifiableAdapter): return False return True - def retrieve_identified_record(self, identifiable: db.Record): + def retrieve_identified_record_for_identifiable(self, identifiable: db.Record): candidates = [] for record in self._records: if self.check_record(record, identifiable): diff --git a/unittests/test_file_identifiables.py b/unittests/test_file_identifiables.py new file mode 100644 index 00000000..4f85b01c --- /dev/null +++ b/unittests/test_file_identifiables.py @@ -0,0 +1,47 @@ +#!/bin/python +# Tests for file identifiables +# A. Schlemmer, 06/2021 + +import caosdb as db + +import pytest +from pytest import raises + +from newcrawler.identifiable_adapters import LocalStorageIdentifiableAdapter + + +def test_file_identifiable(): + ident = LocalStorageIdentifiableAdapter() + file_obj = db.File() + + identifiable = ident.get_identifiable(file_obj) + identifiable2 = ident.get_identifiable_for_file(file_obj) + + # these are two different objects: + assert identifiable != identifiable2 + assert file_obj != identifiable + # ... but the path is equal: + assert identifiable.path == identifiable2.path + # ... and very boring: + assert identifiable.path is None + + # TODO: test for corresponding retrieval "get_file" + + # Let's make it more interesting: + file_obj.path = "/test/bla/bla.txt" + file_obj._checksum = "abcd" + identifiable = ident.get_identifiable(file_obj) + assert file_obj != identifiable + assert file_obj.path == identifiable.path + # Checksum is not part of the identifiable: + assert file_obj.checksum != identifiable.checksum + + # This is the wrong method, so it should definitely return None: + identified_file = ident.retrieve_identified_record_for_identifiable(identifiable) + assert identified_file is None + # This is the correct method to use: + identified_file = ident.get_file(identifiable) + # or directly using: + identified_file2 = ident.get_file(file_obj) + + -- GitLab