"""Notifications integration fixtures. The app's DB session and auth-context dependencies are overridden to ride the test's transactional `db_session`, so API calls and seeded rows share one transaction that rolls back per test. Overriding `get_auth_context` also bypasses real JWT auth, so these tests don't depend on AUTH_TYPE. """ from __future__ import annotations from collections.abc import AsyncGenerator import httpx import pytest import pytest_asyncio from httpx import ASGITransport from sqlalchemy.ext.asyncio import AsyncSession from app.app import app, limiter from app.auth.context import AuthContext from app.db import User, get_async_session from app.users import get_auth_context pytestmark = pytest.mark.integration limiter.enabled = False @pytest_asyncio.fixture async def client( db_session: AsyncSession, db_user: User, ) -> AsyncGenerator[httpx.AsyncClient, None]: async def override_session() -> AsyncGenerator[AsyncSession, None]: yield db_session async def override_auth() -> AuthContext: return AuthContext.session(db_user) previous_overrides = app.dependency_overrides.copy() app.dependency_overrides[get_async_session] = override_session app.dependency_overrides[get_auth_context] = override_auth try: async with httpx.AsyncClient( transport=ASGITransport(app=app), base_url="http://test", timeout=30.0, follow_redirects=False, ) as test_client: yield test_client finally: app.dependency_overrides.clear() app.dependency_overrides.update(previous_overrides)