import os from datetime import UTC, datetime, timedelta import pytest from fastapi import FastAPI from fastapi.testclient import TestClient os.environ.setdefault( "MONGODB_URI", "mongodb://theplug:pass@localhost:27017/theplug?authSource=admin", ) os.environ.setdefault("MONGODB_DB_NAME", "theplug") os.environ.setdefault("JWT_SECRET_KEY", "test-secret-key") os.environ.setdefault("JWT_ALGORITHM", "HS256") os.environ.setdefault("JWT_EXPIRE_MINUTES", "720") os.environ.setdefault("AUTH_USERNAME", "admin") os.environ.setdefault("AUTH_PASSWORD", "admin") @pytest.fixture def fake_user(): from models.auth import AuthUserDocument return AuthUserDocument( username="admin", password_hash="hashed-password", ) @pytest.fixture def auth_context(fake_user): from core.security import AuthContext from models.auth import AccessTokenPayload exp = int((datetime.now(UTC) + timedelta(minutes=720)).timestamp()) payload = AccessTokenPayload(sub=fake_user.username, jti="test-jti", exp=exp) return AuthContext(token="test-token", user=fake_user, payload=payload) @pytest.fixture def app(fake_user, auth_context) -> FastAPI: from api.auth.router import router as auth_router from api.editor.router import router as editor_router from api.proxy.router import router as proxy_router from core.security import AuthContext, get_auth_context, require_authenticated_user from models.auth import AuthUserDocument app_instance = FastAPI() app_instance.include_router(auth_router) app_instance.include_router(editor_router) app_instance.include_router(proxy_router) async def _override_current_user() -> AuthUserDocument: return fake_user async def _override_auth_context() -> AuthContext: return auth_context app_instance.dependency_overrides[require_authenticated_user] = ( _override_current_user ) app_instance.dependency_overrides[get_auth_context] = _override_auth_context return app_instance @pytest.fixture def client(app: FastAPI): with TestClient(app) as test_client: yield test_client