package settings import ( "os" "path/filepath" "testing" ) func TestLoadActionsOrSeedCreatesBuiltins(t *testing.T) { dir := t.TempDir() store, err := LoadActionsOrSeed(dir) if err != nil { t.Fatalf("LoadActionsOrSeed: %v", err) } if len(store.Actions) != 4 { t.Fatalf("expected 4 builtins, got %d", len(store.Actions)) } for _, action := range store.Actions { if !action.Builtin { t.Fatalf("expected builtin action, got %#v", action) } } path := filepath.Join(dir, ActionsFileName) if _, err := os.Stat(path); err != nil { t.Fatalf("expected actions.json to exist: %v", err) } reloaded, err := LoadActions(dir) if err != nil { t.Fatalf("LoadActions: %v", err) } if len(reloaded.Actions) != 4 { t.Fatalf("reloaded len = %d", len(reloaded.Actions)) } } func TestActionsRoundTrip(t *testing.T) { dir := t.TempDir() store := ActionStore{ Actions: append(DefaultBuiltinActions(), Action{ ID: "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee", Name: "Custom", Description: "A custom shell action", Kind: ActionKindShell, Body: "echo hello", Env: []ActionEnvVar{ {Name: "APP_HOME", Value: "/opt/app"}, }, Builtin: false, }), } if err := SaveActions(dir, store); err != nil { t.Fatalf("SaveActions: %v", err) } loaded, err := LoadActions(dir) if err != nil { t.Fatalf("LoadActions: %v", err) } if len(loaded.Actions) != 5 { t.Fatalf("loaded len = %d", len(loaded.Actions)) } custom := loaded.Actions[4] if custom.Name != "Custom" || len(custom.Env) != 1 || custom.Env[0].Name != "APP_HOME" { t.Fatalf("custom = %#v", custom) } }