launch: remove banner and warn only when backup-relevant configs change (#15124)

This commit is contained in:
Jeffrey Morgan
2026-03-29 00:27:24 -07:00
committed by ParthSareen
parent 04e41ddcfb
commit cdd0bc48a3
5 changed files with 282 additions and 6 deletions

View File

@@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"runtime"
"strings"
"testing"
)
@@ -288,6 +289,116 @@ func TestOpenCodeEdit(t *testing.T) {
})
}
func TestOpenCodeEdit_SetsDefaultModelFromFirstSelection(t *testing.T) {
o := &OpenCode{}
tmpDir := t.TempDir()
setTestHome(t, tmpDir)
configPath := filepath.Join(tmpDir, ".config", "opencode", "opencode.json")
if err := o.Edit([]string{"kimi-k2.5:cloud", "llama3.2"}); err != nil {
t.Fatal(err)
}
data, err := os.ReadFile(configPath)
if err != nil {
t.Fatal(err)
}
var cfg map[string]any
if err := json.Unmarshal(data, &cfg); err != nil {
t.Fatal(err)
}
if got, _ := cfg["model"].(string); got != "ollama/kimi-k2.5:cloud" {
t.Fatalf("model = %q, want %q", got, "ollama/kimi-k2.5:cloud")
}
}
func TestOpenCodeEdit_OverridesExistingDefaultModel(t *testing.T) {
o := &OpenCode{}
tmpDir := t.TempDir()
setTestHome(t, tmpDir)
configDir := filepath.Join(tmpDir, ".config", "opencode")
configPath := filepath.Join(configDir, "opencode.json")
if err := os.MkdirAll(configDir, 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(configPath, []byte(`{
"$schema":"https://opencode.ai/config.json",
"model":"ollama/old-model",
"provider":{"ollama":{"models":{"old-model":{"name":"old-model"}}}}
}`), 0o644); err != nil {
t.Fatal(err)
}
if err := o.Edit([]string{"kimi-k2.5:cloud"}); err != nil {
t.Fatal(err)
}
data, err := os.ReadFile(configPath)
if err != nil {
t.Fatal(err)
}
var cfg map[string]any
if err := json.Unmarshal(data, &cfg); err != nil {
t.Fatal(err)
}
if got, _ := cfg["model"].(string); got != "ollama/kimi-k2.5:cloud" {
t.Fatalf("model = %q, want %q", got, "ollama/kimi-k2.5:cloud")
}
}
func TestPrepareEditorIntegration_OpenCodeShowsBackupWarningWhenFilesChange(t *testing.T) {
o := &OpenCode{}
tmpDir := t.TempDir()
setTestHome(t, tmpDir)
configDir := filepath.Join(tmpDir, ".config", "opencode")
configPath := filepath.Join(configDir, "opencode.json")
if err := os.MkdirAll(configDir, 0o755); err != nil {
t.Fatalf("failed to create config dir: %v", err)
}
if err := os.WriteFile(configPath, []byte(`{"provider":{"ollama":{"models":{"old-model":{"name":"old-model","_launch":true}}}}}`), 0o644); err != nil {
t.Fatalf("failed to seed config: %v", err)
}
stateDir := filepath.Join(tmpDir, ".local", "state", "opencode")
statePath := filepath.Join(stateDir, "model.json")
if err := os.MkdirAll(stateDir, 0o755); err != nil {
t.Fatalf("failed to create state dir: %v", err)
}
if err := os.WriteFile(statePath, []byte(`{"recent":[{"providerID":"ollama","modelID":"old-model"}],"favorite":[],"variant":{}}`), 0o644); err != nil {
t.Fatalf("failed to seed state: %v", err)
}
stderr := captureStderr(t, func() {
if err := prepareEditorIntegration("opencode", o, o, []string{"llama3.2"}); err != nil {
t.Fatalf("prepareEditorIntegration returned error: %v", err)
}
})
if !strings.Contains(stderr, "OpenCode configuration has been modified. Backups are saved in") {
t.Fatalf("expected OpenCode backup warning, got stderr: %q", stderr)
}
}
func TestPrepareEditorIntegration_OpenCodeSkipsBackupWarningWhenFilesUnchanged(t *testing.T) {
o := &OpenCode{}
tmpDir := t.TempDir()
setTestHome(t, tmpDir)
if err := o.Edit([]string{"llama3.2"}); err != nil {
t.Fatalf("failed to seed opencode config: %v", err)
}
stderr := captureStderr(t, func() {
if err := prepareEditorIntegration("opencode", o, o, []string{"llama3.2"}); err != nil {
t.Fatalf("prepareEditorIntegration returned error: %v", err)
}
})
if strings.Contains(stderr, "OpenCode configuration has been modified. Backups are saved in") {
t.Fatalf("did not expect OpenCode backup warning, got stderr: %q", stderr)
}
}
func assertOpenCodeModelExists(t *testing.T, path, model string) {
t.Helper()
data, err := os.ReadFile(path)