from typing import AsyncGenerator import pytest from httpx import AsyncClient, ASGITransport from sqlalchemy.orm import sessionmaker from src.user.models import User from src.auth.service import get_current_user, get_dev_user from src.main import app # inited FastAPI app from src.database import engine, Base, get_db SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) @pytest.fixture() def db_session(): db = SessionLocal() try: yield db except: db.rollback() raise finally: db.close() @pytest.fixture async def client(db_session) -> AsyncGenerator[AsyncClient, None]: def get_db_override(): return db_session app.dependency_overrides[get_db] = get_db_override app.dependency_overrides[get_current_user] = get_dev_user transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://localhost:8000/api/v1") as ac: yield ac app.dependency_overrides.clear() @pytest.fixture(scope="session") def setup_database(): Base.metadata.create_all(bind=engine) yield Base.metadata.drop_all(bind=engine) @pytest.fixture(scope="session") def seed_db(): db = SessionLocal() try: db.add(User(email="admin@test.com", first_name="Admin", last_name="Test", oidc_id="abcd-efgh-ijkl-mnop")) db.commit() yield db finally: db.close() @pytest.fixture(scope="session", autouse=True) def seed_data(setup_database, seed_db): yield