Go 69 lines
package cockpit
import (
"os"
"reflect"
"testing"
)
func TestSelection_DefaultWhenMissing(t *testing.T) {
cfg := testConfig(t)
if HasSelection(cfg) {
t.Error("fresh workspace should have no selection")
}
sel := LoadSelection(cfg)
if !reflect.DeepEqual(sel.Targets, []string{"claude"}) {
t.Errorf("default targets = %v, want [claude]", sel.Targets)
}
}
func TestSelection_SaveLoadRoundTrip(t *testing.T) {
cfg := testConfig(t)
if err := SaveSelection(cfg, Selection{Targets: []string{"claude", "agents"}}); err != nil {
t.Fatal(err)
}
if !HasSelection(cfg) {
t.Error("HasSelection false after save")
}
got := LoadSelection(cfg)
if !reflect.DeepEqual(got.Targets, []string{"claude", "agents"}) {
t.Errorf("round-trip targets = %v", got.Targets)
}
}
func TestSelection_SaveSanitizes(t *testing.T) {
cfg := testConfig(t)
// Duplicates, unknowns, and blanks are dropped; order preserved.
if err := SaveSelection(cfg, Selection{Targets: []string{"cursor", "cursor", "bogus", "", "claude"}}); err != nil {
t.Fatal(err)
}
got := LoadSelection(cfg)
if !reflect.DeepEqual(got.Targets, []string{"cursor", "claude"}) {
t.Errorf("sanitized targets = %v, want [cursor claude]", got.Targets)
}
}
func TestSelection_EmptyFallsBackToDefault(t *testing.T) {
cfg := testConfig(t)
if err := SaveSelection(cfg, Selection{Targets: []string{"bogus"}}); err != nil {
t.Fatal(err)
}
// All-unknown ⇒ default written.
if got := LoadSelection(cfg); !reflect.DeepEqual(got.Targets, []string{"claude"}) {
t.Errorf("all-unknown selection should fall back to default, got %v", got.Targets)
}
}
func TestSelection_CorruptDegrades(t *testing.T) {
cfg := testConfig(t)
if err := os.MkdirAll(cfg.Workspace, 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(selectionPath(cfg), []byte("{not json"), 0o644); err != nil {
t.Fatal(err)
}
if got := LoadSelection(cfg); !reflect.DeepEqual(got.Targets, []string{"claude"}) {
t.Errorf("corrupt selection should degrade to default, got %v", got.Targets)
}
}