71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
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("REDIS_URL", "redis://localhost:6379")
|
|
os.environ.setdefault("JWT_SECRET_KEY", "test-secret-key")
|
|
os.environ.setdefault("JWT_ALGORITHM", "HS256")
|
|
os.environ.setdefault("JWT_EXPIRE_MINUTES", "30")
|
|
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=30)).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
|