File size: 2,577 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
"""Tests for the RawProviderPayload model."""

from __future__ import annotations

import pytest
from pydantic import ValidationError
from src.app.domain.models import RawProviderPayload


class TestRawProviderPayload:
    def test_valid_dict_payload(self) -> None:
        rp = RawProviderPayload(
            provider_id="paddleocr",
            adapter_id="adapter.paddle.v1",
            runtime_type="local",
            payload={"pages": [{"blocks": []}]},
        )
        assert rp.provider_id == "paddleocr"

    def test_valid_list_payload(self) -> None:
        rp = RawProviderPayload(
            provider_id="paddleocr",
            adapter_id="adapter.paddle.v1",
            runtime_type="local",
            payload=[[[100, 200], [300, 200], [300, 250], [100, 250]], ["text", 0.95]],
        )
        assert isinstance(rp.payload, list)

    def test_empty_provider_rejected(self) -> None:
        with pytest.raises(ValidationError):
            RawProviderPayload(
                provider_id="",
                adapter_id="v1",
                runtime_type="local",
                payload={},
            )

    def test_with_image_dimensions(self) -> None:
        rp = RawProviderPayload(
            provider_id="paddle",
            adapter_id="v1",
            runtime_type="local",
            payload={},
            image_width=2480,
            image_height=3508,
        )
        assert rp.image_width == 2480

    def test_zero_dimension_rejected(self) -> None:
        with pytest.raises(ValidationError):
            RawProviderPayload(
                provider_id="paddle",
                adapter_id="v1",
                runtime_type="local",
                payload={},
                image_width=0,
                image_height=100,
            )

    def test_with_metadata(self) -> None:
        rp = RawProviderPayload(
            provider_id="paddle",
            adapter_id="v1",
            runtime_type="local",
            payload={"data": "test"},
            metadata={"processing_time_ms": 1234},
        )
        assert rp.metadata["processing_time_ms"] == 1234

    def test_json_roundtrip(self) -> None:
        rp = RawProviderPayload(
            provider_id="paddle",
            adapter_id="v1",
            runtime_type="local",
            model_id="PP-OCRv4",
            payload={"blocks": [{"text": "hello"}]},
        )
        data = rp.model_dump(mode="json")
        rp2 = RawProviderPayload.model_validate(data)
        assert rp2.provider_id == rp.provider_id
        assert rp2.model_id == "PP-OCRv4"