Files

45 lines
1.6 KiB
Python

"""Synthetic PostgreSQL-backed server for container proxy acceptance only."""
from contextlib import asynccontextmanager
import httpx
from fastapi import Depends
from app.config import Settings
from app.main import create_app
from app.mcp_api.auth import SCOPES, create_token
from app.models import Account
from app.security import cipher, require_auth
from app.worldquant import WqClient
from tests.backtest_fake import Platform
def create_test_app():
settings = Settings(_env_file=None, enable_runner=False, mcp_enabled=True)
if not settings.database_url.endswith("/wq_mcp_test"):
raise RuntimeError("Disposable test database required")
platform = Platform()
app = create_app(settings, WqClient(settings, transport=httpx.MockTransport(platform)))
original = app.router.lifespan_context
@asynccontextmanager
async def lifespan(application):
async with original(application):
async with app.state.sessions.begin() as db:
account = await db.get(Account, 1)
account.email = "synthetic@example.com"
account.wq_user_id = "TEST_USER"
account.connection_status = "connected"
account.password_encrypted = cipher(settings).encrypt(platform.secret.encode()).decode()
yield
app.router.lifespan_context = lifespan
@app.post("/api/v1/test/mcp-token", dependencies=[Depends(require_auth)])
async def issue_fixture():
async with app.state.sessions.begin() as db:
_, token = await create_token(db, "container-fixture", SCOPES)
return {"token": token}
return app