Files
hermes-webui/tests/test_session_cli_scan_fast_path.py
2026-05-12 11:24:29 -06:00

110 lines
4.0 KiB
Python

from urllib.parse import urlparse
def test_webui_session_metadata_load_skips_cli_metadata_scan(monkeypatch):
"""Opening a normal WebUI session should not scan imported CLI sessions."""
import api.routes as routes
from api.models import Session
session = Session(
session_id="webui_normal",
title="Normal WebUI chat",
messages=[{"role": "user", "content": "hello"}],
)
monkeypatch.setattr(routes, "get_session", lambda sid, metadata_only=False: session)
monkeypatch.setattr(routes, "_clear_stale_stream_state", lambda _session: None)
monkeypatch.setattr(routes, "redact_session_data", lambda payload: payload)
monkeypatch.setattr(routes, "j", lambda _handler, payload, status=200, extra_headers=None: payload)
monkeypatch.setattr(
routes,
"_lookup_cli_session_metadata",
lambda _sid: (_ for _ in ()).throw(AssertionError("normal WebUI loads should not scan CLI sessions")),
)
response = routes.handle_get(
object(),
urlparse("/api/session?session_id=webui_normal&messages=0&resolve_model=0"),
)
assert response["session"]["session_id"] == "webui_normal"
assert response["session"]["messages"] == []
def test_read_only_session_metadata_load_preserves_cli_metadata_lookup(monkeypatch):
"""Read-only imported sidecars still need CLI metadata for source identity."""
import api.routes as routes
from api.models import Session
session = Session(
session_id="readonly_sidecar",
title="Imported chat",
messages=[{"role": "user", "content": "hello"}],
read_only=True,
)
looked_up = []
monkeypatch.setattr(routes, "get_session", lambda sid, metadata_only=False: session)
monkeypatch.setattr(routes, "_clear_stale_stream_state", lambda _session: None)
monkeypatch.setattr(routes, "get_cli_session_messages", lambda _sid: [])
monkeypatch.setattr(routes, "redact_session_data", lambda payload: payload)
monkeypatch.setattr(routes, "j", lambda _handler, payload, status=200, extra_headers=None: payload)
def fake_lookup(sid):
looked_up.append(sid)
return {
"session_id": sid,
"read_only": True,
"source_label": "External Agent",
}
monkeypatch.setattr(routes, "_lookup_cli_session_metadata", fake_lookup)
response = routes.handle_get(
object(),
urlparse("/api/session?session_id=readonly_sidecar&messages=0&resolve_model=0"),
)
assert looked_up == ["readonly_sidecar"]
assert response["session"]["read_only"] is True
def test_messaging_session_metadata_load_preserves_cli_metadata_lookup(monkeypatch):
"""Messaging/imported sidecars still need CLI metadata for source identity."""
import api.routes as routes
from api.models import Session
session = Session(
session_id="messaging_sidecar",
title="Telegram chat",
messages=[{"role": "user", "content": "hello"}],
session_source="messaging",
raw_source="telegram",
)
looked_up = []
monkeypatch.setattr(routes, "get_session", lambda sid, metadata_only=False: session)
monkeypatch.setattr(routes, "_clear_stale_stream_state", lambda _session: None)
monkeypatch.setattr(routes, "get_cli_session_messages", lambda _sid: [])
monkeypatch.setattr(routes, "redact_session_data", lambda payload: payload)
monkeypatch.setattr(routes, "j", lambda _handler, payload, status=200, extra_headers=None: payload)
def fake_lookup(sid):
looked_up.append(sid)
return {
"session_id": sid,
"session_source": "messaging",
"raw_source": "telegram",
"source_label": "Telegram",
}
monkeypatch.setattr(routes, "_lookup_cli_session_metadata", fake_lookup)
response = routes.handle_get(
object(),
urlparse("/api/session?session_id=messaging_sidecar&messages=0&resolve_model=0"),
)
assert looked_up == ["messaging_sidecar"]
assert response["session"]["source_label"] == "Telegram"