Skip to content
Snippets Groups Projects
Select Git revision
  • 3b739b6811642f2bd1f6009a0d3284352961db02
  • main default protected
  • f-sss4grpc
  • dev
  • 108-implement-rpc-call-for-server-side-scripting
  • f-windows-conan-create
  • f-to-string
  • f-update-requirements
  • f-related-projects
  • f-role
  • f-remote-path
  • f-rel-path
  • f-consol-message
  • v0.3.0
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.2
  • v0.1.1
  • v0.1
  • v0.0.19
  • v0.0.18
  • v0.0.16
  • v0.0.15
  • v0.0.10
  • v0.0.9
  • v0.0.8
  • v0.0.7
  • v0.0.6
  • v0.0.5
  • v0.0.4
  • v0.0.3
  • v0.0.2
33 results

configuration.h

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    test_file_identifiables.py 2.41 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 caoscrawler.sync_graph import SyncNode
    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(SyncNode(db.File(), None), [])
    
        fp = "/test/bla/bla.txt"
        file_obj = db.File(path=fp)
        identifiable = ident.get_identifiable(SyncNode(file_obj, None), [])
    
        # 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)