Files
2026-06-02 23:14:41 +08:00

136 lines
3.5 KiB
Go

package claudecode
import (
"testing"
"github.com/chenhg5/cc-connect/core"
)
func TestNew_ParsesProjectEnvFromOpts(t *testing.T) {
opts := map[string]any{
"work_dir": "/tmp/test",
"run_as_user": "skip-lookpath",
"env": map[string]string{
"ANTHROPIC_BASE_URL": "https://api.kimi.com/coding",
"ANTHROPIC_AUTH_TOKEN": "sk-kimi-test",
"ANTHROPIC_MODEL": "K2.6",
"ANTHROPIC_REASONING_MODEL": "K2.6",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "K2.6",
},
}
a, err := New(opts)
if err != nil {
t.Fatalf("New() error: %v", err)
}
agent := a.(*Agent)
agent.mu.Lock()
defer agent.mu.Unlock()
if len(agent.configEnv) != 5 {
t.Fatalf("expected 5 env vars, got %d: %v", len(agent.configEnv), agent.configEnv)
}
envMap := envSliceToMap(agent.configEnv)
if got := envMap["ANTHROPIC_BASE_URL"]; got != "https://api.kimi.com/coding" {
t.Errorf("ANTHROPIC_BASE_URL = %q, want %q", got, "https://api.kimi.com/coding")
}
if got := envMap["ANTHROPIC_AUTH_TOKEN"]; got != "sk-kimi-test" {
t.Errorf("ANTHROPIC_AUTH_TOKEN = %q, want %q", got, "sk-kimi-test")
}
if got := envMap["ANTHROPIC_MODEL"]; got != "K2.6" {
t.Errorf("ANTHROPIC_MODEL = %q, want %q", got, "K2.6")
}
}
func TestNew_ParsesProjectEnvFromMapStringAny(t *testing.T) {
opts := map[string]any{
"work_dir": "/tmp/test",
"run_as_user": "test-user",
"env": map[string]any{
"ANTHROPIC_BASE_URL": "https://api.mimo.com/v1",
"ANTHROPIC_AUTH_TOKEN": "sk-mimo-test",
"ANTHROPIC_MODEL": "mimo-large",
},
}
a, err := New(opts)
if err != nil {
t.Fatalf("New() error: %v", err)
}
agent := a.(*Agent)
agent.mu.Lock()
defer agent.mu.Unlock()
envMap := envSliceToMap(agent.configEnv)
if got := envMap["ANTHROPIC_BASE_URL"]; got != "https://api.mimo.com/v1" {
t.Errorf("ANTHROPIC_BASE_URL = %q, want %q", got, "https://api.mimo.com/v1")
}
if got := envMap["ANTHROPIC_MODEL"]; got != "mimo-large" {
t.Errorf("ANTHROPIC_MODEL = %q, want %q", got, "mimo-large")
}
}
func TestNew_NoEnvOpts(t *testing.T) {
opts := map[string]any{
"work_dir": "/tmp/test",
"run_as_user": "test-user",
}
a, err := New(opts)
if err != nil {
t.Fatalf("New() error: %v", err)
}
agent := a.(*Agent)
agent.mu.Lock()
defer agent.mu.Unlock()
if len(agent.configEnv) != 0 {
t.Fatalf("expected 0 env vars when no env in opts, got %d: %v", len(agent.configEnv), agent.configEnv)
}
}
func TestNew_ProjectEnvOverridesProviderEnv(t *testing.T) {
opts := map[string]any{
"work_dir": "/tmp/test",
"run_as_user": "test-user",
"env": map[string]string{
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/v1",
"ANTHROPIC_AUTH_TOKEN": "sk-deepseek-test",
"ANTHROPIC_MODEL": "deepseek-chat",
},
}
a, err := New(opts)
if err != nil {
t.Fatalf("New() error: %v", err)
}
agent := a.(*Agent)
// Set providers to simulate a provider being configured
agent.providers = []core.ProviderConfig{
{
Name: "deepseek",
BaseURL: "https://api.deepseek.com/v1",
APIKey: "sk-deepseek-test",
Model: "deepseek-chat",
},
}
agent.activeIdx = 0
// runtimeEnvLocked merges configEnv + providerEnv + sessionEnv
// configEnv (from opts["env"]) should be present
env := agent.runtimeEnvLocked()
envMap := envSliceToMap(env)
if got := envMap["ANTHROPIC_BASE_URL"]; got != "https://api.deepseek.com/v1" {
t.Errorf("ANTHROPIC_BASE_URL = %q, want %q", got, "https://api.deepseek.com/v1")
}
if got := envMap["ANTHROPIC_MODEL"]; got != "deepseek-chat" {
t.Errorf("ANTHROPIC_MODEL = %q, want %q", got, "deepseek-chat")
}
}