Livrare LOT 1 - Didi
This commit is contained in:
commit
5380c3fc63
990 changed files with 133308 additions and 0 deletions
90
ai_platform/modules/web/tests/test_schemas_common.py
Normal file
90
ai_platform/modules/web/tests/test_schemas_common.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
"""Tests for common schemas — FailedUrl, PageImage, make_error_detail."""
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from web.schemas.common import FailedUrl, PageImage, make_error_detail
|
||||
|
||||
|
||||
class TestFailedUrl:
|
||||
"""Tests for FailedUrl schema."""
|
||||
|
||||
def test_round_trip(self) -> None:
|
||||
"""Test serialization round-trip."""
|
||||
obj = FailedUrl(url="https://example.com", error="Timeout")
|
||||
data = obj.model_dump()
|
||||
assert data == {"url": "https://example.com", "error": "Timeout"}
|
||||
restored = FailedUrl.model_validate(data)
|
||||
assert restored == obj
|
||||
|
||||
def test_extra_fields_rejected(self) -> None:
|
||||
"""Test that extra fields are rejected."""
|
||||
with pytest.raises(ValidationError):
|
||||
FailedUrl(url="https://example.com", error="Timeout", extra="bad")
|
||||
|
||||
def test_json_round_trip(self) -> None:
|
||||
"""Test JSON serialization round-trip."""
|
||||
obj = FailedUrl(url="https://a.com", error="Connection refused")
|
||||
json_str = obj.model_dump_json()
|
||||
restored = FailedUrl.model_validate_json(json_str)
|
||||
assert restored == obj
|
||||
|
||||
|
||||
class TestPageImage:
|
||||
"""Tests for PageImage schema."""
|
||||
|
||||
def test_round_trip(self) -> None:
|
||||
"""Test serialization round-trip."""
|
||||
obj = PageImage(url="https://img.example.com/1.jpg", alt="Photo")
|
||||
data = obj.model_dump()
|
||||
assert data == {"url": "https://img.example.com/1.jpg", "alt": "Photo"}
|
||||
restored = PageImage.model_validate(data)
|
||||
assert restored == obj
|
||||
|
||||
def test_alt_defaults_to_none(self) -> None:
|
||||
"""Test that alt text defaults to None."""
|
||||
obj = PageImage(url="https://img.example.com/1.jpg")
|
||||
assert obj.alt is None
|
||||
|
||||
def test_extra_fields_rejected(self) -> None:
|
||||
"""Test that extra fields are rejected."""
|
||||
with pytest.raises(ValidationError):
|
||||
PageImage(url="https://img.example.com/1.jpg", width=100)
|
||||
|
||||
|
||||
class TestMakeErrorDetail:
|
||||
"""Tests for make_error_detail helper."""
|
||||
|
||||
def test_basic(self) -> None:
|
||||
"""Test basic error detail."""
|
||||
result = make_error_detail("not_found", "Resource not found")
|
||||
assert result == {"error": "not_found", "message": "Resource not found"}
|
||||
|
||||
def test_with_request_id(self) -> None:
|
||||
"""Test error detail with request_id."""
|
||||
result = make_error_detail("timeout", "Request timed out", request_id="abc-123")
|
||||
assert result == {
|
||||
"error": "timeout",
|
||||
"message": "Request timed out",
|
||||
"request_id": "abc-123",
|
||||
}
|
||||
|
||||
def test_with_extra_fields(self) -> None:
|
||||
"""Test error detail with extra fields."""
|
||||
result = make_error_detail(
|
||||
"rate_limit",
|
||||
"Too many requests",
|
||||
request_id="xyz",
|
||||
retry_after=30.0,
|
||||
)
|
||||
assert result == {
|
||||
"error": "rate_limit",
|
||||
"message": "Too many requests",
|
||||
"request_id": "xyz",
|
||||
"retry_after": 30.0,
|
||||
}
|
||||
|
||||
def test_no_request_id_when_none(self) -> None:
|
||||
"""Test that request_id is omitted when None."""
|
||||
result = make_error_detail("error", "msg", request_id=None)
|
||||
assert "request_id" not in result
|
||||
Loading…
Add table
Add a link
Reference in a new issue