-
Henrik tom Wörden authoredHenrik tom Wörden authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_file_identifiables.py 2.33 KiB
#!/bin/python
# Tests for file identifiables
# A. Schlemmer, 06/2021
from unittest.mock import Mock, patch
import caosdb as db
import pytest
from caoscrawler.identifiable import Identifiable
from caoscrawler.identifiable_adapters import LocalStorageIdentifiableAdapter
from caosdb.cached import cache_clear
from caosdb.exceptions import EmptyUniqueQueryError
from pytest import raises
from test_crawler import mock_get_entity_by
@pytest.fixture(autouse=True)
def clear_cache():
cache_clear()
@patch("caoscrawler.identifiable_adapters.get_children_of_rt",
new=Mock(side_effect=id))
@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)