Files
call-center/tests/test_oidc_smoke.py

66 lines
2.1 KiB
Python

from __future__ import annotations
import pytest
from scripts.oidc_smoke import check_oidc
class _FakeResponse:
def __init__(self, payload: dict, status_code: int = 200):
self._payload = payload
self.status_code = status_code
def json(self) -> dict:
return self._payload
def raise_for_status(self) -> None:
if self.status_code >= 400:
raise RuntimeError(f"HTTP {self.status_code}")
class _FakeClient:
def __init__(self, responses: list[_FakeResponse]):
self.responses = responses
self.calls: list[str] = []
def get(self, url: str) -> _FakeResponse:
self.calls.append(url)
if not self.responses:
raise AssertionError("No fake responses left")
return self.responses.pop(0)
def test_oidc_smoke_skips_health_when_disabled() -> None:
client = _FakeClient([_FakeResponse({"enabled": False, "provider_label": "Keycloak", "login_path": "/auth/oidc/start"})])
summary = check_oidc("http://localhost:8080/", client=client)
assert summary["config"]["enabled"] is False
assert summary["health"] is None
assert client.calls == ["http://localhost:8080/proxy/auth/auth/oidc/config"]
def test_oidc_smoke_can_require_enabled() -> None:
client = _FakeClient([_FakeResponse({"enabled": False, "provider_label": "Keycloak", "login_path": "/auth/oidc/start"})])
with pytest.raises(RuntimeError):
check_oidc("http://localhost:8080", client=client, require_enabled=True)
def test_oidc_smoke_checks_health_when_enabled() -> None:
client = _FakeClient(
[
_FakeResponse({"enabled": True, "provider_label": "Keycloak", "login_path": "/auth/oidc/start"}),
_FakeResponse({"status": "ok", "provider": "keycloak", "jwks_loaded": True}),
]
)
summary = check_oidc("http://localhost:8080", client=client)
assert summary["config"]["enabled"] is True
assert summary["health"]["status"] == "ok"
assert client.calls == [
"http://localhost:8080/proxy/auth/auth/oidc/config",
"http://localhost:8080/proxy/auth/auth/oidc/health",
]