hermes-agent/tests/hermes_cli/test_managed_scope_cli_config.py
Teknium 6b81590c55
test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions
Systematic prune per AGENTS.md test policy, one pass over every major
test tree (gateway, hermes_cli, tools, agent, run_agent, plugins, cli,
cron, tui_gateway, honcho/openviking, root-level):

- DELETE: source-reading tests (read_text/getsource on prod files),
  change-detector tests (exact catalog counts, model-name snapshots,
  config version literals), mock-echo tests (assert a mock returns what
  it was told), assertion-free/trivial tests, near-duplicate
  parametrizations (boundaries + one representative kept), async/sync
  twin duplicates, cosmetic within-file variations.
- KEEP (mandatory): security/redaction/approval guards, message-role
  alternation invariants, prompt-caching/deterministic-call-id
  invariants, issue-number regression tests (deduped), E2E tests.
- 6 test files deleted outright (script-style/no-assert or fully
  redundant); conftest.py, fakes/, fixtures/ untouched.
- tests/acp/conftest.py added: autouse fixture stubs the live
  models.dev/GitHub/Copilot/Anthropic inventory fetches that ACP server
  tests performed on every session create — test_server.py 147s → 3.4s,
  and the tests are now genuinely hermetic.
- Sleep-based slowness shrunk where safe (codex_ttfb_watchdog,
  compression_concurrent_fork, etc.); no wall-clock assertion tightened.

Verification: full hermetic suite via scripts/run_tests.sh —
2439 files, 31,130 tests passed, 0 failed, 0 flaky retries, 315s wall
(baseline: 583s wall, 13,564s subprocess CPU).
2026-07-29 13:10:23 -07:00

73 lines
2.6 KiB
Python

"""Managed scope must reach cli.py's independent config loader (CLI_CONFIG).
cli.py's load_cli_config() builds config separately from
hermes_cli.config._load_config_impl, so the managed-scope merge has to be
applied in BOTH places or the interactive CLI/TUI surface (skin, display prefs)
silently ignores administrator-pinned values while `hermes config`/`doctor`
honor them. This locks the cli.py path.
"""
import importlib
import pytest
@pytest.fixture
def homes(tmp_path, monkeypatch):
home = tmp_path / "home"
home.mkdir()
managed = tmp_path / "managed"
managed.mkdir()
monkeypatch.setenv("HERMES_HOME", str(home))
monkeypatch.setenv("HERMES_MANAGED_DIR", str(managed))
import hermes_cli.config as cfg
from hermes_cli import managed_scope
cfg._LOAD_CONFIG_CACHE.clear()
cfg._RAW_CONFIG_CACHE.clear()
managed_scope.invalidate_managed_cache()
return home, managed
def _load_cli_config(home):
"""Call cli.py's standalone loader fresh.
cli.py binds ``_hermes_home = get_hermes_home()`` at import time (module
singleton), so monkeypatching HERMES_HOME after import doesn't move it.
Point the module's cached home at the test's home for the duration of the
call. (In real use cli is imported once per process with the real home, so
this only matters for tests that swap HERMES_HOME.)
"""
import cli
cli._hermes_home = home
return cli.load_cli_config()
def test_cli_config_honors_managed_skin(homes):
"""A managed display.skin must reach CLI_CONFIG (the TUI's source)."""
home, managed = homes
(home / "config.yaml").write_text("display:\n skin: user_skin\n", encoding="utf-8")
(managed / "config.yaml").write_text("display:\n skin: charizard\n", encoding="utf-8")
from hermes_cli import managed_scope
managed_scope.invalidate_managed_cache()
cfg = _load_cli_config(home)
assert (cfg.get("display") or {}).get("skin") == "charizard"
def test_cli_config_managed_leaf_preserves_user_siblings(homes):
"""Managed display.skin must not wipe a user's other display.* prefs."""
home, managed = homes
(home / "config.yaml").write_text(
"display:\n skin: user_skin\n show_reasoning: true\n", encoding="utf-8"
)
(managed / "config.yaml").write_text("display:\n skin: charizard\n", encoding="utf-8")
from hermes_cli import managed_scope
managed_scope.invalidate_managed_cache()
cfg = _load_cli_config(home)
display = cfg.get("display") or {}
assert display.get("skin") == "charizard" # managed wins
assert display.get("show_reasoning") is True # user sibling preserved