Persist comma-separated list filters per project, toggle with space, and jump by first letter in board and project pickers. Co-authored-by: Cursor <cursoragent@cursor.com>
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package ticket_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"task/internal/ticket"
|
|
)
|
|
|
|
func TestBoardListMatches(t *testing.T) {
|
|
cases := []struct {
|
|
list ticket.BoardList
|
|
status ticket.Status
|
|
want bool
|
|
}{
|
|
{ticket.BoardAll, ticket.StatusTodo, true},
|
|
{ticket.BoardAll, ticket.StatusDone, true},
|
|
{ticket.BoardBacklog, ticket.StatusTodo, true},
|
|
{ticket.BoardBacklog, ticket.StatusInProgress, false},
|
|
{ticket.BoardInProgress, ticket.StatusInProgress, true},
|
|
{ticket.BoardDone, ticket.StatusDone, true},
|
|
{ticket.BoardDone, ticket.StatusTodo, false},
|
|
}
|
|
for _, tc := range cases {
|
|
if got := tc.list.Matches(tc.status); got != tc.want {
|
|
t.Errorf("%s.Matches(%s) = %v, want %v", tc.list, tc.status, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBoardListDefaultStatus(t *testing.T) {
|
|
if ticket.BoardBacklog.DefaultStatus() != ticket.StatusTodo {
|
|
t.Fatal("backlog default")
|
|
}
|
|
if ticket.BoardInProgress.DefaultStatus() != ticket.StatusInProgress {
|
|
t.Fatal("in progress default")
|
|
}
|
|
if ticket.BoardDone.DefaultStatus() != ticket.StatusDone {
|
|
t.Fatal("done default")
|
|
}
|
|
if ticket.BoardAll.DefaultStatus() != ticket.StatusTodo {
|
|
t.Fatal("all default")
|
|
}
|
|
}
|
|
|
|
func TestBoardFilterMultiSelect(t *testing.T) {
|
|
f := ticket.ParseBoardLists("backlog,done")
|
|
if !f.Matches(ticket.StatusTodo) || !f.Matches(ticket.StatusDone) {
|
|
t.Fatalf("expected backlog+done match, got %v", f)
|
|
}
|
|
if f.Matches(ticket.StatusInProgress) {
|
|
t.Fatal("should not match in progress")
|
|
}
|
|
if got := ticket.FormatBoardLists(f); got != "backlog,done" {
|
|
t.Fatalf("format = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestBoardFilterAllDominatesNormalize(t *testing.T) {
|
|
f := ticket.NormalizeFilter(ticket.BoardFilter{ticket.BoardAll, ticket.BoardBacklog})
|
|
if len(f) != 1 || f[0] != ticket.BoardBacklog {
|
|
t.Fatalf("got %v", f)
|
|
}
|
|
}
|
|
|
|
func TestBoardListShortcut(t *testing.T) {
|
|
if ticket.BoardAll.Shortcut() != 'a' {
|
|
t.Fatal("all")
|
|
}
|
|
if ticket.BoardBacklog.Shortcut() != 'b' {
|
|
t.Fatal("backlog")
|
|
}
|
|
if ticket.BoardInProgress.Shortcut() != 'i' {
|
|
t.Fatal("in progress")
|
|
}
|
|
if ticket.BoardDone.Shortcut() != 'd' {
|
|
t.Fatal("done")
|
|
}
|
|
}
|