Files
social-app/backend/tests/unit/v1/todo/test_schemas.py
T

66 lines
1.7 KiB
Python

from pydantic import ValidationError
from v1.todo.schemas import TodoCreate, TodoReorderRequest, TodoResponse, TodoUpdate
def test_todo_create_accepts_zero_based_order() -> None:
request = TodoCreate.model_validate({"title": "Test", "priority": 1, "order": 0})
assert request.order == 0
def test_todo_create_rejects_due_at_field() -> None:
try:
TodoCreate.model_validate(
{
"title": "Test",
"priority": 1,
"order": 0,
"due_at": "2026-01-01T00:00:00Z",
}
)
except ValidationError:
return
raise AssertionError("TodoCreate should reject due_at")
def test_todo_update_rejects_negative_order() -> None:
try:
TodoUpdate.model_validate({"order": -1})
except ValidationError:
return
raise AssertionError("TodoUpdate should reject negative order")
def test_todo_response_contains_order_without_due_at() -> None:
payload = {
"id": "9d72aa0f-e2d5-4de3-9b2d-4609f53376c0",
"owner_id": "2f5b38fb-cb6f-44ef-8824-e7978f644bc2",
"title": "Test",
"description": None,
"priority": 1,
"order": 0,
"status": "pending",
"completed_at": None,
"created_at": "2026-03-20T00:00:00Z",
"updated_at": "2026-03-20T00:00:00Z",
"schedule_items": [],
}
response = TodoResponse.model_validate(payload)
dumped = response.model_dump()
assert dumped["order"] == 0
assert "due_at" not in dumped
def test_todo_reorder_request_requires_non_empty_items() -> None:
try:
TodoReorderRequest(items=[])
except ValidationError:
return
raise AssertionError("TodoReorderRequest should reject empty items")