Remodel/packages/api/tests/conftest.py

33 lines
1.2 KiB
Python

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()