114 lines
2.9 KiB
Go
114 lines
2.9 KiB
Go
package task
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestCreateListAndReload(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("XDG_DATA_HOME", dir)
|
|
|
|
s1, err := Open("projkey")
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
created, err := s1.Create(" Ship task sidebar ")
|
|
if err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
if created.ID == "" || created.Title != "Ship task sidebar" || created.CreatedAt == "" || created.UpdatedAt == "" {
|
|
t.Fatalf("created task incomplete: %+v", created)
|
|
}
|
|
|
|
s2, err := Open("projkey")
|
|
if err != nil {
|
|
t.Fatalf("reopen: %v", err)
|
|
}
|
|
got := s2.List()
|
|
if len(got) != 1 {
|
|
t.Fatalf("tasks len = %d, want 1 (%v)", len(got), got)
|
|
}
|
|
if got[0].ID != created.ID || got[0].Title != "Ship task sidebar" {
|
|
t.Fatalf("reload mismatch: got %+v want %+v", got[0], created)
|
|
}
|
|
if _, err := os.Stat(s2.Path()); err != nil {
|
|
t.Fatalf("stat tasks.json: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestCreateRequiresTitle(t *testing.T) {
|
|
t.Setenv("XDG_DATA_HOME", t.TempDir())
|
|
s, err := Open("projkey")
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
if _, err := s.Create(" "); err == nil {
|
|
t.Fatalf("create with empty title should fail")
|
|
}
|
|
}
|
|
|
|
func TestRenameTask(t *testing.T) {
|
|
t.Setenv("XDG_DATA_HOME", t.TempDir())
|
|
s, err := Open("projkey")
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
created, err := s.Create("Old")
|
|
if err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
renamed, err := s.Rename(created.ID, "New")
|
|
if err != nil {
|
|
t.Fatalf("rename: %v", err)
|
|
}
|
|
if renamed.Title != "New" {
|
|
t.Fatalf("title = %q, want New", renamed.Title)
|
|
}
|
|
got, ok := s.Get(created.ID)
|
|
if !ok || got.Title != "New" {
|
|
t.Fatalf("get after rename = %+v, %v", got, ok)
|
|
}
|
|
}
|
|
|
|
func TestRegisterWorktreeDedupesByPath(t *testing.T) {
|
|
t.Setenv("XDG_DATA_HOME", t.TempDir())
|
|
s, err := Open("projkey")
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
task, err := s.Create("Worktree task")
|
|
if err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
path := filepath.Join(t.TempDir(), "repo", "..", "repo")
|
|
updated, err := s.RegisterWorktree(task.ID, Worktree{Path: path, Branch: "one", CreatedByProcessID: "p1"})
|
|
if err != nil {
|
|
t.Fatalf("register: %v", err)
|
|
}
|
|
if len(updated.Worktrees) != 1 {
|
|
t.Fatalf("worktrees len = %d, want 1", len(updated.Worktrees))
|
|
}
|
|
clean := filepath.Clean(path)
|
|
if updated.Worktrees[0].Path != clean {
|
|
t.Fatalf("path = %q, want %q", updated.Worktrees[0].Path, clean)
|
|
}
|
|
updated, err = s.RegisterWorktree(task.ID, Worktree{Path: clean, Branch: "two"})
|
|
if err != nil {
|
|
t.Fatalf("register duplicate: %v", err)
|
|
}
|
|
if len(updated.Worktrees) != 1 {
|
|
t.Fatalf("duplicate should replace, got %+v", updated.Worktrees)
|
|
}
|
|
if got := updated.Worktrees[0]; got.Branch != "two" || got.CreatedByProcessID != "p1" {
|
|
t.Fatalf("duplicate replace mismatch: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestOpenRequiresProjectKey(t *testing.T) {
|
|
if _, err := Open(""); err == nil {
|
|
t.Fatalf("open with empty project key should fail")
|
|
}
|
|
}
|