95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
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")
|
|
}
|
|
}
|