82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
from ariadne.services import keycloak_profile
|
|
|
|
|
|
class _Admin:
|
|
def __init__(self, users=None, *, ready: bool = True, fail_update: bool = False) -> None:
|
|
self.users = users or []
|
|
self._ready = ready
|
|
self.fail_update = fail_update
|
|
self.calls = []
|
|
|
|
def ready(self) -> bool:
|
|
return self._ready
|
|
|
|
def iter_users(self, page_size=200, brief=False):
|
|
return self.users
|
|
|
|
def update_user_safe(self, user_id, payload) -> None:
|
|
if self.fail_update:
|
|
raise RuntimeError("update failed")
|
|
self.calls.append((user_id, payload))
|
|
|
|
|
|
def test_profile_sync_ready_and_skip_edges(monkeypatch) -> None:
|
|
assert not keycloak_profile._profile_complete({"email": "", "lastName": "User", "emailVerified": True})
|
|
assert not keycloak_profile._profile_complete({"email": "a@b.test", "lastName": "", "emailVerified": True})
|
|
assert not keycloak_profile._profile_complete({"email": "a@b.test", "lastName": "User", "emailVerified": False})
|
|
|
|
monkeypatch.setattr(keycloak_profile, "keycloak_admin", _Admin(ready=False))
|
|
summary = keycloak_profile.run_profile_sync()
|
|
assert summary.failures == 1
|
|
assert summary.detail == "keycloak admin not configured"
|
|
|
|
users = [
|
|
{},
|
|
{"username": "disabled", "enabled": False},
|
|
{"username": "service-account-demo", "requiredActions": ["UPDATE_PROFILE"]},
|
|
{"username": "svc", "serviceAccountClientId": "client", "requiredActions": ["UPDATE_PROFILE"]},
|
|
{"username": "no-actions", "email": "no-actions@bstein.dev", "lastName": "User", "emailVerified": True},
|
|
{"username": "incomplete", "requiredActions": ["UPDATE_PROFILE"]},
|
|
{
|
|
"username": "other-action",
|
|
"id": "2",
|
|
"email": "other@bstein.dev",
|
|
"lastName": "User",
|
|
"emailVerified": True,
|
|
"requiredActions": ["CONFIGURE_TOTP"],
|
|
},
|
|
{
|
|
"username": "missing-id",
|
|
"email": "missing@bstein.dev",
|
|
"lastName": "User",
|
|
"emailVerified": True,
|
|
"requiredActions": ["UPDATE_PROFILE"],
|
|
},
|
|
]
|
|
monkeypatch.setattr(keycloak_profile, "keycloak_admin", _Admin(users))
|
|
summary = keycloak_profile.run_profile_sync()
|
|
assert summary.skipped == 7
|
|
assert summary.failures == 1
|
|
|
|
|
|
def test_profile_sync_update_failure(monkeypatch) -> None:
|
|
users = [
|
|
{
|
|
"id": "1",
|
|
"username": "alice",
|
|
"email": "alice@bstein.dev",
|
|
"lastName": "User",
|
|
"emailVerified": True,
|
|
"requiredActions": ["UPDATE_PROFILE", "CONFIGURE_TOTP"],
|
|
}
|
|
]
|
|
monkeypatch.setattr(keycloak_profile, "keycloak_admin", _Admin(users, fail_update=True))
|
|
|
|
summary = keycloak_profile.run_profile_sync()
|
|
assert summary.processed == 1
|
|
assert summary.updated == 0
|
|
assert summary.failures == 1
|
|
|