opencode-cursor-agent/internal/config/config_test.go

124 lines
3.6 KiB
Go
Raw Normal View History

2026-03-30 14:09:15 +00:00
package config_test
import (
"cursor-api-proxy/internal/config"
"cursor-api-proxy/internal/env"
"path/filepath"
"strings"
"testing"
)
func TestLoadBridgeConfig_Defaults(t *testing.T) {
cfg := config.LoadBridgeConfig(env.EnvSource{}, "/workspace")
if cfg.AgentBin != "agent" {
t.Errorf("AgentBin = %q, want %q", cfg.AgentBin, "agent")
}
if cfg.Host != "127.0.0.1" {
t.Errorf("Host = %q, want %q", cfg.Host, "127.0.0.1")
}
if cfg.Port != 8765 {
t.Errorf("Port = %d, want 8765", cfg.Port)
}
if cfg.RequiredKey != "" {
t.Errorf("RequiredKey = %q, want empty", cfg.RequiredKey)
}
if cfg.DefaultModel != "auto" {
t.Errorf("DefaultModel = %q, want %q", cfg.DefaultModel, "auto")
}
if cfg.Force {
t.Error("Force should be false")
}
if cfg.ApproveMcps {
t.Error("ApproveMcps should be false")
}
if !cfg.StrictModel {
t.Error("StrictModel should be true")
}
if cfg.Mode != "ask" {
t.Errorf("Mode = %q, want %q", cfg.Mode, "ask")
}
if cfg.Workspace != "/workspace" {
t.Errorf("Workspace = %q, want /workspace", cfg.Workspace)
}
if !cfg.ChatOnlyWorkspace {
t.Error("ChatOnlyWorkspace should be true")
}
if cfg.WinCmdlineMax != 30000 {
t.Errorf("WinCmdlineMax = %d, want 30000", cfg.WinCmdlineMax)
}
}
func TestLoadBridgeConfig_FromEnv(t *testing.T) {
e := env.EnvSource{
"CURSOR_AGENT_BIN": "/usr/bin/agent",
"CURSOR_BRIDGE_HOST": "0.0.0.0",
"CURSOR_BRIDGE_PORT": "9999",
"CURSOR_BRIDGE_API_KEY": "sk-secret",
"CURSOR_BRIDGE_DEFAULT_MODEL": "org/claude-3-opus",
"CURSOR_BRIDGE_FORCE": "true",
"CURSOR_BRIDGE_APPROVE_MCPS": "yes",
"CURSOR_BRIDGE_STRICT_MODEL": "false",
"CURSOR_BRIDGE_WORKSPACE": "./my-workspace",
"CURSOR_BRIDGE_TIMEOUT_MS": "60000",
"CURSOR_BRIDGE_CHAT_ONLY_WORKSPACE": "false",
"CURSOR_BRIDGE_VERBOSE": "1",
"CURSOR_BRIDGE_TLS_CERT": "./certs/test.crt",
"CURSOR_BRIDGE_TLS_KEY": "./certs/test.key",
}
cfg := config.LoadBridgeConfig(e, "/tmp/project")
if cfg.AgentBin != "/usr/bin/agent" {
t.Errorf("AgentBin = %q, want /usr/bin/agent", cfg.AgentBin)
}
if cfg.Host != "0.0.0.0" {
t.Errorf("Host = %q, want 0.0.0.0", cfg.Host)
}
if cfg.Port != 9999 {
t.Errorf("Port = %d, want 9999", cfg.Port)
}
if cfg.RequiredKey != "sk-secret" {
t.Errorf("RequiredKey = %q, want sk-secret", cfg.RequiredKey)
}
if cfg.DefaultModel != "claude-3-opus" {
t.Errorf("DefaultModel = %q, want claude-3-opus", cfg.DefaultModel)
}
if !cfg.Force {
t.Error("Force should be true")
}
if !cfg.ApproveMcps {
t.Error("ApproveMcps should be true")
}
if cfg.StrictModel {
t.Error("StrictModel should be false")
}
if !filepath.IsAbs(cfg.Workspace) {
t.Errorf("Workspace should be absolute, got %q", cfg.Workspace)
}
if !strings.Contains(cfg.Workspace, "my-workspace") {
t.Errorf("Workspace %q should contain 'my-workspace'", cfg.Workspace)
}
if cfg.TimeoutMs != 60000 {
t.Errorf("TimeoutMs = %d, want 60000", cfg.TimeoutMs)
}
if cfg.ChatOnlyWorkspace {
t.Error("ChatOnlyWorkspace should be false")
}
if !cfg.Verbose {
t.Error("Verbose should be true")
}
if cfg.TLSCertPath != "/tmp/project/certs/test.crt" {
t.Errorf("TLSCertPath = %q, want /tmp/project/certs/test.crt", cfg.TLSCertPath)
}
if cfg.TLSKeyPath != "/tmp/project/certs/test.key" {
t.Errorf("TLSKeyPath = %q, want /tmp/project/certs/test.key", cfg.TLSKeyPath)
}
}
func TestLoadBridgeConfig_WideHost(t *testing.T) {
cfg := config.LoadBridgeConfig(env.EnvSource{"CURSOR_BRIDGE_HOST": "0.0.0.0"}, "/workspace")
if cfg.Host != "0.0.0.0" {
t.Errorf("Host = %q, want 0.0.0.0", cfg.Host)
}
}