ariadne/tests/test_vaultwarden_sync.py

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