import pytest import pytest_asyncio import os # Override connection string before anything else is imported os.environ["DATABASE_URL"] = "sqlite:///./test_local.db" from httpx import AsyncClient, ASGITransport from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker test_engine = create_engine( "sqlite:///./test_local.db", connect_args={"check_same_thread": False} ) TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=test_engine) from server import app # noqa: E402 from core.subscription.db import Base # noqa: E402 from endpoints.projects import get_db # noqa: E402 # Ensure all models are imported so Base metadata is populated @pytest.fixture(autouse=True) def setup_db(): Base.metadata.create_all(bind=test_engine) yield Base.metadata.drop_all(bind=test_engine) @pytest_asyncio.fixture async def async_client(): async with AsyncClient( transport=ASGITransport(app=app), base_url="http://test" ) as client: yield client @pytest.fixture(autouse=True) def override_db_dependency(): def override_get_db(): try: db = TestingSessionLocal() yield db finally: db.close() app.dependency_overrides[get_db] = override_get_db yield # app.dependency_overrides = {} # handled below if needed @pytest.fixture def mock_token(): return "test_mock_token" @pytest.fixture def auth_headers(mock_token): return {"Authorization": f"Bearer {mock_token}"} @pytest.fixture(autouse=True) def override_dependencies(): from core.subscription.middleware import verify_token async def mock_verify_token(): return {"sub": "test_clerk_id_e2e"} app.dependency_overrides[verify_token] = mock_verify_token yield app.dependency_overrides = {}