Files
hermes-webui/tests/test_issue1785_workspace_preview_breadcrumb.py
T
hermes-agentanddobby-d-elf 9d95ba0b92 Stage 404: PR #2716 — Performance optimizations by @dobby-d-elf
nesquena APPROVED 2026-05-22. Cherry-picked onto post-v0.51.127
master via 3-way apply. Resolved api/routes.py conflict: master had
the inline correctness fix from the deep-review iteration; PR
refactors it into _metadata_only_message_summary() helper. Took the
helper AND added profile= threading (post-#2827 master adds
profile-aware state.db reads). Kept master's pre-existing
test_api_session_reload_drops_stale_cached_user_tail_after_saved_assistant
alongside the PR's new test_metadata_fast_path_matches_reconciliation_for_restamped_replays.

Co-authored-by: dobby-d-elf <dobby.the.agent@gmail.com>
2026-05-24 18:08:41 +00:00

67 lines
2.9 KiB
Python

from pathlib import Path
BOOT_JS = Path("static/boot.js").read_text(encoding="utf-8")
WORKSPACE_JS = Path("static/workspace.js").read_text(encoding="utf-8")
def _function_block(src: str, name: str) -> str:
marker = f"function {name}("
start = src.find(marker)
assert start != -1, f"{name}() not found"
params_end = src.find("){", start)
assert params_end != -1, f"{name}() body not found"
brace = params_end + 1
depth = 0
for idx in range(brace, len(src)):
ch = src[idx]
if ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
return src[start : idx + 1]
raise AssertionError(f"{name}() body did not close")
def test_clear_preview_can_keep_preview_only_panel_open_for_directory_navigation():
"""#1785: leaving preview via a directory breadcrumb should switch to browse mode, not close."""
block = _function_block(BOOT_JS, "clearPreview")
assert "keepPanelOpen" in block, (
"clearPreview() needs an explicit keep-open option so breadcrumb/directory "
"navigation can leave preview-only mode without closing the workspace panel."
)
assert "_workspacePanelMode==='preview'&&!keepPanelOpen" in block.replace(" ", ""), (
"Preview-only close behavior should remain for the X button, but must be gated "
"off when directory navigation requests keepPanelOpen."
)
assert "openWorkspacePanel('browse')" in block or '_setWorkspacePanelMode("browse")' in block, (
"When keepPanelOpen is requested from preview-only mode, clearPreview() should "
"transition the workspace panel to browse mode so the root listing remains visible."
)
def test_load_dir_keeps_workspace_panel_open_when_clearing_preview():
"""#1785: loadDir('.') from the ~ breadcrumb should reveal the listing, not collapse the panel."""
block = _function_block(WORKSPACE_JS, "loadDir")
assert "clearPreview({keepPanelOpen:true})" in block.replace(" ", ""), (
"Directory navigation clears previews as part of showing the file tree; that clear "
"must keep the workspace panel open for breadcrumb navigation from preview mode."
)
def test_load_dir_ignores_stale_session_results():
block = _function_block(WORKSPACE_JS, "loadDir")
assert "const sessionId=S.session.session_id" in block
assert "encodeURIComponent(sessionId)" in block
assert "if(!S.session||S.session.session_id!==sessionId)return;" in block
def test_file_preview_breadcrumb_uses_directory_navigation_for_root():
block = _function_block(WORKSPACE_JS, "renderFileBreadcrumb")
assert "loadDir('.')" in block, "The preview root breadcrumb should navigate to the workspace root."
assert "clearPreview(); loadDir('.')" not in block, (
"The preview root breadcrumb should not do a close-style preview clear before "
"directory navigation; loadDir() owns the keep-open preview clear."
)