65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from ariadne.services.vaultwarden import VaultwardenInvite
|
|
from ariadne.services import vaultwarden_sync
|
|
|
|
|
|
@dataclass
|
|
class DummyAdmin:
|
|
ready_value: bool = True
|
|
users: list[dict] = None
|
|
attrs: dict[str, dict] = None
|
|
set_calls: list[tuple[str, str, str]] = None
|
|
|
|
def ready(self) -> bool:
|
|
return self.ready_value
|
|
|
|
def iter_users(self, page_size: int = 200, brief: bool = False):
|
|
return self.users or []
|
|
|
|
def get_user(self, user_id: str):
|
|
return self.attrs.get(user_id, {}) if self.attrs else {}
|
|
|
|
def set_user_attribute(self, username: str, key: str, value: str) -> None:
|
|
if self.set_calls is None:
|
|
self.set_calls = []
|
|
self.set_calls.append((username, key, value))
|
|
|
|
|
|
def test_vaultwarden_sync_requires_admin(monkeypatch) -> None:
|
|
dummy = DummyAdmin(ready_value=False)
|
|
monkeypatch.setattr(vaultwarden_sync, "keycloak_admin", dummy)
|
|
|
|
summary = vaultwarden_sync.run_vaultwarden_sync()
|
|
assert summary.failures == 1
|
|
assert summary.detail == "keycloak admin not configured"
|
|
|
|
|
|
def test_vaultwarden_sync_skips_when_missing_mailbox(monkeypatch) -> None:
|
|
dummy = DummyAdmin(
|
|
users=[{"id": "1", "username": "alice", "enabled": True, "attributes": {"mailu_email": ["alice@bstein.dev"]}}],
|
|
attrs={"1": {"id": "1", "username": "alice", "attributes": {"mailu_email": ["alice@bstein.dev"]}}},
|
|
)
|
|
monkeypatch.setattr(vaultwarden_sync, "keycloak_admin", dummy)
|
|
monkeypatch.setattr(vaultwarden_sync.mailu, "mailbox_exists", lambda email: False)
|
|
|
|
summary = vaultwarden_sync.run_vaultwarden_sync()
|
|
assert summary.skipped == 1
|
|
assert summary.processed == 0
|
|
|
|
|
|
def test_vaultwarden_sync_invites(monkeypatch) -> None:
|
|
dummy = DummyAdmin(
|
|
users=[{"id": "1", "username": "alice", "enabled": True, "attributes": {"mailu_email": ["alice@bstein.dev"]}}],
|
|
attrs={"1": {"id": "1", "username": "alice", "attributes": {"mailu_email": ["alice@bstein.dev"]}}},
|
|
)
|
|
monkeypatch.setattr(vaultwarden_sync, "keycloak_admin", dummy)
|
|
monkeypatch.setattr(vaultwarden_sync.mailu, "mailbox_exists", lambda email: True)
|
|
monkeypatch.setattr(vaultwarden_sync.vaultwarden, "invite_user", lambda email: VaultwardenInvite(True, "invited"))
|
|
|
|
summary = vaultwarden_sync.run_vaultwarden_sync()
|
|
assert summary.created_or_present == 1
|
|
assert dummy.set_calls
|