Source code for esrf_pathlib.tests.internals.test_concept

from typing import Union

import pytest

from ..._schemas import errors
from ..._schemas.fields.concept import PathConcept
from ..._schemas.identifier import SchemaIdentifier


[docs] def test_init_and_properties(): concept = PathConcept("test", "A test concept", SchemaIdentifier(test=1), r"[a-z]+") assert concept.name == "test" assert concept.description == "A test concept" assert concept.schema_identifier == SchemaIdentifier(test=1) assert concept.regex == r"[a-z]+"
[docs] def test_deserialize_success(): concept = PathConcept( "test", "A test concept", SchemaIdentifier(test=1), r"\d+deg", deserializer=int ) assert concept.deserialize("42") == 42
[docs] def test_serialize_success(): def _serializer_tomo_angle(py_value: Union[str, int, float]) -> str: return f"{py_value}deg" concept = PathConcept( "test", "A test concept", SchemaIdentifier(test=1), r"\d+deg", serializer=_serializer_tomo_angle, ) assert concept.serialize(10) == "10deg"
[docs] def test_deserialize_none_returns_none(): concept = PathConcept("test", "A test concept", SchemaIdentifier(test=1), r"\w+") assert concept.deserialize(None) is None
[docs] def test_serialize_none_wildcard(): concept = PathConcept("test", "A test concept", SchemaIdentifier(test=1), r"\w+") assert concept.serialize(None, raise_on_missing=False) == "*"
[docs] def test_serialize_none_raises(): concept = PathConcept("test", "A test concept", SchemaIdentifier(test=1), r"\w+") with pytest.raises(errors.PathConceptWithoutValue): concept.serialize(None)
[docs] def test_serialize_failure(): def bad_serializer(_): raise RuntimeError("nope") concept = PathConcept( "test", "A test concept", SchemaIdentifier(test=1), r"\w+", serializer=bad_serializer, ) with pytest.raises(errors.PathConceptMatchError) as exc: concept.serialize("bad") assert "serialization failed" in str(exc.value)
[docs] def test_deserialize_failure(): def bad_deserializer(_): raise RuntimeError("boom") concept = PathConcept( "test", "A test concept", SchemaIdentifier(test=1), r"\w+", deserializer=bad_deserializer, ) with pytest.raises(errors.PathConceptMatchError) as exc: concept.deserialize("bad") assert "deserialization failed" in str(exc.value)