import pytest from fastapi.testclient import TestClient from sqlmodel import Session, SQLModel, create_engine from app import models # noqa: F401 (enregistre les tables sur SQLModel.metadata) from app.config import get_settings from app.db import get_session from app.main import app @pytest.fixture(scope="session") def engine(): """Vraie base PostgreSQL de test (voir docker/postgres-init).""" eng = create_engine(get_settings().test_database_url, pool_pre_ping=True) SQLModel.metadata.create_all(eng) yield eng SQLModel.metadata.drop_all(eng) @pytest.fixture def session(engine): """Session isolée : tout est annulé à la fin du test.""" connection = engine.connect() transaction = connection.begin() with Session(bind=connection) as s: yield s transaction.rollback() connection.close() @pytest.fixture def client(session): app.dependency_overrides[get_session] = lambda: session with TestClient(app) as c: yield c app.dependency_overrides.clear()