Files
kca/server/tests/helpers/oidc.py
T

38 lines
1000 B
Python

"""Fake the OIDC-authenticated user during tests."""
from __future__ import annotations
import contextlib
import unittest.mock as _mock
from typing import Any, Iterator, Optional
from kaya.oidc import OIDCUser
from kca.app import oidc
from kca.config import settings
_PROVIDER = next(iter(oidc.providers))
_ISSUER = settings.oidc_providers[0].issuer
def make_user(sub: str, name: Optional[str] = None, **claims: Any) -> OIDCUser:
data: dict = {"iss": _ISSUER, "sub": sub, "preferred_username": name or sub}
data.update(claims)
return OIDCUser(data)
@contextlib.contextmanager
def oidc_user(
sub: str,
name: Optional[str] = None,
**claims: Any,
) -> Iterator[OIDCUser]:
data: dict = {"iss": _ISSUER, "sub": sub, "preferred_username": name or sub}
data.update(claims)
user = OIDCUser(data)
patcher = _mock.patch.object(oidc, "get_users", return_value={_PROVIDER: user})
patcher.start()
try:
yield user
finally:
patcher.stop()