test: verify real kbqa workflow
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
from collections.abc import AsyncIterator
|
||||
|
||||
from fastapi import FastAPI
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
|
||||
|
||||
from kbqa.api.errors import register_exception_handlers
|
||||
from kbqa.api.middleware import RequestIDMiddleware
|
||||
from kbqa.chat.routes import router
|
||||
from kbqa.database import get_session
|
||||
|
||||
|
||||
async def test_session_api_persists_and_deletes(sqlite_engine: AsyncEngine) -> None:
|
||||
factory = async_sessionmaker(sqlite_engine, expire_on_commit=False)
|
||||
app = FastAPI()
|
||||
app.add_middleware(RequestIDMiddleware)
|
||||
register_exception_handlers(app)
|
||||
app.include_router(router, prefix="/api/v1")
|
||||
|
||||
async def session_override() -> AsyncIterator[AsyncSession]:
|
||||
async with factory() as session:
|
||||
yield session
|
||||
|
||||
app.dependency_overrides[get_session] = session_override
|
||||
async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as client:
|
||||
created = await client.post("/api/v1/sessions", json={"title": "持久化测试"})
|
||||
assert created.status_code == 201
|
||||
session_id = created.json()["id"]
|
||||
|
||||
listed = await client.get("/api/v1/sessions")
|
||||
assert listed.json()["items"][0]["id"] == session_id
|
||||
messages = await client.get(f"/api/v1/sessions/{session_id}/messages")
|
||||
assert messages.json()["items"] == []
|
||||
|
||||
deleted = await client.delete(f"/api/v1/sessions/{session_id}")
|
||||
assert deleted.status_code == 204
|
||||
missing = await client.get(f"/api/v1/sessions/{session_id}/messages")
|
||||
assert missing.status_code == 404
|
||||
Reference in New Issue
Block a user