fix(tests): resolve 10 CI failures across hooks, tiktoken, plugins (#3848)

test_hooks.py (7 failures): Built-in boot-md hook was always loaded
by _register_builtin_hooks(), adding +1 to every expected hook count.
Mock out built-in registration in TestDiscoverAndLoad so tests isolate
user-hook discovery logic.

test_tool_token_estimation.py (2 failures): tiktoken is not in
core/[all] dependencies. The estimation function gracefully returns {}
when tiktoken is missing, but tests expected non-empty results. Added
skipif markers for tests that need tiktoken.

test_plugins_cmd.py (1 failure): bare 'hermes plugins' now dispatches
to cmd_toggle() (interactive curses UI) instead of cmd_list(). Updated
test to match the new behavior.
This commit is contained in:
Teknium
2026-03-29 20:05:59 -07:00
committed by GitHub
parent 3e2c8c529b
commit 2d264a4562
3 changed files with 27 additions and 10 deletions

View File

@@ -4,10 +4,20 @@ from unittest.mock import patch
import pytest
# tiktoken is not in core/[all] deps — skip estimation tests when unavailable
_has_tiktoken = True
try:
import tiktoken # noqa: F401
except ImportError:
_has_tiktoken = False
_needs_tiktoken = pytest.mark.skipif(not _has_tiktoken, reason="tiktoken not installed")
# ─── Token Estimation Tests ──────────────────────────────────────────────────
@_needs_tiktoken
def test_estimate_tool_tokens_returns_positive_counts():
"""_estimate_tool_tokens should return a non-empty dict with positive values."""
from hermes_cli.tools_config import _estimate_tool_tokens, _tool_token_cache
@@ -26,6 +36,7 @@ def test_estimate_tool_tokens_returns_positive_counts():
assert count > 0, f"Tool {name} has non-positive token count: {count}"
@_needs_tiktoken
def test_estimate_tool_tokens_is_cached():
"""Second call should return the same cached dict object."""
import hermes_cli.tools_config as tc
@@ -60,6 +71,7 @@ def test_estimate_tool_tokens_returns_empty_when_tiktoken_unavailable(monkeypatc
tc._tool_token_cache = None
@_needs_tiktoken
def test_estimate_tool_tokens_covers_known_tools():
"""Should include schemas for well-known tools like terminal, web_search."""
import hermes_cli.tools_config as tc