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:
Teknium
2026-04-17 01:05:09 -07:00
committed by GitHub
parent e33cb65a98
commit 2367c6ffd5
21 changed files with 0 additions and 1946 deletions

View File

@@ -20,11 +20,6 @@ def _make_adapter(monkeypatch, **extra):
return BlueBubblesAdapter(cfg)
class TestBlueBubblesPlatformEnum:
def test_bluebubbles_enum_exists(self):
assert Platform.BLUEBUBBLES.value == "bluebubbles"
class TestBlueBubblesConfigLoading:
def test_apply_env_overrides_bluebubbles(self, monkeypatch):
monkeypatch.setenv("BLUEBUBBLES_SERVER_URL", "http://localhost:1234")
@@ -41,15 +36,6 @@ class TestBlueBubblesConfigLoading:
assert bc.extra["password"] == "secret"
assert bc.extra["webhook_port"] == 9999
def test_connected_platforms_includes_bluebubbles(self, monkeypatch):
monkeypatch.setenv("BLUEBUBBLES_SERVER_URL", "http://localhost:1234")
monkeypatch.setenv("BLUEBUBBLES_PASSWORD", "secret")
from gateway.config import GatewayConfig, _apply_env_overrides
config = GatewayConfig()
_apply_env_overrides(config)
assert Platform.BLUEBUBBLES in config.get_connected_platforms()
def test_home_channel_set_from_env(self, monkeypatch):
monkeypatch.setenv("BLUEBUBBLES_SERVER_URL", "http://localhost:1234")
monkeypatch.setenv("BLUEBUBBLES_PASSWORD", "secret")
@@ -273,29 +259,6 @@ class TestBlueBubblesGuidResolution:
assert result is None
class TestBlueBubblesToolsetIntegration:
def test_toolset_exists(self):
from toolsets import TOOLSETS
assert "hermes-bluebubbles" in TOOLSETS
def test_toolset_in_gateway_composite(self):
from toolsets import TOOLSETS
gateway = TOOLSETS["hermes-gateway"]
assert "hermes-bluebubbles" in gateway["includes"]
class TestBlueBubblesPromptHint:
def test_platform_hint_exists(self):
from agent.prompt_builder import PLATFORM_HINTS
assert "bluebubbles" in PLATFORM_HINTS
hint = PLATFORM_HINTS["bluebubbles"]
assert "iMessage" in hint
assert "plain text" in hint
class TestBlueBubblesAttachmentDownload:
"""Verify _download_attachment routes to the correct cache helper."""

View File

@@ -269,12 +269,6 @@ class TestConnect:
# ---------------------------------------------------------------------------
class TestPlatformEnum:
def test_dingtalk_in_platform_enum(self):
assert Platform.DINGTALK.value == "dingtalk"
# ---------------------------------------------------------------------------
# SDK compatibility regression tests (dingtalk-stream >= 0.20 / 0.24)
# ---------------------------------------------------------------------------

View File

@@ -25,14 +25,6 @@ from unittest.mock import patch, MagicMock, AsyncMock
from gateway.platforms.base import SendResult
class TestPlatformEnum(unittest.TestCase):
"""Verify EMAIL is in the Platform enum."""
def test_email_in_platform_enum(self):
from gateway.config import Platform
self.assertEqual(Platform.EMAIL.value, "email")
class TestConfigEnvOverrides(unittest.TestCase):
"""Verify email config is loaded from environment variables."""
@@ -72,20 +64,6 @@ class TestConfigEnvOverrides(unittest.TestCase):
_apply_env_overrides(config)
self.assertNotIn(Platform.EMAIL, config.platforms)
@patch.dict(os.environ, {
"EMAIL_ADDRESS": "hermes@test.com",
"EMAIL_PASSWORD": "secret",
"EMAIL_IMAP_HOST": "imap.test.com",
"EMAIL_SMTP_HOST": "smtp.test.com",
}, clear=False)
def test_email_in_connected_platforms(self):
from gateway.config import GatewayConfig, Platform, _apply_env_overrides
config = GatewayConfig()
_apply_env_overrides(config)
connected = config.get_connected_platforms()
self.assertIn(Platform.EMAIL, connected)
class TestCheckRequirements(unittest.TestCase):
"""Verify check_email_requirements function."""
@@ -257,121 +235,6 @@ class TestExtractAttachments(unittest.TestCase):
mock_cache.assert_called_once()
class TestAuthorizationMaps(unittest.TestCase):
"""Verify email is in authorization maps in gateway/run.py."""
def test_email_in_adapter_factory(self):
"""Email adapter creation branch should exist."""
import gateway.run
import inspect
source = inspect.getsource(gateway.run.GatewayRunner._create_adapter)
self.assertIn("Platform.EMAIL", source)
def test_email_in_allowed_users_map(self):
"""EMAIL_ALLOWED_USERS should be in platform_env_map."""
import gateway.run
import inspect
source = inspect.getsource(gateway.run.GatewayRunner._is_user_authorized)
self.assertIn("EMAIL_ALLOWED_USERS", source)
def test_email_in_allow_all_map(self):
"""EMAIL_ALLOW_ALL_USERS should be in platform_allow_all_map."""
import gateway.run
import inspect
source = inspect.getsource(gateway.run.GatewayRunner._is_user_authorized)
self.assertIn("EMAIL_ALLOW_ALL_USERS", source)
class TestSendMessageToolRouting(unittest.TestCase):
"""Verify email routing in send_message_tool."""
def test_email_in_platform_map(self):
import tools.send_message_tool as smt
import inspect
source = inspect.getsource(smt._handle_send)
self.assertIn('"email"', source)
def test_send_to_platform_has_email_branch(self):
import tools.send_message_tool as smt
import inspect
source = inspect.getsource(smt._send_to_platform)
self.assertIn("Platform.EMAIL", source)
class TestCronDelivery(unittest.TestCase):
"""Verify email in cron scheduler platform_map."""
def test_email_in_cron_platform_map(self):
import cron.scheduler
import inspect
source = inspect.getsource(cron.scheduler)
self.assertIn('"email"', source)
class TestToolset(unittest.TestCase):
"""Verify email toolset is registered."""
def test_email_toolset_exists(self):
from toolsets import TOOLSETS
self.assertIn("hermes-email", TOOLSETS)
def test_email_in_gateway_toolset(self):
from toolsets import TOOLSETS
includes = TOOLSETS["hermes-gateway"]["includes"]
self.assertIn("hermes-email", includes)
class TestPlatformHints(unittest.TestCase):
"""Verify email platform hint is registered."""
def test_email_in_platform_hints(self):
from agent.prompt_builder import PLATFORM_HINTS
self.assertIn("email", PLATFORM_HINTS)
self.assertIn("email", PLATFORM_HINTS["email"].lower())
class TestChannelDirectory(unittest.TestCase):
"""Verify email in channel directory session-based discovery."""
def test_email_in_session_discovery(self):
from gateway.config import Platform
# Verify email is a Platform enum member — the dynamic loop in
# build_channel_directory iterates all Platform members, so email
# is included automatically as long as it's in the enum.
email_values = [p.value for p in Platform]
self.assertIn("email", email_values)
class TestGatewaySetup(unittest.TestCase):
"""Verify email in gateway setup wizard."""
def test_email_in_platforms_list(self):
from hermes_cli.gateway import _PLATFORMS
keys = [p["key"] for p in _PLATFORMS]
self.assertIn("email", keys)
def test_email_has_setup_vars(self):
from hermes_cli.gateway import _PLATFORMS
email_platform = next(p for p in _PLATFORMS if p["key"] == "email")
var_names = [v["name"] for v in email_platform["vars"]]
self.assertIn("EMAIL_ADDRESS", var_names)
self.assertIn("EMAIL_PASSWORD", var_names)
self.assertIn("EMAIL_IMAP_HOST", var_names)
self.assertIn("EMAIL_SMTP_HOST", var_names)
class TestEnvExample(unittest.TestCase):
"""Verify .env.example has email config."""
def test_env_example_has_email_vars(self):
env_path = Path(__file__).resolve().parents[2] / ".env.example"
content = env_path.read_text()
self.assertIn("EMAIL_ADDRESS", content)
self.assertIn("EMAIL_PASSWORD", content)
self.assertIn("EMAIL_IMAP_HOST", content)
self.assertIn("EMAIL_SMTP_HOST", content)
class TestDispatchMessage(unittest.TestCase):
"""Test email message dispatch logic."""

View File

@@ -29,13 +29,6 @@ def _mock_event_dispatcher_builder(mock_handler_class):
return mock_builder
class TestPlatformEnum(unittest.TestCase):
def test_feishu_in_platform_enum(self):
from gateway.config import Platform
self.assertEqual(Platform.FEISHU.value, "feishu")
class TestConfigEnvOverrides(unittest.TestCase):
@patch.dict(os.environ, {
"FEISHU_APP_ID": "cli_xxx",
@@ -82,24 +75,6 @@ class TestConfigEnvOverrides(unittest.TestCase):
self.assertIn(Platform.FEISHU, config.get_connected_platforms())
class TestGatewayIntegration(unittest.TestCase):
def test_feishu_in_adapter_factory(self):
source = Path("gateway/run.py").read_text(encoding="utf-8")
self.assertIn("Platform.FEISHU", source)
self.assertIn("FeishuAdapter", source)
def test_feishu_in_authorization_maps(self):
source = Path("gateway/run.py").read_text(encoding="utf-8")
self.assertIn("FEISHU_ALLOWED_USERS", source)
self.assertIn("FEISHU_ALLOW_ALL_USERS", source)
def test_feishu_toolset_exists(self):
from toolsets import TOOLSETS
self.assertIn("hermes-feishu", TOOLSETS)
self.assertIn("hermes-feishu", TOOLSETS["hermes-gateway"]["includes"])
class TestFeishuMessageNormalization(unittest.TestCase):
def test_normalize_merge_forward_preserves_summary_lines(self):
from gateway.platforms.feishu import normalize_feishu_message
@@ -472,27 +447,6 @@ class TestFeishuAdapterMessaging(unittest.TestCase):
self.assertEqual(info["type"], "group")
class TestAdapterModule(unittest.TestCase):
def test_adapter_requirement_helper_exists(self):
source = Path("gateway/platforms/feishu.py").read_text(encoding="utf-8")
self.assertIn("def check_feishu_requirements()", source)
self.assertIn("FEISHU_AVAILABLE", source)
def test_adapter_declares_websocket_scope(self):
source = Path("gateway/platforms/feishu.py").read_text(encoding="utf-8")
self.assertIn("Supported modes: websocket, webhook", source)
self.assertIn("FEISHU_CONNECTION_MODE", source)
def test_adapter_registers_message_read_noop_handler(self):
source = Path("gateway/platforms/feishu.py").read_text(encoding="utf-8")
self.assertIn("register_p2_im_message_message_read_v1", source)
self.assertIn("def _on_message_read_event", source)
def test_adapter_registers_reaction_and_card_handlers_for_websocket(self):
source = Path("gateway/platforms/feishu.py").read_text(encoding="utf-8")
self.assertIn("register_p2_im_message_reaction_created_v1", source)
self.assertIn("register_p2_im_message_reaction_deleted_v1", source)
self.assertIn("register_p2_card_action_trigger", source)
def test_load_settings_uses_sdk_defaults_for_invalid_ws_reconnect_values(self):
from gateway.platforms.feishu import FeishuAdapter

View File

@@ -469,18 +469,6 @@ class TestConfigIntegration:
assert ha.extra["watch_domains"] == ["climate"]
assert ha.extra["cooldown_seconds"] == 45
def test_connected_platforms_includes_ha(self):
config = GatewayConfig(
platforms={
Platform.HOMEASSISTANT: PlatformConfig(enabled=True, token="tok"),
Platform.TELEGRAM: PlatformConfig(enabled=False, token="t"),
},
)
connected = config.get_connected_platforms()
assert Platform.HOMEASSISTANT in connected
assert Platform.TELEGRAM not in connected
# ---------------------------------------------------------------------------
# send() via REST API
# ---------------------------------------------------------------------------
@@ -582,27 +570,6 @@ class TestSendViaRestApi:
# ---------------------------------------------------------------------------
class TestToolsetIntegration:
def test_homeassistant_toolset_resolves(self):
from toolsets import resolve_toolset
tools = resolve_toolset("homeassistant")
assert set(tools) == {"ha_list_entities", "ha_get_state", "ha_call_service", "ha_list_services"}
def test_gateway_toolset_includes_ha_tools(self):
from toolsets import resolve_toolset
gateway_tools = resolve_toolset("hermes-gateway")
for tool in ("ha_list_entities", "ha_get_state", "ha_call_service", "ha_list_services"):
assert tool in gateway_tools
def test_hermes_core_tools_includes_ha(self):
from toolsets import _HERMES_CORE_TOOLS
for tool in ("ha_list_entities", "ha_get_state", "ha_call_service", "ha_list_services"):
assert tool in _HERMES_CORE_TOOLS
# ---------------------------------------------------------------------------
# WebSocket URL construction
# ---------------------------------------------------------------------------

View File

@@ -239,15 +239,6 @@ def _make_fake_mautrix():
# Platform & Config
# ---------------------------------------------------------------------------
class TestMatrixPlatformEnum:
def test_matrix_enum_exists(self):
assert Platform.MATRIX.value == "matrix"
def test_matrix_in_platform_list(self):
platforms = [p.value for p in Platform]
assert "matrix" in platforms
class TestMatrixConfigLoading:
def test_apply_env_overrides_with_access_token(self, monkeypatch):
monkeypatch.setenv("MATRIX_ACCESS_TOKEN", "syt_abc123")

View File

@@ -12,15 +12,6 @@ from gateway.config import Platform, PlatformConfig
# Platform & Config
# ---------------------------------------------------------------------------
class TestMattermostPlatformEnum:
def test_mattermost_enum_exists(self):
assert Platform.MATTERMOST.value == "mattermost"
def test_mattermost_in_platform_list(self):
platforms = [p.value for p in Platform]
assert "mattermost" in platforms
class TestMattermostConfigLoading:
def test_apply_env_overrides_mattermost(self, monkeypatch):
monkeypatch.setenv("MATTERMOST_TOKEN", "mm-tok-abc123")
@@ -46,17 +37,6 @@ class TestMattermostConfigLoading:
assert Platform.MATTERMOST not in config.platforms
def test_connected_platforms_includes_mattermost(self, monkeypatch):
monkeypatch.setenv("MATTERMOST_TOKEN", "mm-tok-abc123")
monkeypatch.setenv("MATTERMOST_URL", "https://mm.example.com")
from gateway.config import GatewayConfig, _apply_env_overrides
config = GatewayConfig()
_apply_env_overrides(config)
connected = config.get_connected_platforms()
assert Platform.MATTERMOST in connected
def test_mattermost_home_channel(self, monkeypatch):
monkeypatch.setenv("MATTERMOST_TOKEN", "mm-tok-abc123")
monkeypatch.setenv("MATTERMOST_URL", "https://mm.example.com")

View File

@@ -42,15 +42,6 @@ def _stub_rpc(return_value):
# Platform & Config
# ---------------------------------------------------------------------------
class TestSignalPlatformEnum:
def test_signal_enum_exists(self):
assert Platform.SIGNAL.value == "signal"
def test_signal_in_platform_list(self):
platforms = [p.value for p in Platform]
assert "signal" in platforms
class TestSignalConfigLoading:
def test_apply_env_overrides_signal(self, monkeypatch):
monkeypatch.setenv("SIGNAL_HTTP_URL", "http://localhost:9090")
@@ -76,18 +67,6 @@ class TestSignalConfigLoading:
assert Platform.SIGNAL not in config.platforms
def test_connected_platforms_includes_signal(self, monkeypatch):
monkeypatch.setenv("SIGNAL_HTTP_URL", "http://localhost:8080")
monkeypatch.setenv("SIGNAL_ACCOUNT", "+15551234567")
from gateway.config import GatewayConfig, _apply_env_overrides
config = GatewayConfig()
_apply_env_overrides(config)
connected = config.get_connected_platforms()
assert Platform.SIGNAL in connected
# ---------------------------------------------------------------------------
# Adapter Init & Helpers
# ---------------------------------------------------------------------------
@@ -362,15 +341,6 @@ class TestSignalAuthorization:
# Send Message Tool
# ---------------------------------------------------------------------------
class TestSignalSendMessage:
def test_signal_in_platform_map(self):
"""Signal should be in the send_message tool's platform map."""
from tools.send_message_tool import send_message_tool
# Just verify the import works and Signal is a valid platform
from gateway.config import Platform
assert Platform.SIGNAL.value == "signal"
# ---------------------------------------------------------------------------
# send_image_file method (#5105)
# ---------------------------------------------------------------------------

View File

@@ -20,9 +20,6 @@ from gateway.config import Platform, PlatformConfig, HomeChannel
class TestSmsConfigLoading:
"""Verify _apply_env_overrides wires SMS correctly."""
def test_sms_platform_enum_exists(self):
assert Platform.SMS.value == "sms"
def test_env_overrides_create_sms_config(self):
from gateway.config import load_gateway_config
@@ -56,19 +53,6 @@ class TestSmsConfigLoading:
assert hc.name == "My Phone"
assert hc.platform == Platform.SMS
def test_sms_in_connected_platforms(self):
from gateway.config import load_gateway_config
env = {
"TWILIO_ACCOUNT_SID": "ACtest123",
"TWILIO_AUTH_TOKEN": "token_abc",
}
with patch.dict(os.environ, env, clear=False):
config = load_gateway_config()
connected = config.get_connected_platforms()
assert Platform.SMS in connected
# ── Format / truncate ───────────────────────────────────────────────
class TestSmsFormatAndTruncate:
@@ -180,44 +164,6 @@ class TestSmsRequirements:
# ── Toolset verification ───────────────────────────────────────────
class TestSmsToolset:
def test_hermes_sms_toolset_exists(self):
from toolsets import get_toolset
ts = get_toolset("hermes-sms")
assert ts is not None
assert "tools" in ts
def test_hermes_sms_in_gateway_includes(self):
from toolsets import get_toolset
gw = get_toolset("hermes-gateway")
assert gw is not None
assert "hermes-sms" in gw["includes"]
def test_sms_platform_hint_exists(self):
from agent.prompt_builder import PLATFORM_HINTS
assert "sms" in PLATFORM_HINTS
assert "concise" in PLATFORM_HINTS["sms"].lower()
def test_sms_in_scheduler_platform_map(self):
"""Verify cron scheduler recognizes 'sms' as a valid platform."""
# Just check the Platform enum has SMS — the scheduler imports it dynamically
assert Platform.SMS.value == "sms"
def test_sms_in_send_message_platform_map(self):
"""Verify send_message_tool recognizes 'sms'."""
# The platform_map is built inside _handle_send; verify SMS enum exists
assert hasattr(Platform, "SMS")
def test_sms_in_cronjob_deliver_description(self):
"""Verify cronjob_tools mentions sms in deliver description."""
from tools.cronjob_tools import CRONJOB_SCHEMA
deliver_desc = CRONJOB_SCHEMA["parameters"]["properties"]["deliver"]["description"]
assert "sms" in deliver_desc.lower()
# ── Webhook host configuration ─────────────────────────────────────
class TestWebhookHostConfig:

View File

@@ -593,7 +593,3 @@ class TestInboundMessages:
await adapter._on_message(payload)
adapter.handle_message.assert_not_awaited()
class TestPlatformEnum:
def test_wecom_in_platform_enum(self):
assert Platform.WECOM.value == "wecom"