mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-01 01:51:44 +00:00
test(cli): cover minimax-oauth resolution, refresh, menu wiring
Add and extend tests for the minimax-oauth provider across three test
modules.
New file: tests/test_minimax_oauth.py (15 tests)
- test_pkce_pair_produces_valid_s256: verifies PKCE verifier/challenge
pair produces a valid S256 hash and correct lengths
- test_request_user_code_happy_path: mocks httpx, verifies correct
POST parameters and response parsing
- test_request_user_code_state_mismatch_raises: verifies CSRF guard
- test_request_user_code_non_200_raises: verifies HTTP error handling
- test_poll_token_pending_then_success: verifies polling loop retries
on 'pending' and returns on 'success'
- test_poll_token_error_raises: verifies 'error' status raises AuthError
- test_poll_token_timeout_raises: verifies deadline expiry raises
- test_refresh_skip_when_not_expired: verifies no HTTP call when token
is fresh
- test_refresh_updates_access_token: verifies new access/refresh tokens
stored on successful refresh
- test_refresh_reuse_triggers_relogin_required: verifies
relogin_required=True on invalid_grant/refresh_token_reused
- test_resolve_credentials_requires_login: verifies AuthError when no
stored state
- test_provider_registry_contains_minimax_oauth: PROVIDER_REGISTRY key
- test_minimax_oauth_alias_resolves: portal/global/underscore aliases
- test_get_minimax_oauth_auth_status_not_logged_in
- test_get_minimax_oauth_auth_status_logged_in
Extended: tests/hermes_cli/test_runtime_provider_resolution.py
- test_minimax_oauth_runtime_returns_anthropic_messages_mode
- test_minimax_oauth_runtime_uses_inference_base_url
Extended: tests/hermes_cli/test_api_key_providers.py
- TestMinimaxOAuthProvider class (8 tests) covering registry keys,
auth_type, endpoints, client_id, aliases, CANONICAL_PROVIDERS
listing, _PROVIDER_MODELS entries, and aux model
This commit is contained in:
parent
0b2f1bb27b
commit
f3aa989b1b
3 changed files with 591 additions and 0 deletions
|
|
@ -1998,6 +1998,7 @@ class TestAzureAnthropicEnvVarHint:
|
|||
|
||||
assert resolved["api_key"] == "fallback-works"
|
||||
|
||||
|
||||
def test_no_key_anywhere_raises_helpful_error(self, monkeypatch):
|
||||
"""When nothing resolves, the error message mentions key_env as an option."""
|
||||
monkeypatch.delenv("AZURE_ANTHROPIC_KEY", raising=False)
|
||||
|
|
@ -2168,3 +2169,67 @@ class TestTencentTokenhubRuntimeResolution:
|
|||
assert resolved["base_url"] == "https://explicit-proxy.example.com/v1"
|
||||
assert resolved["source"] == "explicit"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# minimax-oauth runtime resolution tests (added by feat/minimax-oauth-provider)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def test_minimax_oauth_runtime_returns_anthropic_messages_mode(monkeypatch):
|
||||
"""resolve_runtime_provider for minimax-oauth must return api_mode='anthropic_messages'."""
|
||||
from hermes_cli.auth import MINIMAX_OAUTH_GLOBAL_INFERENCE
|
||||
|
||||
monkeypatch.setattr(rp, "resolve_provider", lambda *a, **k: "minimax-oauth")
|
||||
monkeypatch.setattr(rp, "_get_model_config", lambda: {"provider": "minimax-oauth"})
|
||||
monkeypatch.setattr(rp, "load_pool", lambda provider: None)
|
||||
monkeypatch.setattr(
|
||||
rp,
|
||||
"_resolve_named_custom_runtime",
|
||||
lambda **k: None,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
rp,
|
||||
"_resolve_explicit_runtime",
|
||||
lambda **k: None,
|
||||
)
|
||||
|
||||
fake_creds = {
|
||||
"provider": "minimax-oauth",
|
||||
"api_key": "mock-access-token",
|
||||
"base_url": MINIMAX_OAUTH_GLOBAL_INFERENCE.rstrip("/"),
|
||||
"source": "oauth",
|
||||
}
|
||||
|
||||
import hermes_cli.auth as auth_mod
|
||||
monkeypatch.setattr(auth_mod, "resolve_minimax_oauth_runtime_credentials",
|
||||
lambda **k: fake_creds)
|
||||
|
||||
resolved = rp.resolve_runtime_provider(requested="minimax-oauth")
|
||||
|
||||
assert resolved["provider"] == "minimax-oauth"
|
||||
assert resolved["api_mode"] == "anthropic_messages"
|
||||
assert resolved["api_key"] == "mock-access-token"
|
||||
|
||||
|
||||
def test_minimax_oauth_runtime_uses_inference_base_url(monkeypatch):
|
||||
"""Base URL returned by resolve_runtime_provider should match the OAuth credentials."""
|
||||
from hermes_cli.auth import MINIMAX_OAUTH_CN_INFERENCE
|
||||
|
||||
monkeypatch.setattr(rp, "resolve_provider", lambda *a, **k: "minimax-oauth")
|
||||
monkeypatch.setattr(rp, "_get_model_config", lambda: {"provider": "minimax-oauth"})
|
||||
monkeypatch.setattr(rp, "load_pool", lambda provider: None)
|
||||
monkeypatch.setattr(rp, "_resolve_named_custom_runtime", lambda **k: None)
|
||||
monkeypatch.setattr(rp, "_resolve_explicit_runtime", lambda **k: None)
|
||||
|
||||
fake_creds = {
|
||||
"provider": "minimax-oauth",
|
||||
"api_key": "cn-token",
|
||||
"base_url": MINIMAX_OAUTH_CN_INFERENCE.rstrip("/"),
|
||||
"source": "oauth",
|
||||
}
|
||||
|
||||
import hermes_cli.auth as auth_mod
|
||||
monkeypatch.setattr(auth_mod, "resolve_minimax_oauth_runtime_credentials",
|
||||
lambda **k: fake_creds)
|
||||
|
||||
resolved = rp.resolve_runtime_provider(requested="minimax-oauth")
|
||||
|
||||
assert MINIMAX_OAUTH_CN_INFERENCE.rstrip("/") in resolved["base_url"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue