* 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>
52 lines
1.6 KiB
Python
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},
|
|
]
|