"""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"))