80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from ariadne.services.keycloak_admin import KeycloakAdminClient
|
|
|
|
|
|
def test_set_user_attribute_preserves_profile(monkeypatch) -> None:
|
|
client = KeycloakAdminClient()
|
|
captured: dict[str, Any] = {}
|
|
|
|
def fake_find_user(username: str) -> dict[str, Any]:
|
|
return {"id": "user-123"}
|
|
|
|
def fake_get_user(user_id: str) -> dict[str, Any]:
|
|
return {
|
|
"id": user_id,
|
|
"username": "alice",
|
|
"email": "alice@bstein.dev",
|
|
"emailVerified": True,
|
|
"enabled": True,
|
|
"firstName": "Alice",
|
|
"lastName": "Smith",
|
|
"requiredActions": ["UPDATE_PASSWORD", 123],
|
|
"attributes": {"existing": ["value"]},
|
|
}
|
|
|
|
def fake_update_user(user_id: str, payload: dict[str, Any]) -> None:
|
|
captured["user_id"] = user_id
|
|
captured["payload"] = payload
|
|
|
|
monkeypatch.setattr(client, "find_user", fake_find_user)
|
|
monkeypatch.setattr(client, "get_user", fake_get_user)
|
|
monkeypatch.setattr(client, "update_user", fake_update_user)
|
|
|
|
client.set_user_attribute("alice", "mailu_app_password", "secret")
|
|
|
|
payload = captured.get("payload") or {}
|
|
assert payload.get("username") == "alice"
|
|
assert payload.get("email") == "alice@bstein.dev"
|
|
assert payload.get("emailVerified") is True
|
|
assert payload.get("enabled") is True
|
|
assert payload.get("firstName") == "Alice"
|
|
assert payload.get("lastName") == "Smith"
|
|
assert payload.get("requiredActions") == ["UPDATE_PASSWORD"]
|
|
assert payload.get("attributes") == {
|
|
"existing": ["value"],
|
|
"mailu_app_password": ["secret"],
|
|
}
|
|
|
|
|
|
def test_update_user_safe_merges_payload(monkeypatch) -> None:
|
|
client = KeycloakAdminClient()
|
|
captured: dict[str, Any] = {}
|
|
|
|
def fake_get_user(user_id: str) -> dict[str, Any]:
|
|
return {
|
|
"id": user_id,
|
|
"username": "alice",
|
|
"enabled": True,
|
|
"attributes": {"existing": ["value"]},
|
|
}
|
|
|
|
def fake_update_user(user_id: str, payload: dict[str, Any]) -> None:
|
|
captured["user_id"] = user_id
|
|
captured["payload"] = payload
|
|
|
|
monkeypatch.setattr(client, "get_user", fake_get_user)
|
|
monkeypatch.setattr(client, "update_user", fake_update_user)
|
|
|
|
client.update_user_safe(
|
|
"user-123",
|
|
{"attributes": {"new": ["item"]}, "requiredActions": ["UPDATE_PASSWORD"]},
|
|
)
|
|
|
|
payload = captured.get("payload") or {}
|
|
assert payload.get("username") == "alice"
|
|
assert payload.get("attributes") == {"existing": ["value"], "new": ["item"]}
|
|
assert payload.get("requiredActions") == ["UPDATE_PASSWORD"]
|