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) } }