66 lines
1.7 KiB
Python
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")
|