#!/bin/python
# Tests for file identifiables
# A. Schlemmer, 06/2021

import caosdb as db

import pytest
from pytest import raises

from newcrawler.identifiable_adapters import LocalStorageIdentifiableAdapter


def test_file_identifiable():
    ident = LocalStorageIdentifiableAdapter()
    file_obj = db.File()

    identifiable = ident.get_identifiable(file_obj)
    identifiable2 = ident.get_identifiable_for_file(file_obj)

    # these are two different objects:
    assert identifiable != identifiable2
    assert file_obj != identifiable
    # ... but the path is equal:
    assert identifiable.path == identifiable2.path
    # ... and very boring:
    assert identifiable.path is None

    # TODO: test for corresponding retrieval "get_file"

    # Let's make it more interesting:
    file_obj.path = "/test/bla/bla.txt"
    file_obj._checksum = "abcd"
    identifiable = ident.get_identifiable(file_obj)
    assert file_obj != identifiable
    assert file_obj.path == identifiable.path
    # Checksum is not part of the identifiable:
    assert file_obj.checksum != identifiable.checksum

    # This is the wrong method, so it should definitely return None:
    identified_file = ident.retrieve_identified_record_for_identifiable(identifiable)
    assert identified_file is None
    # This is the correct method to use:
    identified_file = ident.get_file(identifiable)
    # or directly using:
    identified_file2 = ident.get_file(file_obj)