Files
hermes-webui/tests/test_home_route_html_error.py
T
2026-05-07 18:41:13 +00:00

59 lines
1.7 KiB
Python

"""Regression coverage for the shell/home route fallback.
The WebUI shell should never render a JSON error page for `/`, even if
index.html serving fails during a restart/update race. API routes still keep
their normal JSON error behavior; this only pins the shell route contract.
"""
from urllib.parse import urlparse
class _FakeHandler:
def __init__(self):
self.status = None
self.sent_headers = []
self.body = bytearray()
self.wfile = self
self.headers = {}
def send_response(self, status):
self.status = status
def send_header(self, name, value):
self.sent_headers.append((name, value))
def end_headers(self):
pass
def write(self, data):
self.body.extend(data)
def header(self, name):
for key, value in self.sent_headers:
if key.lower() == name.lower():
return value
return None
class _BrokenIndexPath:
def read_text(self, *args, **kwargs):
raise RuntimeError("simulated index.html read failure")
def test_home_route_internal_error_returns_html_503_not_json(monkeypatch):
from api import routes
monkeypatch.setattr(routes, "_INDEX_HTML_PATH", _BrokenIndexPath())
handler = _FakeHandler()
assert routes.handle_get(handler, urlparse("http://example.com/")) is True
assert handler.status == 503
assert (handler.header("Content-Type") or "").startswith("text/html; charset=utf-8")
assert handler.header("Cache-Control") == "no-store"
body = bytes(handler.body).decode("utf-8")
assert "Hermes is restarting" in body
assert "application/json" not in (handler.header("Content-Type") or "")
assert '"error"' not in body