mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 19:20:16 +00:00
0f86030f5f
- Remove duplicate mobile-close-btn from HTML - Remove dead .mobile-close-btn CSS rules; unhide .close-preview at all viewports - Change btnClearPreview tooltip from 'Hide workspace panel' to 'Close' - Update tests across test_sprint41.py, test_sprint44.py, test_issue781.py, and test_mobile_layout.py to match new single-button model
99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
"""
|
|
Sprint 44 Tests: Workspace panel close button (PR #413).
|
|
|
|
Covers:
|
|
- btnClearPreview is the single close button for all devices. Clicking it calls
|
|
handleWorkspaceClose(), which clears a file preview if open, or closes the
|
|
entire workspace panel otherwise.
|
|
- The mobile-close-btn element was removed — only one X button remains.
|
|
- Tooltip text updated to "Close" (when no preview) and "Close preview"
|
|
(when a file is being viewed).
|
|
"""
|
|
import pathlib
|
|
import re
|
|
import unittest
|
|
|
|
REPO = pathlib.Path(__file__).parent.parent
|
|
HTML = (REPO / "static" / "index.html").read_text(encoding="utf-8")
|
|
BOOT_JS = (REPO / "static" / "boot.js").read_text(encoding="utf-8")
|
|
|
|
|
|
class TestSingleCloseButton(unittest.TestCase):
|
|
"""btnClearPreview is the only close button, visible on all devices."""
|
|
|
|
def test_btn_clear_preview_exists_in_html(self):
|
|
"""#btnClearPreview must exist in index.html."""
|
|
self.assertIn(
|
|
'id="btnClearPreview"',
|
|
HTML,
|
|
"#btnClearPreview must be present in index.html",
|
|
)
|
|
|
|
def test_mobile_close_btn_removed_from_html(self):
|
|
"""mobile-close-btn element should no longer exist in index.html."""
|
|
self.assertNotIn(
|
|
"mobile-close-btn",
|
|
HTML,
|
|
"mobile-close-btn was removed — only btnClearPreview remains as close control",
|
|
)
|
|
|
|
def test_btn_clear_preview_wired_to_handle_workspace_close(self):
|
|
"""btnClearPreview onclick must be handleWorkspaceClose."""
|
|
self.assertRegex(
|
|
BOOT_JS,
|
|
r"btnClearPreview.*onclick\s*=\s*handleWorkspaceClose",
|
|
"btnClearPreview must call handleWorkspaceClose so that clicking X "
|
|
"either clears a preview or closes the panel",
|
|
)
|
|
|
|
|
|
class TestHandleWorkspaceCloseLogic(unittest.TestCase):
|
|
"""handleWorkspaceClose() clears preview first, falls back to close panel."""
|
|
|
|
def test_function_defined(self):
|
|
self.assertIn(
|
|
"function handleWorkspaceClose()",
|
|
BOOT_JS,
|
|
"handleWorkspaceClose() must exist in boot.js",
|
|
)
|
|
|
|
def test_clears_preview_when_open(self):
|
|
idx = BOOT_JS.find("function handleWorkspaceClose()")
|
|
self.assertGreater(idx, 0, "handleWorkspaceClose() not found")
|
|
body = BOOT_JS[idx:idx + 500]
|
|
self.assertIn(
|
|
"clearPreview()",
|
|
body,
|
|
"handleWorkspaceClose() must call clearPreview() when a preview is open",
|
|
)
|
|
|
|
def test_falls_back_to_close_panel(self):
|
|
idx = BOOT_JS.find("function handleWorkspaceClose()")
|
|
self.assertGreater(idx, 0, "handleWorkspaceClose() not found")
|
|
body = BOOT_JS[idx:idx + 500]
|
|
self.assertIn(
|
|
"closeWorkspacePanel()",
|
|
body,
|
|
"handleWorkspaceClose() must call closeWorkspacePanel() as fallback",
|
|
)
|
|
|
|
|
|
class TestTooltipText(unittest.TestCase):
|
|
"""The X button tooltip says 'Close' when no preview, 'Close preview' otherwise."""
|
|
|
|
def test_tooltip_uses_close(self):
|
|
"""syncWorkspacePanelUI() sets tooltip to 'Close' (not 'Hide workspace panel')."""
|
|
idx = BOOT_JS.find("function syncWorkspacePanelUI()")
|
|
self.assertGreater(idx, 0, "syncWorkspacePanelUI() not found")
|
|
body = BOOT_JS[idx:idx + 2000]
|
|
# The tooltip line should contain 'Close' and NOT 'Hide workspace panel'
|
|
self.assertIn(
|
|
"'Close'",
|
|
body,
|
|
"btnClearPreview tooltip must use 'Close' instead of 'Hide workspace panel'",
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|