from __future__ import annotations from typing import Any import types import httpx import pytest from ariadne.services.keycloak_admin import KeycloakAdminClient class DummyResponse: def __init__(self, payload=None, status_code=200, headers=None): self._payload = payload self.status_code = status_code self.headers = headers or {} def json(self): return self._payload def raise_for_status(self): if self.status_code >= 400: request = httpx.Request("GET", "https://example.com") response = httpx.Response(self.status_code, request=request) raise httpx.HTTPStatusError("error", request=request, response=response) class DummyClient: def __init__(self, responses): self._responses = list(responses) self.calls = [] def __enter__(self): return self def __exit__(self, exc_type, exc, tb): return False def _next(self): if not self._responses: raise RuntimeError("missing response") return self._responses.pop(0) def get(self, url, params=None, headers=None): self.calls.append(("get", url, params)) return self._next() def post(self, url, data=None, json=None, headers=None): self.calls.append(("post", url, data, json)) return self._next() def put(self, url, headers=None, json=None): self.calls.append(("put", url, json)) return self._next() __all__ = [name for name in globals() if not name.startswith("__")]