import pytest from fastapi.testclient import TestClient from sqlalchemy import text from sqlalchemy.orm import Session from app.database import Base, engine, get_db from app.models import * # noqa: F401, F403 — register all models from main import app @pytest.fixture(scope="session") def setup_db(): Base.metadata.create_all(bind=engine) yield @pytest.fixture def db_session(setup_db): connection = engine.connect() transaction = connection.begin() connection.execute(text("SET FOREIGN_KEY_CHECKS = 0")) for table in reversed(Base.metadata.sorted_tables): connection.execute(text(f"TRUNCATE TABLE {table.name}")) connection.execute(text("SET FOREIGN_KEY_CHECKS = 1")) transaction.commit() transaction = connection.begin() session = Session(bind=connection) yield session session.close() transaction.rollback() connection.close() @pytest.fixture def client(db_session): def override_get_db(): yield db_session app.dependency_overrides[get_db] = override_get_db yield TestClient(app) app.dependency_overrides.clear()