mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 03:00:23 +00:00
54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
"""Regression coverage for model selection surviving hard refresh.
|
|
|
|
The frontend updates the visible model chip before the async
|
|
``/api/session/update`` request returns. A hard refresh can abort that request,
|
|
so the browser must remember the session-scoped selection and reapply it on the
|
|
next ``loadSession()`` before ``syncTopbar()`` projects server metadata.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
BOOT_JS = (ROOT / "static" / "boot.js").read_text()
|
|
SESSIONS_JS = (ROOT / "static" / "sessions.js").read_text()
|
|
UI_JS = (ROOT / "static" / "ui.js").read_text()
|
|
|
|
|
|
def _body_between(src: str, start: str, end: str) -> str:
|
|
start_idx = src.index(start)
|
|
end_idx = src.index(end, start_idx)
|
|
return src[start_idx:end_idx]
|
|
|
|
|
|
def test_model_selection_records_pending_state_before_async_session_update():
|
|
"""A refresh during /api/session/update must not lose the selected model."""
|
|
body = _body_between(BOOT_JS, "$('modelSelect').onchange=async()=>", "$('msg').addEventListener")
|
|
|
|
pending_idx = body.index("_rememberPendingSessionModel")
|
|
local_model_idx = body.index("S.session.model=modelState.model")
|
|
update_idx = body.index("await api('/api/session/update'")
|
|
|
|
assert pending_idx < update_idx
|
|
assert local_model_idx < update_idx
|
|
assert "_clearPendingSessionModel" in body
|
|
|
|
|
|
def test_load_session_applies_pending_model_before_first_topbar_sync():
|
|
"""Reload should project the pending selection before server old metadata wins."""
|
|
body = _body_between(SESSIONS_JS, "async function loadSession", "const activeStreamId=")
|
|
|
|
apply_idx = body.index("_applyPendingSessionModelForSession")
|
|
sync_idx = body.index("syncTopbar()")
|
|
|
|
assert apply_idx < sync_idx
|
|
|
|
|
|
def test_pending_model_helpers_are_session_scoped_and_expire():
|
|
assert "const PENDING_SESSION_MODEL_PREFIX" in UI_JS
|
|
assert "function _pendingSessionModelKey" in UI_JS
|
|
assert "function _rememberPendingSessionModel" in UI_JS
|
|
assert "function _applyPendingSessionModelForSession" in UI_JS
|
|
assert "propagateErrors:true" in UI_JS
|
|
assert "sessionStorage" in UI_JS
|
|
assert "10*60*1000" in UI_JS
|