from __future__ import annotations import os from pathlib import Path from fastapi import FastAPI from fastapi.testclient import TestClient os.environ.setdefault("VELOCITY_JWT_SECRET", "test-secret") from backend.migrations.runner import discover_migrations from backend.observability import RequestObservabilityMiddleware def test_migration_discovery_is_ordered_and_checksummed() -> None: migrations = discover_migrations(Path("backend/migrations/versions")) assert migrations assert migrations == sorted(migrations, key=lambda migration: migration.version) assert all(len(migration.checksum) == 64 for migration in migrations) assert len({migration.version for migration in migrations}) == len(migrations) def test_observability_middleware_adds_request_headers_and_snapshot() -> None: app = FastAPI() app.add_middleware(RequestObservabilityMiddleware) @app.get("/ping") async def ping() -> dict[str, str]: return {"status": "ok"} client = TestClient(app) response = client.get("/ping", headers={"X-Request-ID": "req-test"}) assert response.status_code == 200 assert response.headers["X-Request-ID"] == "req-test" assert "X-Response-Time-Ms" in response.headers assert app.state.request_metrics[-1].request_id == "req-test" assert app.state.request_metrics[-1].path == "/ping"