import pytest from httpx import ASGITransport, AsyncClient from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from remodel_api.db.models import Base from remodel_api.db.session import get_session from remodel_api.main import app TEST_DB_URL = "sqlite+aiosqlite:///:memory:" @pytest.fixture() async def db_session() -> AsyncSession: # type: ignore[return] engine = create_async_engine(TEST_DB_URL) async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) factory = async_sessionmaker(engine, expire_on_commit=False) async with factory() as session: yield session async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) await engine.dispose() @pytest.fixture() async def client(db_session: AsyncSession) -> AsyncClient: # type: ignore[return] async def override_session() -> AsyncSession: # type: ignore[return] yield db_session # type: ignore[misc] app.dependency_overrides[get_session] = override_session async with AsyncClient(transport=ASGITransport(app=app), base_url="http://test") as c: yield c app.dependency_overrides.clear()