Spaces:
Sleeping
Sleeping
File size: 3,381 Bytes
41fae03 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | """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
|