""" Test configuration and fixtures """ from typing import AsyncGenerator import pytest_asyncio from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker # In-memory SQLite: fully isolated, no disk state between test sessions TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:" @pytest_asyncio.fixture async def async_engine(): from database.models import Base engine = create_async_engine(TEST_DATABASE_URL, echo=False) async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield engine async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) await engine.dispose() @pytest_asyncio.fixture async def async_session(async_engine) -> AsyncGenerator[AsyncSession, None]: async_session_factory = async_sessionmaker( bind=async_engine, class_=AsyncSession, expire_on_commit=False, ) async with async_session_factory() as session: yield session