Spaces:
Sleeping
Sleeping
| """Tests for readiness and export eligibility models.""" | |
| from __future__ import annotations | |
| import pytest | |
| from pydantic import ValidationError | |
| from src.app.domain.models import ( | |
| AltoReadiness, | |
| DocumentReadiness, | |
| ExportEligibility, | |
| MissingCapability, | |
| PageXmlReadiness, | |
| ReadinessLevel, | |
| ) | |
| class TestAltoReadiness: | |
| def test_full_no_missing(self) -> None: | |
| r = AltoReadiness(level=ReadinessLevel.FULL) | |
| assert r.missing == [] | |
| def test_partial_with_missing(self) -> None: | |
| r = AltoReadiness( | |
| level=ReadinessLevel.PARTIAL, | |
| missing=[MissingCapability.WORD_GEOMETRY, MissingCapability.CONFIDENCE], | |
| ) | |
| assert len(r.missing) == 2 | |
| def test_none_with_missing(self) -> None: | |
| r = AltoReadiness( | |
| level=ReadinessLevel.NONE, | |
| missing=[MissingCapability.PAGE_DIMENSIONS], | |
| ) | |
| assert r.level == ReadinessLevel.NONE | |
| def test_full_with_missing_rejected(self) -> None: | |
| with pytest.raises(ValidationError, match="full.*missing"): | |
| AltoReadiness( | |
| level=ReadinessLevel.FULL, | |
| missing=[MissingCapability.WORD_GEOMETRY], | |
| ) | |
| def test_none_without_missing_rejected(self) -> None: | |
| with pytest.raises(ValidationError, match="none.*no missing"): | |
| AltoReadiness(level=ReadinessLevel.NONE, missing=[]) | |
| class TestPageXmlReadiness: | |
| def test_full_no_missing(self) -> None: | |
| r = PageXmlReadiness(level=ReadinessLevel.FULL) | |
| assert r.missing == [] | |
| def test_full_with_missing_rejected(self) -> None: | |
| with pytest.raises(ValidationError, match="full.*missing"): | |
| PageXmlReadiness( | |
| level=ReadinessLevel.FULL, | |
| missing=[MissingCapability.LINE_GEOMETRY], | |
| ) | |
| def test_none_without_missing_rejected(self) -> None: | |
| with pytest.raises(ValidationError, match="none.*no missing"): | |
| PageXmlReadiness(level=ReadinessLevel.NONE, missing=[]) | |
| class TestExportEligibility: | |
| def test_defaults_to_none(self) -> None: | |
| e = ExportEligibility() | |
| assert e.alto_export == ReadinessLevel.NONE | |
| assert e.page_export == ReadinessLevel.NONE | |
| assert e.viewer_render == ReadinessLevel.NONE | |
| def test_independent_levels(self) -> None: | |
| e = ExportEligibility( | |
| alto_export=ReadinessLevel.FULL, | |
| page_export=ReadinessLevel.PARTIAL, | |
| viewer_render=ReadinessLevel.DEGRADED, | |
| ) | |
| assert e.alto_export == ReadinessLevel.FULL | |
| assert e.page_export == ReadinessLevel.PARTIAL | |
| assert e.viewer_render == ReadinessLevel.DEGRADED | |
| class TestDocumentReadiness: | |
| def test_defaults(self) -> None: | |
| dr = DocumentReadiness() | |
| assert dr.level == ReadinessLevel.NONE | |
| assert dr.page_readiness == [] | |
| def test_with_pages(self) -> None: | |
| dr = DocumentReadiness( | |
| level=ReadinessLevel.PARTIAL, | |
| page_readiness=[ReadinessLevel.FULL, ReadinessLevel.PARTIAL], | |
| ) | |
| assert len(dr.page_readiness) == 2 | |