from __future__ import annotations import time import types import pytest from ariadne.services import mailu as mailu_module from ariadne.services.firefly import FireflyService from ariadne.services.mailu import MailuService from ariadne.services.nextcloud import NextcloudService from ariadne.services.wger import WgerService from ariadne.services.vaultwarden import VaultwardenService class DummyExecutor: def __init__(self, stdout: str = "ok", stderr: str = "", exit_code: int = 0): self.calls = [] self._stdout = stdout self._stderr = stderr self._exit_code = exit_code def exec(self, command, env=None, timeout_sec=None, check=True): self.calls.append((command, env, timeout_sec, check)) return types.SimpleNamespace( stdout=self._stdout, stderr=self._stderr, exit_code=self._exit_code, ok=self._exit_code == 0, ) class DummyResponse: def __init__(self, status_code=200, text="", json_data=None): self.status_code = status_code self.text = text self._json_data = json_data def raise_for_status(self): return None def json(self): if self._json_data is None: raise ValueError("no json data") return self._json_data class DummyVaultwardenClient: def __init__(self): self.calls = [] self.responses = {} def post(self, path, json=None, data=None): self.calls.append((path, json, data)) resp = self.responses.get(path) if resp is None: resp = DummyResponse(200, "") return resp def get(self, path): self.calls.append((path, None, None)) resp = self.responses.get(path) if resp is None: resp = DummyResponse(200, "", json_data=[]) return resp def close(self): return None __all__ = [name for name in globals() if not name.startswith("__")]