mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
test: remove 169 change-detector tests across 21 files (#11472)
First pass of test-suite reduction to address flaky CI and bloat. Removed tests that fall into these change-detector patterns: 1. Source-grep tests (tests/gateway/test_feishu.py, test_email.py): tests that call inspect.getsource() on production modules and grep for string literals. Break on any refactor/rename even when behavior is correct. 2. Platform enum tautologies (every gateway/test_X.py): assertions like `Platform.X.value == 'x'` duplicated across ~9 adapter test files. 3. Toolset/PLATFORM_HINTS/setup-wizard registry-presence checks: tests that only verify a key exists in a dict. Data-layout tests, not behavior. 4. Argparse wiring tests (test_argparse_flag_propagation, test_subparser_routing _fallback): tests that do parser.parse_args([...]) then assert args.field. Tests Python's argparse, not our code. 5. Pure dispatch tests (test_plugins_cmd.TestPluginsCommandDispatch): patch cmd_X, call plugins_command with matching action, assert mock called. Tests the if/elif chain, not behavior. 6. Kwarg-to-mock verification (test_auxiliary_client ~45 tests, test_web_tools_config, test_gemini_cloudcode, test_retaindb_plugin): tests that mock the external API client, call our function, and assert exact kwargs. Break on refactor even when behavior is preserved. 7. Schedule-internal "function-was-called" tests (acp/test_server scheduling tests): tests that patch own helper method, then assert it was called. Kept behavioral tests throughout: error paths (pytest.raises), security tests (path traversal, SSRF, redaction), message alternation invariants, provider API format conversion, streaming logic, memory contract, real config load/merge tests. Net reduction: 169 tests removed. 38 empty classes cleaned up. Collected before: 12,522 tests Collected after: 12,353 tests
This commit is contained in:
parent
e33cb65a98
commit
2367c6ffd5
21 changed files with 0 additions and 1946 deletions
|
|
@ -64,85 +64,3 @@ def _safe_parse(parser, subparsers, argv):
|
|||
subparsers.required = False
|
||||
return parser.parse_args(argv)
|
||||
|
||||
|
||||
class TestSubparserRoutingFallback:
|
||||
"""Verify the bpo-9338 defensive routing works for all key cases."""
|
||||
|
||||
def test_direct_subcommand(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["model"])
|
||||
assert args.command == "model"
|
||||
|
||||
def test_subcommand_with_flags(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["--yolo", "model"])
|
||||
assert args.command == "model"
|
||||
assert args.yolo is True
|
||||
|
||||
def test_bare_hermes_defaults_to_none(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, [])
|
||||
assert args.command is None
|
||||
|
||||
def test_flags_only_defaults_to_none(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["--yolo"])
|
||||
assert args.command is None
|
||||
assert args.yolo is True
|
||||
|
||||
def test_continue_flag_alone(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-c"])
|
||||
assert args.command is None
|
||||
assert args.continue_last is True
|
||||
|
||||
def test_continue_with_session_name(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-c", "myproject"])
|
||||
assert args.command is None
|
||||
assert args.continue_last == "myproject"
|
||||
|
||||
def test_continue_with_subcommand_name_as_session(self):
|
||||
"""Edge case: session named 'model' — should be treated as session name, not subcommand."""
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-c", "model"])
|
||||
assert args.command is None
|
||||
assert args.continue_last == "model"
|
||||
|
||||
def test_continue_with_session_then_subcommand(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-c", "myproject", "model"])
|
||||
assert args.command == "model"
|
||||
assert args.continue_last == "myproject"
|
||||
|
||||
def test_chat_with_query(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["chat", "-q", "hello"])
|
||||
assert args.command == "chat"
|
||||
assert args.query == "hello"
|
||||
|
||||
def test_resume_flag(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-r", "abc123"])
|
||||
assert args.command is None
|
||||
assert args.resume == "abc123"
|
||||
|
||||
def test_resume_with_subcommand(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-r", "abc123", "chat"])
|
||||
assert args.command == "chat"
|
||||
assert args.resume == "abc123"
|
||||
|
||||
def test_skills_flag_with_subcommand(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["-s", "myskill", "chat"])
|
||||
assert args.command == "chat"
|
||||
assert args.skills == ["myskill"]
|
||||
|
||||
def test_all_flags_with_subcommand(self):
|
||||
parser, sub = _build_parser()
|
||||
args = _safe_parse(parser, sub, ["--yolo", "-w", "-s", "myskill", "model"])
|
||||
assert args.command == "model"
|
||||
assert args.yolo is True
|
||||
assert args.worktree is True
|
||||
assert args.skills == ["myskill"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue