38 lines
1000 B
Python
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()
|