"""Test fixtures for Indie Status Page.""" import pytest_asyncio from httpx import ASGITransport, AsyncClient from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from app.database import Base from app.dependencies import get_db from app.main import app # Use an in-memory SQLite for tests TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:" test_engine = create_async_engine(TEST_DATABASE_URL, echo=False) TestSessionLocal = async_sessionmaker( test_engine, class_=AsyncSession, expire_on_commit=False ) @pytest_asyncio.fixture(scope="session", autouse=True) async def setup_database(): """Create all tables once for the test session.""" async with test_engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield async with test_engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) @pytest_asyncio.fixture async def db_session(): """Provide a clean database session for each test.""" async with TestSessionLocal() as session: yield session await session.rollback() @pytest_asyncio.fixture async def client(db_session: AsyncSession): """Provide an HTTP test client with DB dependency override.""" async def override_get_db(): yield db_session app.dependency_overrides[get_db] = override_get_db transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://test") as ac: yield ac app.dependency_overrides.clear() @pytest_asyncio.fixture async def api_key(): """Return the test API key.""" from app.config import settings return settings.admin_api_key