package persist import ( "os" "reflect" "testing" ) func TestSaveAndReloadEntry(t *testing.T) { dir := t.TempDir() t.Setenv("XDG_DATA_HOME", dir) s1, err := Open("projkey") if err != nil { t.Fatalf("open: %v", err) } if got := s1.List(); len(got) != 0 { t.Fatalf("fresh store should be empty, got %v", got) } want := Entry{ ID: "p_abc123", Name: "bun-dev", Argv: []string{"sh", "-lc", "bun run dev"}, WorkDir: "/tmp/proj", PresetRef: "shell", AutoRestart: true, } if err := s1.Save(want); err != nil { t.Fatalf("save: %v", err) } s2, err := Open("projkey") if err != nil { t.Fatalf("reopen: %v", err) } got := s2.List() if len(got) != 1 || !reflect.DeepEqual(got[0], want) { t.Fatalf("reload mismatch: got %v want [%v]", got, want) } if _, err := os.Stat(s2.Path()); err != nil { t.Fatalf("stat processes.json: %v", err) } } func TestRemoveEntry(t *testing.T) { dir := t.TempDir() t.Setenv("XDG_DATA_HOME", dir) s, err := Open("projkey") if err != nil { t.Fatalf("open: %v", err) } if err := s.Save(Entry{ID: "a", Name: "a", Argv: []string{"a"}}); err != nil { t.Fatalf("save a: %v", err) } if err := s.Save(Entry{ID: "b", Name: "b", Argv: []string{"b"}}); err != nil { t.Fatalf("save b: %v", err) } if err := s.Remove("a"); err != nil { t.Fatalf("remove a: %v", err) } got := s.List() if len(got) != 1 || got[0].ID != "b" { t.Fatalf("after remove a, got %v", got) } // Removing a non-existent entry is a no-op. if err := s.Remove("missing"); err != nil { t.Fatalf("remove missing: %v", err) } } func TestSaveUpdatesExistingEntry(t *testing.T) { dir := t.TempDir() t.Setenv("XDG_DATA_HOME", dir) s, err := Open("projkey") if err != nil { t.Fatalf("open: %v", err) } if err := s.Save(Entry{ID: "a", Name: "old"}); err != nil { t.Fatalf("save: %v", err) } if err := s.Save(Entry{ID: "a", Name: "new", AutoRestart: true}); err != nil { t.Fatalf("update: %v", err) } got := s.List() if len(got) != 1 || got[0].Name != "new" || !got[0].AutoRestart { t.Fatalf("update mismatch: %v", got) } } func TestOpenRequiresProjectKey(t *testing.T) { if _, err := Open(""); err == nil { t.Fatalf("open with empty project key should fail") } }