import sys import uuid import types import pytest from fastapi.testclient import TestClient from httpx import AsyncClient, ASGITransport # Stub sentry_sdk to avoid optional dependency issues during import of app stub = types.ModuleType("sentry_sdk") stub.init = lambda *args, **kwargs: None sys.modules.setdefault("sentry_sdk", stub) # Import the FastAPI application from app.app import fastApi as app # noqa: E402 @pytest.fixture(scope="session") def fastapi_app(): return app @pytest.fixture(scope="function") def client(fastapi_app): # Function-scoped to avoid leaking loop-bound resources into async tests return TestClient(fastapi_app, raise_server_exceptions=True) @pytest.fixture(scope="function") async def test_user(fastapi_app): """ Creates a new user asynchronously and returns their credentials. Does NOT log them in. Using AsyncClient with ASGITransport avoids event loop conflicts with DB connections. """ unique_email = f"testuser_{uuid.uuid4()}@example.com" password = "a_strong_password" user_payload = {"email": unique_email, "password": password} transport = ASGITransport(app=fastapi_app, raise_app_exceptions=True) async with AsyncClient(transport=transport, base_url="http://testserver") as ac: response = await ac.post("/auth/register", json=user_payload) assert response.status_code == 201 return {"username": unique_email, "password": password}