"""Test-only endpoints for e2e test isolation.""" import os from fastapi import APIRouter, Depends, HTTPException from sqlalchemy import text from sqlalchemy.ext.asyncio import AsyncSession from database import get_db router = APIRouter(prefix="/api/test", tags=["test"]) @router.post("/reset") async def reset_database(db: AsyncSession = Depends(get_db)): """ Truncate all tables and re-seed base data. Only available when E2E_MODE environment variable is set. """ # Safety check - only allow in e2e mode if not os.getenv("E2E_MODE"): raise HTTPException( status_code=403, detail="This endpoint is only available in E2E_MODE" ) # Get all table names from the database result = await db.execute( text(""" SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'alembic_version' ORDER BY tablename """) ) tables = [row[0] for row in result] # Truncate all tables (CASCADE handles foreign keys) if tables: table_list = ", ".join(f'"{table}"' for table in tables) await db.execute(text(f"TRUNCATE TABLE {table_list} CASCADE")) await db.commit() # Re-seed essential data from seed_e2e import seed_base_data await seed_base_data(db) return {"status": "reset", "tables_truncated": len(tables)}