hermes-agent/tests/hermes_cli/test_managed_scope_regression.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

77 lines
2.2 KiB
Python

"""Regression harness — pins config/env load behavior BEFORE managed scope exists.
Every test here must keep passing through all later phases when NO managed scope
is present. They are the 'managed scope is invisible when absent' contract.
"""
import os
import textwrap
import pytest
@pytest.fixture
def hermes_home(tmp_path, monkeypatch):
home = tmp_path / "hermes_home"
home.mkdir()
monkeypatch.setenv("HERMES_HOME", str(home))
# No managed dir: point the override at a guaranteed-absent path so a real
# /etc/hermes on the dev/CI box can't influence the test.
monkeypatch.setenv("HERMES_MANAGED_DIR", str(tmp_path / "no_such_managed_dir"))
# Clear caches so each test re-reads from disk.
import hermes_cli.config as cfg
cfg._LOAD_CONFIG_CACHE.clear()
cfg._RAW_CONFIG_CACHE.clear()
cfg.invalidate_env_cache()
return home
def _write_user_config(home, body: str):
(home / "config.yaml").write_text(textwrap.dedent(body), encoding="utf-8")
import hermes_cli.config as cfg
cfg._LOAD_CONFIG_CACHE.clear()
cfg._RAW_CONFIG_CACHE.clear()
def test_user_config_overrides_default(hermes_home, monkeypatch):
from hermes_cli.config import load_config, cfg_get
_write_user_config(
hermes_home,
"""
model:
default: user/model-x
""",
)
cfg = load_config()
assert cfg_get(cfg, "model", "default") == "user/model-x"
def test_env_expansion_in_user_config(hermes_home, monkeypatch):
from hermes_cli.config import load_config, cfg_get
monkeypatch.setenv("MY_BASE", "https://example.test")
_write_user_config(
hermes_home,
"""
providers:
custom:
base_url: ${MY_BASE}/v1
""",
)
cfg = load_config()
assert cfg_get(cfg, "providers", "custom", "base_url") == "https://example.test/v1"
def test_user_env_overrides_shell(tmp_path, monkeypatch):
from hermes_cli.env_loader import load_hermes_dotenv
home = tmp_path / "home"
home.mkdir()
(home / ".env").write_text("FOO_TOKEN=from_user_env\n", encoding="utf-8")
monkeypatch.setenv("FOO_TOKEN", "from_shell")
load_hermes_dotenv(hermes_home=str(home))
assert os.environ["FOO_TOKEN"] == "from_user_env"