6b81590c55
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).
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
"""Tests for `_pin_kanban_board_env` helper invoked by `cmd_chat`.
|
|
|
|
Regression coverage for #20074: a chat session must export the active kanban
|
|
board into `HERMES_KANBAN_BOARD` at boot so subprocess shell-outs (e.g.
|
|
`hermes kanban …`) inherit the same board the in-process kanban tools resolve.
|
|
Without this, a concurrent `hermes kanban boards switch` from another session
|
|
can flip the global current-board file mid-turn and silently divert the
|
|
shell calls to a different DB.
|
|
"""
|
|
import importlib
|
|
import os
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _isolate_kanban_board_env():
|
|
"""Snapshot `HERMES_KANBAN_BOARD` and restore it after the test.
|
|
|
|
`_pin_kanban_board_env()` writes to ``os.environ`` directly, bypassing
|
|
any ``monkeypatch.setenv`` tracking. Without this fixture the mutation
|
|
leaks into subsequent tests and breaks anything that resolves a kanban
|
|
path from the env (e.g. ``TestSharedBoardPaths`` in test_kanban_db.py).
|
|
"""
|
|
prev = os.environ.get("HERMES_KANBAN_BOARD")
|
|
os.environ.pop("HERMES_KANBAN_BOARD", None)
|
|
try:
|
|
yield
|
|
finally:
|
|
if prev is None:
|
|
os.environ.pop("HERMES_KANBAN_BOARD", None)
|
|
else:
|
|
os.environ["HERMES_KANBAN_BOARD"] = prev
|
|
|
|
|
|
def test_pin_writes_resolved_board_when_env_unset(monkeypatch):
|
|
main_mod = importlib.import_module("hermes_cli.main")
|
|
|
|
import hermes_cli.kanban_db as kdb
|
|
monkeypatch.setattr(kdb, "get_current_board", lambda: "space")
|
|
|
|
main_mod._pin_kanban_board_env()
|
|
|
|
assert main_mod.os.environ.get("HERMES_KANBAN_BOARD") == "space"
|
|
|
|
|
|
def test_pin_does_not_overwrite_existing_env(monkeypatch):
|
|
monkeypatch.setenv("HERMES_KANBAN_BOARD", "preset")
|
|
main_mod = importlib.import_module("hermes_cli.main")
|
|
|
|
import hermes_cli.kanban_db as kdb
|
|
|
|
def _explode():
|
|
raise AssertionError("get_current_board must not be called when env is set")
|
|
|
|
monkeypatch.setattr(kdb, "get_current_board", _explode)
|
|
|
|
main_mod._pin_kanban_board_env()
|
|
|
|
assert main_mod.os.environ.get("HERMES_KANBAN_BOARD") == "preset"
|
|
|
|
|