Files
hermes-agent/tests/tools/test_open_preview_tool.py
Paula Rossi 934b2b94cc test(tools): pin open_preview missing-path emit (#95853)
Independent review: document OSError fail-open on is_dir, and lock
that only existing directories are rejected.
2026-09-26 16:51:19 -05:00

94 lines
2.4 KiB
Python

"""Tests for the GUI-surface ``open_preview`` tool."""
import json
import pytest
from tools import desktop_ui, open_preview_tool as op
@pytest.fixture(autouse=True)
def _reset_emitter():
"""Each test controls the emitter; never leak one across tests."""
desktop_ui.set_emitter(None)
yield
desktop_ui.set_emitter(None)
def test_emitter_failure_is_reported():
def _boom(*_a):
raise RuntimeError("no window")
desktop_ui.set_emitter(_boom)
assert "no window" in json.loads(op.open_preview_tool("https://x.example"))["error"]
def _capture_emits():
emitted: list = []
def _emit(_sid, event, payload):
emitted.append((event, payload))
desktop_ui.set_emitter(_emit)
return emitted
def test_existing_directory_is_an_error_not_success(tmp_path):
"""#95853: a directory must not report success while opening nothing."""
emitted = _capture_emits()
folder = tmp_path / "Active"
folder.mkdir()
result = json.loads(op.open_preview_tool(str(folder)))
assert "error" in result
assert "director" in result["error"].lower()
assert result.get("success") is not True
assert emitted == []
def test_existing_file_still_opens(tmp_path):
emitted = _capture_emits()
path = tmp_path / "notes.md"
path.write_text("hi", encoding="utf-8")
result = json.loads(op.open_preview_tool(str(path)))
assert result["success"] is True
assert result["url"] == str(path)
assert emitted == [("preview.open", {"url": str(path), "label": ""})]
def test_https_url_is_not_treated_as_a_directory():
emitted = _capture_emits()
result = json.loads(op.open_preview_tool("https://example.com/docs"))
assert result["success"] is True
assert emitted[0][0] == "preview.open"
def test_file_uri_directory_is_an_error(tmp_path):
emitted = _capture_emits()
folder = tmp_path / "docs"
folder.mkdir()
uri = folder.resolve().as_uri()
result = json.loads(op.open_preview_tool(uri))
assert "error" in result
assert "director" in result["error"].lower()
assert emitted == []
def test_missing_path_still_emits(tmp_path):
"""Reject only existing directories — a missing path is the renderer's call."""
emitted = _capture_emits()
missing = tmp_path / "no-such-folder"
result = json.loads(op.open_preview_tool(str(missing)))
assert result["success"] is True
assert emitted == [("preview.open", {"url": str(missing), "label": ""})]