File size: 3,126 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
"""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