import pytest import pytest_asyncio from fastapi.testclient import TestClient from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker from apps.api.src.database import Base, get_db from apps.api.src.main import app TEST_DATABASE_URL = "postgresql+asyncpg://test:test@localhost:5432/nexadash_test" engine = create_async_engine(TEST_DATABASE_URL, echo=False, future=True) TestingSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) @pytest_asyncio.fixture(scope="session", autouse=True) async def prepare_db(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) @pytest_asyncio.fixture async def db(): async with TestingSessionLocal() as session: yield session await session.rollback() @pytest.fixture def client(db): async def override_get_db(): yield db app.dependency_overrides[get_db] = override_get_db yield TestClient(app) app.dependency_overrides.clear()