Select Git revision
test_file_identifiables.py
-
Henrik tom Wörden authored
- remove rfp - consolidate dircheckstr - remove usage of relatively large dataset that is controled by LocalStorageIdentifiableAdapter for unittests
Henrik tom Wörden authored- remove rfp - consolidate dircheckstr - remove usage of relatively large dataset that is controled by LocalStorageIdentifiableAdapter for unittests
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_file_identifiables.py 2.50 KiB
#!/bin/python
# Tests for file identifiables
# A. Schlemmer, 06/2021
import caosdb as db
import pytest
from pytest import raises
from unittest.mock import patch, Mock
from caoscrawler.identifiable_adapters import LocalStorageIdentifiableAdapter
from caosdb.cached import cache_clear
from caoscrawler.identifiable import Identifiable
from caosdb.exceptions import EmptyUniqueQueryError
@pytest.fixture(autouse=True)
def clear_cache():
cache_clear()
def mock_get_entity_by(eid=None, name=None, path=None):
if eid is not None:
candidates = [el for el in EXAMPLE_SERVER_STATE if el.id == eid]
if len(candidates) > 0:
return candidates[0]
else:
raise EmptyUniqueQueryError("")
raise EmptyUniqueQueryError("")
@patch("caoscrawler.identifiable_adapters.cached_get_entity_by",
new=Mock(side_effect=mock_get_entity_by))
def test_file_identifiable():
ident = LocalStorageIdentifiableAdapter()
# Without a path there is no identifying information
with raises(ValueError):
ident.get_identifiable(db.File(), [])
fp = "/test/bla/bla.txt"
file_obj = db.File(path=fp)
identifiable = ident.get_identifiable(file_obj)
# the path is copied to the identifiable
assert fp == identifiable.path
assert isinstance(identifiable, Identifiable)
# __eq__ function is only defined for Identifiable objects
with raises(ValueError):
file_obj != identifiable
# since the path does not exist in the data in ident, the follwoing functions return None
with raises(EmptyUniqueQueryError):
ident.retrieve_identified_record_for_record(file_obj)
assert ident.get_file(identifiable) is None
# Try again with actual files in the store:
records = ident.get_records()
test_record_wrong_path = db.File(path="/bla/bla/test.txt")
test_record_correct_path = db.File(path="/test/bla/bla.txt")
test_record_alsocorrect_path = db.File(path="/test/bla/bla.txt")
records.append(test_record_wrong_path)
# Now, there is a file, but still wrong path -> result is still None
identified_file = ident.get_file(file_obj)
assert identified_file is None
records.append(test_record_correct_path)
# now there is a match
identified_file = ident.get_file(file_obj)
assert identified_file is not None
assert identified_file.path == file_obj.path
with raises(RuntimeError, match=".*unambigiously.*"):
records.append(test_record_alsocorrect_path)
identified_file = ident.get_file(file_obj)