XmLLM / tests /unit /test_provenance.py
Claude
Code quality: fix all ruff warnings, add CI/CD, improve test coverage
bbbfba8 unverified
Raw
History Blame Contribute Delete
3.38 kB
"""Tests for the Provenance model."""
from __future__ import annotations
import pytest
from pydantic import ValidationError
from src.app.domain.models import EvidenceType, Provenance
class TestProvenance:
def test_valid_native(self) -> None:
p = Provenance(
provider="paddleocr-vl",
adapter="adapter.paddle.v1",
source_ref="$.pages[0].blocks[0]",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
assert p.derived_from == []
def test_valid_derived(self) -> None:
p = Provenance(
provider="enricher.polygon_to_bbox",
adapter="enricher.v1",
source_ref="tl1",
evidence_type=EvidenceType.DERIVED,
derived_from=["tl1"],
)
assert p.derived_from == ["tl1"]
def test_native_with_derived_from_rejected(self) -> None:
with pytest.raises(ValidationError, match="provider_native.*empty derived_from"):
Provenance(
provider="paddle",
adapter="adapter.v1",
source_ref="$.x",
evidence_type=EvidenceType.PROVIDER_NATIVE,
derived_from=["some_id"],
)
def test_empty_provider_rejected(self) -> None:
with pytest.raises(ValidationError):
Provenance(
provider="",
adapter="adapter.v1",
source_ref="$.x",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
def test_empty_adapter_rejected(self) -> None:
with pytest.raises(ValidationError):
Provenance(
provider="paddle",
adapter="",
source_ref="$.x",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
def test_empty_source_ref_rejected(self) -> None:
with pytest.raises(ValidationError):
Provenance(
provider="paddle",
adapter="adapter.v1",
source_ref="",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
def test_repaired_evidence_type(self) -> None:
p = Provenance(
provider="bbox_repair",
adapter="enricher.v1",
source_ref="w1",
evidence_type=EvidenceType.REPAIRED,
derived_from=["w1"],
)
assert p.evidence_type == EvidenceType.REPAIRED
def test_manual_evidence_type(self) -> None:
p = Provenance(
provider="manual",
adapter="manual.v1",
source_ref="user_correction",
evidence_type=EvidenceType.MANUAL,
)
assert p.evidence_type == EvidenceType.MANUAL
def test_frozen(self) -> None:
p = Provenance(
provider="paddle",
adapter="v1",
source_ref="$.x",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
with pytest.raises(ValidationError):
p.provider = "other" # type: ignore[misc]
def test_json_roundtrip(self) -> None:
p = Provenance(
provider="paddleocr-vl",
adapter="adapter.paddle.v1",
source_ref="$.pages[0]",
evidence_type=EvidenceType.PROVIDER_NATIVE,
)
data = p.model_dump()
p2 = Provenance.model_validate(data)
assert p == p2