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) } }