from __future__ import annotations from dataclasses import dataclass from govoplan_core.core.operations import ( OperationalCheck, OperationalCheckProviderRegistration, ) from govoplan_ops.backend.api.v1 import routes @dataclass class _Manifest: operational_check_providers: tuple[OperationalCheckProviderRegistration, ...] class _Registry: def __init__(self, *registrations: OperationalCheckProviderRegistration): self._manifest = _Manifest(tuple(registrations)) def manifests(self): return (self._manifest,) def test_module_operational_checks_cache_and_force() -> None: routes._module_check_cache.clear() calls = 0 def provider() -> OperationalCheck: nonlocal calls calls += 1 return OperationalCheck("example.roundtrip", "Example", "ok", "Passed") registration = OperationalCheckProviderRegistration( module_id="example", check_id="example.roundtrip", provider=provider, ) registry = _Registry(registration) assert routes._module_operational_checks(registry, force=False)[0]["state"] == "ok" assert routes._module_operational_checks(registry, force=False)[0]["state"] == "ok" assert calls == 1 routes._module_operational_checks(registry, force=True) assert calls == 2 def test_module_operational_check_failure_is_isolated() -> None: routes._module_check_cache.clear() def provider() -> OperationalCheck: raise RuntimeError("secret detail") result = routes._module_operational_checks( _Registry(OperationalCheckProviderRegistration( module_id="example", check_id="example.failed", provider=provider, )), force=True, )[0] assert result["state"] == "error" assert "secret detail" not in result["detail"]