33 lines
1.2 KiB
Python
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()
|