import pytest from httpx import AsyncClient, ASGITransport from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from sqlalchemy.pool import NullPool from app.main import app from app.core import database from app.core.config import settings def make_test_engine(): """Crée un engine sans pool pour éviter les conflits d'event loop entre tests.""" return create_async_engine(settings.database_url, poolclass=NullPool) @pytest.fixture async def db_session(): engine = make_test_engine() session_factory = async_sessionmaker(engine, expire_on_commit=False) async with session_factory() as session: yield session await engine.dispose() @pytest.fixture async def client(db_session: AsyncSession): """Client HTTP qui injecte la session de test dans l'app FastAPI.""" async def override_get_session(): yield db_session app.dependency_overrides[database.get_session] = override_get_session async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as ac: yield ac app.dependency_overrides.clear()