Skip to content
Snippets Groups Projects
Select Git revision
  • 10b02c157a40d6c11bc6a356bed0b55441a8a7c0
  • main default protected
  • dev
  • f-unmod
  • f-checkidentical
  • f-simple-breakpoint
  • f-new-debug-tree
  • f-existing-file-id
  • f-no-ident
  • f-collect-problems
  • f-refactor-debug-tree
  • v0.13.0
  • v0.12.0
  • v0.11.0
  • v0.10.1
  • v0.10.0
  • v0.9.1
  • v0.9.0
  • v0.8.0
  • v0.7.1
  • v0.7.0
  • v0.6.0
  • v0.5.0
  • v0.4.0
  • v0.3.0
  • v0.2.0
  • v0.1.0
27 results

test_file_identifiables.py

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)