task_auto_plan/tests/test_basic.py

112 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
基础单元测试 —— 测试 TodoService 的核心功能。
运行方式:
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pytest tests/ -v
"""
import pytest
from app.services import TodoService, TodoCreate, TodoUpdate
@pytest.fixture
def service() -> TodoService:
"""每个测试用例使用独立的 TodoService 实例。"""
return TodoService()
class TestTodoService:
"""TodoService 核心功能测试。"""
def test_list_todos_should_return_mock_data(self, service: TodoService):
"""测试初始化时自动生成假数据。"""
todos = service.list_todos()
assert len(todos) == 5 # 初始化了 5 条假数据
def test_create_todo_should_return_created_todo(self, service: TodoService):
"""测试创建待办事项。"""
todo_in = TodoCreate(title="新任务", completed=True)
todo = service.create_todo(todo_in)
assert todo.title == "新任务"
assert todo.completed is True
assert todo.id > 0
def test_get_todo_should_return_correct_todo(self, service: TodoService):
"""测试根据 ID 获取待办事项。"""
# 先创建
created = service.create_todo(TodoCreate(title="测试任务"))
# 再获取
fetched = service.get_todo(created.id)
assert fetched is not None
assert fetched.id == created.id
assert fetched.title == "测试任务"
def test_get_todo_should_return_none_when_not_found(self, service: TodoService):
"""测试获取不存在的待办事项返回 None。"""
todo = service.get_todo(99999)
assert todo is None
def test_update_todo_should_update_title(self, service: TodoService):
"""测试部分更新待办事项的标题。"""
created = service.create_todo(TodoCreate(title="旧标题"))
updated = service.update_todo(created.id, TodoUpdate(title="新标题"))
assert updated is not None
assert updated.title == "新标题"
assert updated.completed is False # 未更新的字段保持不变
def test_update_todo_should_update_completed(self, service: TodoService):
"""测试部分更新待办事项的完成状态。"""
created = service.create_todo(TodoCreate(title="任务", completed=False))
updated = service.update_todo(created.id, TodoUpdate(completed=True))
assert updated is not None
assert updated.completed is True
assert updated.title == "任务" # 未更新的字段保持不变
def test_update_todo_should_return_none_when_not_found(self, service: TodoService):
"""测试更新不存在的待办事项返回 None。"""
result = service.update_todo(99999, TodoUpdate(title=""))
assert result is None
def test_delete_todo_should_return_true(self, service: TodoService):
"""测试删除存在的待办事项返回 True。"""
created = service.create_todo(TodoCreate(title="待删除"))
result = service.delete_todo(created.id)
assert result is True
# 确认已删除
assert service.get_todo(created.id) is None
def test_delete_todo_should_return_false_when_not_found(self, service: TodoService):
"""测试删除不存在的待办事项返回 False。"""
result = service.delete_todo(99999)
assert result is False
def test_list_todos_after_create_and_delete(self, service: TodoService):
"""测试增删操作后列表长度的变化。"""
initial_count = len(service.list_todos())
# 创建 2 个
t1 = service.create_todo(TodoCreate(title="A"))
t2 = service.create_todo(TodoCreate(title="B"))
assert len(service.list_todos()) == initial_count + 2
# 删除 1 个
service.delete_todo(t1.id)
assert len(service.list_todos()) == initial_count + 1
# 删除另一个
service.delete_todo(t2.id)
assert len(service.list_todos()) == initial_count
@pytest.mark.asyncio
async def test_fastapi_health_check():
"""简单的 FastAPI 健康检查测试(使用 TestClient"""
from httpx import AsyncClient, ASGITransport
from app.main import app
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as client:
response = await client.get("/")
assert response.status_code == 200
data = response.json()
assert "service" in data
assert data["service"] == "Todo 管理服务"