ajhahn.de
← eeco
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)
	}
}