byteclaw/internal/config/presets_test.go

76 lines
2.2 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
)
func load(t *testing.T, yaml string) (Config, error) {
t.Helper()
p := filepath.Join(t.TempDir(), "c.yaml")
os.WriteFile(p, []byte("auth_token: aaaaaaaaaaaaaaaaaaaa\n"+yaml), 0o600)
return Load(p)
}
func TestPresetDahl(t *testing.T) {
t.Setenv("DAHL_API_KEY", "dahl_test")
c, err := load(t, "llm:\n provider: dahl\n")
if err != nil {
t.Fatal(err)
}
if c.LLM.BaseURL != "https://inference.dahl.global/v1" || c.LLM.Model != "MiniMaxAI/MiniMax-M2.7" || c.LLM.APIKey != "dahl_test" {
t.Fatalf("%+v", c.LLM)
}
}
func TestPresetGonkaRouterViaEnv(t *testing.T) {
t.Setenv("BYTECLAW_LLM_PROVIDER", "GonkaRouter")
t.Setenv("GONKAROUTER_API_KEY", "sk-g")
c, err := load(t, "")
if err != nil {
t.Fatal(err)
}
if c.LLM.Provider != "gonkarouter" || c.LLM.BaseURL != "https://api.gonkarouter.io/v1" || c.LLM.Model != "MiniMaxAI/MiniMax-M2.7" || c.LLM.APIKey != "sk-g" {
t.Fatalf("%+v", c.LLM)
}
}
func TestPresetExplicitValuesWin(t *testing.T) {
t.Setenv("GONKAROUTER_API_KEY", "from-env")
c, err := load(t, "llm:\n provider: gonkarouter\n model: zai-org/GLM-5.3-Flash\n api_key: explicit\n")
if err != nil {
t.Fatal(err)
}
if c.LLM.Model != "zai-org/GLM-5.3-Flash" || c.LLM.APIKey != "explicit" || c.LLM.BaseURL != "https://api.gonkarouter.io/v1" {
t.Fatalf("%+v", c.LLM)
}
}
func TestPresetDefaultIsOpenAI(t *testing.T) {
c, err := load(t, "")
if err != nil || c.LLM.Provider != "openai" || c.LLM.BaseURL != "https://api.openai.com/v1" {
t.Fatalf("%+v %v", c.LLM, err)
}
}
func TestPresetUnknownAndCustom(t *testing.T) {
if _, err := load(t, "llm:\n provider: nope\n"); err == nil {
t.Fatal("unknown provider must fail")
}
if _, err := load(t, "llm:\n provider: custom\n"); err == nil {
t.Fatal("custom without base_url/model must fail validation")
}
c, err := load(t, "llm:\n provider: custom\n base_url: http://x/v1\n model: m\n")
if err != nil || c.LLM.BaseURL != "http://x/v1" {
t.Fatalf("%+v %v", c.LLM, err)
}
}
func TestAllPresetsComplete(t *testing.T) {
for n, p := range Presets {
if p.Name != n || p.BaseURL == "" || p.DefaultModel == "" || p.Source == "" {
t.Errorf("incomplete preset %q: %+v", n, p)
}
}
}