Change-detectors, tautologies, source-reading tests, redundant duplicates, mock-echo tests and dead/unrunnable tests. Per-test rationale in the lane ledger (category + reason for every removal).
71 lines
3.3 KiB
Python
71 lines
3.3 KiB
Python
"""Invariants for the CLI startup 'some tools disabled' notice (tools-runtime-01 / -02)."""
|
|
|
|
from hermes_cli.tool_availability_notices import filter_to_enabled_toolsets, tool_availability_warning_lines
|
|
|
|
_TERMINAL = {"name": "terminal", "env_vars": [], "tools": ["terminal", "process_manage"]}
|
|
_WEB = {"name": "web", "env_vars": ["EXA_API_KEY", "TAVILY_API_KEY"], "tools": ["web_search"]}
|
|
_RL = {"name": "rl", "env_vars": ["TINKER_API_KEY"], "tools": ["rl_tool"]}
|
|
|
|
|
|
def test_terminal_line_names_backend_reason_and_fix_commands():
|
|
lines = tool_availability_warning_lines(
|
|
[_TERMINAL], terminal_reason="Docker is installed but the Docker daemon is not running",
|
|
terminal_backend="docker")
|
|
text = "\n".join(lines)
|
|
assert "Terminal tool disabled" in text
|
|
assert "'docker'" in text
|
|
assert "Docker daemon is not running" in text
|
|
assert "hermes doctor" in text and "hermes setup terminal" in text
|
|
assert "TERMINAL_ENV" not in text
|
|
|
|
|
|
def test_terminal_without_reason_still_gets_a_line():
|
|
lines = tool_availability_warning_lines([_TERMINAL], terminal_reason=None, terminal_backend="ssh")
|
|
assert any("Terminal tool disabled" in line and "'ssh'" in line for line in lines)
|
|
|
|
|
|
def test_web_collapses_env_dump_into_one_provider_sentence():
|
|
lines = tool_availability_warning_lines([_WEB], terminal_reason=None, terminal_backend="local")
|
|
text = "\n".join(lines)
|
|
assert "EXA_API_KEY" not in text
|
|
assert "Web search is off" in text and "hermes setup tools" in text
|
|
|
|
|
|
def test_generic_toolset_lists_vars_and_setup_hint():
|
|
lines = tool_availability_warning_lines([_RL], terminal_reason=None, terminal_backend="local")
|
|
text = "\n".join(lines)
|
|
assert "rl" in text and "TINKER_API_KEY" in text and "hermes setup" in text
|
|
|
|
|
|
def test_nothing_to_report_returns_no_lines():
|
|
assert tool_availability_warning_lines([], terminal_reason=None, terminal_backend="local") == []
|
|
# A toolset with no env vars and no special notice (e.g. lazy check_fn) stays silent.
|
|
assert tool_availability_warning_lines([{"name": "honcho", "env_vars": [], "tools": []}],
|
|
terminal_reason=None, terminal_backend="local") == []
|
|
|
|
|
|
|
|
|
|
class TestFilterToEnabledToolsets:
|
|
_BUNDLE = {"hermes-cli": ["terminal", "process_manage", "web_search", "read_file"],
|
|
"terminal": ["terminal", "process_manage"]}
|
|
|
|
def _resolve(self, name):
|
|
return self._BUNDLE.get(name, [])
|
|
|
|
def test_composite_bundle_keeps_terminal_notice_on_default_install(self):
|
|
kept = filter_to_enabled_toolsets([_TERMINAL, _WEB, _RL], ["hermes-cli"], self._resolve)
|
|
assert [k["name"] for k in kept] == ["terminal", "web"]
|
|
|
|
def test_direct_toolset_name_and_unknown_bundle(self):
|
|
assert [k["name"] for k in filter_to_enabled_toolsets([_TERMINAL, _RL], ["terminal"], self._resolve)] == ["terminal"]
|
|
assert filter_to_enabled_toolsets([_TERMINAL], ["no-such-bundle"], self._resolve) == []
|
|
|
|
def test_empty_selection_means_everything(self):
|
|
assert filter_to_enabled_toolsets([_TERMINAL, _RL], [], self._resolve) == [_TERMINAL, _RL]
|
|
|
|
def test_resolver_error_is_not_fatal(self):
|
|
def boom(name):
|
|
raise RuntimeError("registry not ready")
|
|
assert filter_to_enabled_toolsets([_TERMINAL], ["hermes-cli"], boom) == []
|