Files
myagents/tests/test_backends.py
Zhengshou Lai e021aa9dbf fix(backend): 改回全局 ~/.claude/settings.json + 补充测试
- claude_settings: 目标文件改为全局 ~/.claude/settings.json,与 cc-switch 行为一致
- claude_settings: 切回 claude 时保留用户已有的 ANTHROPIC_API_KEY
- backend: 修正 save_project_settings -> save_settings,提示文本同步
- test_backends: 清理未用 import
- test_entrypoints: 新增 backend 命令注册测试
- 新增 test_claude_settings / test_secrets / test_backend_command(共 36 tests)
2026-07-16 20:52:12 +08:00

95 lines
3.3 KiB
Python

"""Tests for myagents.backends."""
import pytest
from myagents.backends import (
build_provider_env,
detect_provider,
get_provider,
is_third_party,
list_providers,
normalize_provider_id,
)
class TestProviderRegistry:
def test_list_providers_includes_all(self) -> None:
ids = {p.id for p in list_providers()}
assert ids == {"deepseek", "kimi", "kimi-code", "claude"}
def test_get_provider_by_id(self) -> None:
provider = get_provider("kimi")
assert provider.id == "kimi"
assert provider.base_url == "https://api.moonshot.ai/anthropic"
def test_get_provider_normalizes_name(self) -> None:
assert get_provider("Kimi").id == "kimi"
assert get_provider("kimi_code").id == "kimi-code"
def test_unknown_provider_raises(self) -> None:
with pytest.raises(KeyError):
get_provider("openai")
class TestNormalizeProviderId:
def test_hyphenates_underscores(self) -> None:
assert normalize_provider_id("kimi_code") == "kimi-code"
def test_lowercases(self) -> None:
assert normalize_provider_id("DeepSeek") == "deepseek"
class TestBuildProviderEnv:
def test_deepseek_env(self) -> None:
provider = get_provider("deepseek")
env = build_provider_env(provider, "sk-test")
assert env["ANTHROPIC_AUTH_TOKEN"] == "sk-test"
assert env["ANTHROPIC_BASE_URL"] == "https://api.deepseek.com/anthropic"
assert env["ANTHROPIC_MODEL"] == "deepseek-v4-pro"
assert env["ANTHROPIC_DEFAULT_FABLE_MODEL"] == "deepseek-v4-pro"
def test_kimi_code_env(self) -> None:
provider = get_provider("kimi-code")
env = build_provider_env(provider, "sk-test")
assert env["ANTHROPIC_BASE_URL"] == "https://api.kimi.com/coding"
assert env["ANTHROPIC_MODEL"] == "kimi-for-coding"
def test_model_override(self) -> None:
provider = get_provider("kimi")
env = build_provider_env(provider, "sk-test", model="kimi-k2.5")
assert env["ANTHROPIC_MODEL"] == "kimi-k2.5"
def test_official_claude_returns_empty(self) -> None:
provider = get_provider("claude")
assert build_provider_env(provider, "sk-test") == {}
class TestDetectProvider:
def test_detects_deepseek(self) -> None:
env = {"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic"}
assert detect_provider(env) == get_provider("deepseek")
def test_detects_kimi_code(self) -> None:
env = {"ANTHROPIC_BASE_URL": "https://api.kimi.com/coding"}
assert detect_provider(env) == get_provider("kimi-code")
def test_no_base_url_with_api_key_is_claude(self) -> None:
env = {"ANTHROPIC_API_KEY": "sk-test"}
assert detect_provider(env) == get_provider("claude")
def test_empty_env_returns_none(self) -> None:
assert detect_provider({}) is None
def test_unknown_base_url_returns_none(self) -> None:
assert detect_provider({"ANTHROPIC_BASE_URL": "https://example.com"}) is None
class TestIsThirdParty:
def test_third_party_providers(self) -> None:
assert is_third_party(get_provider("deepseek"))
assert is_third_party(get_provider("kimi"))
assert is_third_party(get_provider("kimi-code"))
def test_claude_is_not_third_party(self) -> None:
assert not is_third_party(get_provider("claude"))