Skip to content
Snippets Groups Projects
Select Git revision
  • c8823ef318285d0abd6d245b2a1fea6d51e2f43c
  • main default protected
  • dev protected
  • f-fix-accent-sensitivity
  • f-filesystem-import
  • f-update-acl
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-string-ids
  • f-filesystem-main
  • f-multipart-encoding
  • f-trigger-advanced-user-tools
  • f-real-rename-test-pylibsolo2
  • f-real-rename-test-pylibsolo
  • f-real-rename-test
  • f-linkahead-rename
  • f-reference-record
  • f-xml-serialization
  • f-xfail-server-181
  • linkahead-pylib-v0.18.0
  • linkahead-control-v0.16.0
  • linkahead-pylib-v0.17.0
  • linkahead-mariadbbackend-v8.0.0
  • linkahead-server-v0.13.0
  • caosdb-pylib-v0.15.0
  • caosdb-pylib-v0.14.0
  • caosdb-pylib-v0.13.2
  • caosdb-server-v0.12.1
  • caosdb-pylib-v0.13.1
  • caosdb-pylib-v0.12.0
  • caosdb-server-v0.10.0
  • caosdb-pylib-v0.11.1
  • caosdb-pylib-v0.11.0
  • caosdb-server-v0.9.0
  • caosdb-pylib-v0.10.0
  • caosdb-server-v0.8.1
  • caosdb-pylib-v0.8.0
  • caosdb-server-v0.8.0
  • caosdb-pylib-v0.7.2
41 results

test_server_side_scripting.py

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)