Allow moving tickets between projects with P.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Skruecken
2026-10-19 14:19:10 +02:00
co-authored by Cursor
parent c5920ffd54
commit 7666715f6c
13 changed files with 369 additions and 6 deletions
+57
View File
@@ -0,0 +1,57 @@
package command_test
import (
"testing"
"time"
"task/internal/command"
"task/internal/ticket"
)
func TestMoveTicketUndo(t *testing.T) {
dir := t.TempDir()
store := ticket.NewJSONStore(dir)
timeStore := ticket.NewJSONTimeStore(dir)
h := command.NewHistory()
created, err := store.Create(ticket.Ticket{
Title: "Misfiled", ProjectID: "inbox", Status: ticket.StatusTodo,
})
if err != nil {
t.Fatal(err)
}
if _, err := timeStore.Create(ticket.TimeEntry{
TicketID: created.ID, ProjectID: "inbox", Duration: 15 * time.Minute, Source: ticket.SourceManual,
}); err != nil {
t.Fatal(err)
}
after := created
after.ProjectID = "client"
if err := h.Do(&command.MoveTicket{
Store: store, TimeStore: timeStore, Before: created, After: after,
}); err != nil {
t.Fatal(err)
}
list, _ := store.List("client")
if len(list) != 1 {
t.Fatalf("client len=%d", len(list))
}
entries, _ := timeStore.ListByTicket(created.ID)
if len(entries) != 1 || entries[0].ProjectID != "client" {
t.Fatalf("time entries: %+v", entries)
}
if err := h.Undo(); err != nil {
t.Fatal(err)
}
list, _ = store.List("inbox")
if len(list) != 1 {
t.Fatalf("inbox after undo len=%d", len(list))
}
entries, _ = timeStore.ListByTicket(created.ID)
if len(entries) != 1 || entries[0].ProjectID != "inbox" {
t.Fatalf("time after undo: %+v", entries)
}
}