package app import ( "os" "path/filepath" "testing" ) func TestLoadSettingsDefaults(t *testing.T) { t.Setenv("XDG_CONFIG_HOME", t.TempDir()) st, path, err := loadSettings() if err != nil { t.Fatalf("loadSettings: %v", err) } if filepath.Base(path) != "settings.json" { t.Fatalf("settings path = %q", path) } if !st.AutoSummary.Enabled { t.Fatal("auto-summary should default enabled") } if st.AutoSummary.Provider != "codex" { t.Fatalf("provider = %q want codex", st.AutoSummary.Provider) } if st.AutoSummary.Cadence != "1m" { t.Fatalf("cadence = %q want 1m", st.AutoSummary.Cadence) } if got := st.AutoSummary.modelFor("codex"); got != "gpt-5.4-mini" { t.Fatalf("codex model = %q", got) } if got := st.AutoSummary.modelFor("opencode"); got != "opencode-go/minimax-m2.7" { t.Fatalf("opencode model = %q", got) } } func TestSettingsCloneDoesNotShareModelMap(t *testing.T) { st := defaultSettings() cp := st.clone() cp.AutoSummary.Models["codex"] = "changed" if st.AutoSummary.Models["codex"] == "changed" { t.Fatal("clone shared Models map with original") } a := st.AutoSummary.clone() a.Models["opencode"] = "changed" if st.AutoSummary.Models["opencode"] == "changed" { t.Fatal("autoSummarySettings clone shared Models map with original") } } func TestSaveAndLoadSettings(t *testing.T) { dir := t.TempDir() t.Setenv("XDG_CONFIG_HOME", dir) st := defaultSettings() st.AutoSummary.Provider = "opencode" st.AutoSummary.Models["opencode"] = "minimax/test" path := filepath.Join(dir, "patterm", "settings.json") if err := saveSettings(path, st); err != nil { t.Fatalf("saveSettings: %v", err) } if _, err := os.Stat(path); err != nil { t.Fatalf("settings file missing: %v", err) } got, _, err := loadSettings() if err != nil { t.Fatalf("loadSettings: %v", err) } if got.AutoSummary.Provider != "opencode" { t.Fatalf("provider = %q", got.AutoSummary.Provider) } if got.AutoSummary.modelFor("opencode") != "minimax/test" { t.Fatalf("opencode model = %q", got.AutoSummary.modelFor("opencode")) } }