Files
MyGoNavi/internal/ai/service/service_codebuddy_test.go
Syngnat f457f6aaca feat(ai): 接入 CodeBuddy CLI 并兼容官方登录态
- 新增 CodeBuddy CLI provider,支持 codebuddy/cbc 命令调用与输出解析
- 将 Base URL、API Key/Auth Token、自定义请求头映射到 CodeBuddy CLI 环境变量
- 扩展 custom provider 路由与测试链路,兼容空 Base URL 和 CLI 默认模型选择
- AI 设置新增 CodeBuddy 预设,并补齐 preset 回显识别与匹配逻辑
- 修正就绪态、模型列表与表单校验,允许留空凭证直接复用本机已登录账号
- 补充前后端定向测试并覆盖 CodeBuddy 配置展示文案

Close #574
2026-06-18 12:06:58 +08:00

62 lines
1.7 KiB
Go

package aiservice
import (
"testing"
"GoNavi-Wails/internal/ai"
)
func TestAIListModels_ReturnsStaticModelsForCodeBuddyCLIWithoutRemoteFetch(t *testing.T) {
service := NewService()
service.providers = []ai.ProviderConfig{
{
ID: "provider-codebuddy",
Type: "custom",
APIFormat: "codebuddy-cli",
Models: []string{"claude-sonnet-4", "gpt-4.1"},
},
}
service.activeProvider = "provider-codebuddy"
result := service.AIListModels()
if result["success"] != true {
t.Fatalf("expected AIListModels to succeed, got %#v", result)
}
models, ok := result["models"].([]string)
if !ok {
t.Fatalf("expected []string models, got %#v", result["models"])
}
if len(models) != 2 || models[0] != "claude-sonnet-4" {
t.Fatalf("expected static CodeBuddy models, got %#v", models)
}
if source, _ := result["source"].(string); source != "static" {
t.Fatalf("expected static source, got %#v", result["source"])
}
}
func TestAITestProvider_UsesCodeBuddyCLIHealthCheck(t *testing.T) {
originalHealthCheckFunc := codebuddyCLIHealthCheckFunc
defer func() {
codebuddyCLIHealthCheckFunc = originalHealthCheckFunc
}()
var received ai.ProviderConfig
codebuddyCLIHealthCheckFunc = func(config ai.ProviderConfig) error {
received = config
return nil
}
service := NewService()
result := service.AITestProvider(ai.ProviderConfig{
Type: "custom",
APIFormat: "codebuddy-cli",
APIKey: "cb-test",
})
if result["success"] != true {
t.Fatalf("expected AITestProvider to succeed, got %#v", result)
}
if received.APIFormat != "codebuddy-cli" {
t.Fatalf("expected CodeBuddy test to use codebuddy-cli api format, got %q", received.APIFormat)
}
}