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

88 lines
3.4 KiB
Python

"""Regression tests for section-3 (``providers:``) same-endpoint grouping in
``list_authenticated_providers`` and for ``format_model_for_display``.
Salvaged with PR #36998 (@antydizajn): section 3 folds ``providers:`` entries
that share (api_url, credential, api_mode, extra_headers) into one picker row,
mirroring section 4's grouping for ``custom_providers:``. These are invariant
tests — grouping identity, header-routed separation, list-of-dict model
declarations, and display-only RID stripping.
"""
import hermes_cli.providers as providers_mod
from hermes_cli.model_switch import (
format_model_for_display,
list_authenticated_providers,
)
def _providers(monkeypatch, user_providers):
monkeypatch.setattr("agent.models_dev.fetch_models_dev", lambda: {})
monkeypatch.setattr(providers_mod, "HERMES_OVERLAYS", {})
monkeypatch.setattr("hermes_cli.models.fetch_api_models", lambda *a, **k: [])
return list_authenticated_providers(
user_providers=user_providers,
custom_providers=[],
max_models=50,
)
def _user_rows(rows):
return [p for p in rows if p.get("source") == "user-config"]
def test_same_endpoint_same_credential_entries_fold_to_one_row(monkeypatch):
"""Two providers: entries differing only by model id collapse into one
picker row carrying both models (the Palantir Foundry case)."""
rows = _user_rows(_providers(monkeypatch, {
"palantir-claude46": {
"name": "Palantir Claude 4.6 Opus",
"base_url": "https://foundry.example.com/anthropic",
"key_env": "PALANTIR_TOKEN",
"api_mode": "anthropic_messages",
"model": "ri.language-model-service..language-model.anthropic-claude-4-6-opus",
},
"palantir-claude47": {
"name": "Palantir Claude 4.7 Opus",
"base_url": "https://foundry.example.com/anthropic",
"key_env": "PALANTIR_TOKEN",
"api_mode": "anthropic_messages",
"model": "ri.language-model-service..language-model.anthropic-claude-4-7-opus",
},
}))
assert len(rows) == 1
row = rows[0]
assert row["slug"] == "palantir-claude46" # first member's slug wins
assert row["name"] == "Palantir Claude" # version suffix stripped
assert len(row["models"]) == 2
def test_different_extra_headers_keep_distinct_rows(monkeypatch):
"""Header-routed tenants behind one proxy URL are distinct endpoints —
extra_headers is part of the group identity (mirrors section 4)."""
rows = _user_rows(_providers(monkeypatch, {
"tenant-a": {
"name": "Tenant A",
"base_url": "https://proxy.example.com/v1",
"key_env": "PROXY_TOKEN",
"api_mode": "openai_chat",
"extra_headers": {"X-Tenant": "a"},
"model": "model-a",
},
"tenant-b": {
"name": "Tenant B",
"base_url": "https://proxy.example.com/v1",
"key_env": "PROXY_TOKEN",
"api_mode": "openai_chat",
"extra_headers": {"X-Tenant": "b"},
"model": "model-b",
},
}))
assert len(rows) == 2
class TestFormatModelForDisplay:
def test_palantir_rid_stripped_to_trailing_slug(self):
rid = "ri.language-model-service..language-model.anthropic-claude-4-7-opus"
assert format_model_for_display(rid) == "anthropic-claude-4-7-opus"