Spaces:
Running
Running
| 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 | |
| def setup_db(): | |
| Base.metadata.create_all(bind=test_engine) | |
| yield | |
| Base.metadata.drop_all(bind=test_engine) | |
| async def async_client(): | |
| async with AsyncClient( | |
| transport=ASGITransport(app=app), base_url="http://test" | |
| ) as client: | |
| yield client | |
| 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 | |
| def mock_token(): | |
| return "test_mock_token" | |
| def auth_headers(mock_token): | |
| return {"Authorization": f"Bearer {mock_token}"} | |
| 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 = {} | |