42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""Run 列表 API 测试(归档页运行时间河数据源)。"""
|
|
|
|
from collections.abc import AsyncGenerator
|
|
|
|
import pytest
|
|
from httpx import ASGITransport, AsyncClient
|
|
|
|
from app.main import app
|
|
|
|
|
|
@pytest.fixture
|
|
async def client() -> AsyncGenerator[AsyncClient, None]:
|
|
transport = ASGITransport(app=app)
|
|
async with AsyncClient(transport=transport, base_url="http://test") as http_client:
|
|
yield http_client
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_list_runs_returns_page(client: AsyncClient) -> None:
|
|
resp = await client.get("/api/v1/runs")
|
|
assert resp.status_code == 200
|
|
body = resp.json()
|
|
assert "items" in body
|
|
assert "total" in body
|
|
assert body["page"] == 1
|
|
assert isinstance(body["items"], list)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_list_runs_filters_accepted(client: AsyncClient) -> None:
|
|
# 过滤参数被接受;seed 后无 run,验证端点工作且不报错
|
|
resp = await client.get("/api/v1/runs?status=completed&character_id=character_none")
|
|
assert resp.status_code == 200
|
|
assert resp.json()["total"] == 0
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_run_detail_not_found(client: AsyncClient) -> None:
|
|
# 列表端点("")不破坏详情端点(/{run_id})的路由顺序
|
|
resp = await client.get("/api/v1/runs/run_missing")
|
|
assert resp.status_code == 404
|