Spaces:
Sleeping
Sleeping
File size: 3,369 Bytes
e2ec8a2 | 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 | """Tests for the schema validator."""
from __future__ import annotations
from src.app.validators.schema_validator import validate_schema
class TestSchemaValidator:
def test_valid_document(self) -> None:
data = {
"schema_version": "1.0.0",
"document_id": "doc1",
"source": {"input_type": "image"},
"pages": [{
"id": "p1",
"page_index": 0,
"width": 2480,
"height": 3508,
"text_regions": [{
"id": "tb1",
"geometry": {"bbox": [100, 200, 300, 50], "status": "exact"},
"provenance": {
"provider": "test", "adapter": "v1",
"source_ref": "$", "evidence_type": "provider_native",
"derived_from": [],
},
"lines": [{
"id": "tl1",
"geometry": {"bbox": [100, 200, 300, 50], "status": "exact"},
"provenance": {
"provider": "test", "adapter": "v1",
"source_ref": "$", "evidence_type": "provider_native",
"derived_from": [],
},
"words": [{
"id": "w1",
"text": "Hello",
"geometry": {"bbox": [100, 200, 50, 30], "status": "exact"},
"provenance": {
"provider": "test", "adapter": "v1",
"source_ref": "$", "evidence_type": "provider_native",
"derived_from": [],
},
}],
}],
}],
}],
}
doc, report = validate_schema(data)
assert doc is not None
assert report.is_valid
def test_missing_required_field(self) -> None:
data = {
"source": {"input_type": "image"},
"pages": [],
}
doc, report = validate_schema(data)
assert doc is None
assert not report.is_valid
assert report.error_count > 0
def test_invalid_schema_version(self) -> None:
data = {
"schema_version": "bad",
"document_id": "doc1",
"source": {"input_type": "image"},
"pages": [{"id": "p1", "page_index": 0, "width": 100, "height": 100}],
}
doc, report = validate_schema(data)
assert doc is None
assert not report.is_valid
def test_empty_pages(self) -> None:
data = {
"document_id": "doc1",
"source": {"input_type": "image"},
"pages": [],
}
doc, report = validate_schema(data)
assert doc is None
assert report.error_count > 0
def test_error_paths_populated(self) -> None:
data = {
"document_id": "",
"source": {"input_type": "image"},
"pages": [],
}
doc, report = validate_schema(data)
assert doc is None
for entry in report.errors:
assert entry.path
assert entry.message
assert entry.validator == "schema"
|