"""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()