Files
hermes-webui/tests/test_issue5954_empty_boot_reasoning_chip.py
3722f2a743 Release exp-v0.52.51: refresh reasoning chip after empty boot (#5967, #5954) (#5982)
* fix(#5954): refresh the reasoning chip after empty boot hydration

* test(#5954): resolve the boot harness path from the test file

* Release exp-v0.52.51: refresh reasoning chip after empty boot hydration (#5967, #5954)

---------

Co-authored-by: Rod Boev <rod.boev@gmail.com>
Co-authored-by: nesquena-hermes <agent@nesquena-hermes>
2026-07-11 22:17:11 -07:00

52 lines
1.6 KiB
Python

import json
import subprocess
import shutil
from pathlib import Path
import pytest
NODE = shutil.which("node")
pytestmark = pytest.mark.skipif(NODE is None, reason="node is required for boot behavior checks")
def _boot_completion_branch() -> str:
source = (Path(__file__).resolve().parents[1] / "static" / "boot.js").read_text(encoding="utf-8")
marker = " if(S.session) syncTopbar();"
start = source.index(marker)
end = source.index("\n }).catch(e=>", start)
return source[start:end]
def _run_boot_branch() -> list[dict[str, int | str | None]]:
branch = _boot_completion_branch()
script = f"""
const branch = {json.dumps(branch)};
function run(session) {{
const S = {{session}};
let syncTopbarCalls = 0;
let syncReasoningChipCalls = 0;
function syncTopbar() {{ syncTopbarCalls += 1; }}
function syncReasoningChip() {{ syncReasoningChipCalls += 1; }}
eval(branch);
return {{session: session ? 'present' : null, syncTopbarCalls, syncReasoningChipCalls}};
}}
console.log(JSON.stringify([run(null), run({{id: 'session'}})]));
"""
result = subprocess.run(
[NODE, "-e", script],
capture_output=True,
text=True,
timeout=10,
creationflags=getattr(subprocess, "CREATE_NO_WINDOW", 0),
check=True,
)
return json.loads(result.stdout)
def test_boot_hydration_refreshes_chip_only_without_a_session():
assert _run_boot_branch() == [
{"session": None, "syncTopbarCalls": 0, "syncReasoningChipCalls": 1},
{"session": "present", "syncTopbarCalls": 1, "syncReasoningChipCalls": 0},
]