thermograph/backend/tests/web/test_role.py
Emi Griffith a4be7066e5 Subtree-merge thermograph-backend (origin/main) into backend/
git-subtree-dir: backend
git-subtree-mainline: 6723fc0326
git-subtree-split: 83c2e05b96
2026-07-22 22:01:11 -07:00

34 lines
1.3 KiB
Python

"""THERMOGRAPH_ROLE: which processes are allowed to own the subscription
notifier (web/worker/all split), plus the /healthz liveness route."""
from fastapi.testclient import TestClient
from core import singleton
from web import app as appmod
def test_default_role_is_all_and_permits_the_notifier(monkeypatch):
monkeypatch.setattr(appmod, "ROLE", "all")
monkeypatch.setattr(singleton, "claim_leader", lambda: True)
assert appmod._should_run_notifier() is True
def test_web_role_never_runs_the_notifier_even_if_it_would_win_leader(monkeypatch):
monkeypatch.setattr(appmod, "ROLE", "web")
monkeypatch.setattr(singleton, "claim_leader", lambda: True)
assert appmod._should_run_notifier() is False
def test_worker_role_runs_the_notifier_only_if_it_wins_leader(monkeypatch):
monkeypatch.setattr(appmod, "ROLE", "worker")
monkeypatch.setattr(singleton, "claim_leader", lambda: False)
assert appmod._should_run_notifier() is False
monkeypatch.setattr(singleton, "claim_leader", lambda: True)
assert appmod._should_run_notifier() is True
def test_healthz_reports_status_and_configured_role(monkeypatch):
monkeypatch.setattr(appmod, "ROLE", "worker")
client = TestClient(appmod.app)
r = client.get("/healthz")
assert r.status_code == 200
assert r.json() == {"status": "ok", "role": "worker"}