Skip to content
Snippets Groups Projects
Select Git revision
  • 96856cde89517e5b00905dfd28f6cd0b619df2f3
  • main default protected
  • dev protected
  • f-string-ids
  • f-empty
  • caosdb-cpplib-v0.2.2
  • caosdb-server-v0.9.0
  • caosdb-cpplib-v0.2.1
  • caosdb-cpplib-v0.2.0
  • caosdb-server-v0.8.0
  • caosdb-cpplib-v0.1.2
  • caosdb-server-v0.7.3
  • caosdb-cpplib-v0.1
  • caosdb-server-v0.7.2
14 results

test_async.cpp

Blame
  • 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)