import os import uuid import pytest import pytest_asyncio from httpx import ASGITransport, AsyncClient os.environ["ENVIRONMENT"] = "test" os.environ["AUTH_REQUIRED"] = "false" os.environ["COMMUNICATION_DATABASE_URL"] = "sqlite+aiosqlite:///:memory:" os.environ["COMMUNICATION_DATABASE_URL_SYNC"] = "sqlite:///:memory:" os.environ["JWT_VERIFY_SIGNATURE"] = "false" from app.core.config import get_settings # noqa: E402 get_settings.cache_clear() from app.core.database import Base, engine # noqa: E402 from app.events.publisher import reset_event_publisher # noqa: E402 from app.main import app # noqa: E402 from app.providers import reset_provider_registry_for_tests # noqa: E402 from app.services.queue_engine import get_rate_limiter # noqa: E402 TENANT_A = uuid.uuid4() TENANT_B = uuid.uuid4() @pytest_asyncio.fixture(scope="session") async def db_setup(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) 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(autouse=True) def _reset_events_and_providers(): reset_event_publisher() reset_provider_registry_for_tests() get_rate_limiter().reset_stats() yield @pytest_asyncio.fixture async def client(db_setup): transport = ASGITransport(app=app) async with AsyncClient(transport=transport, base_url="http://testserver") as ac: yield ac def tenant_headers(tenant_id: uuid.UUID) -> dict[str, str]: return {"X-Tenant-ID": str(tenant_id)}