|
| 1 | +package daily |
| 2 | + |
| 3 | +import ( |
| 4 | + "testing" |
| 5 | + |
| 6 | + "github.com/SourcewareLab/Toney/v2/internal/enums" |
| 7 | +) |
| 8 | + |
| 9 | +func TestFilterRolloverTasks(t *testing.T) { |
| 10 | + tests := []struct { |
| 11 | + name string |
| 12 | + input []Task |
| 13 | + expected []Task |
| 14 | + }{ |
| 15 | + { |
| 16 | + name: "empty slice", |
| 17 | + input: []Task{}, |
| 18 | + expected: []Task{}, |
| 19 | + }, |
| 20 | + { |
| 21 | + name: "all pending", |
| 22 | + input: []Task{ |
| 23 | + {TaskTitle: "task1", Status: enums.Pending}, |
| 24 | + {TaskTitle: "task2", Status: enums.Pending}, |
| 25 | + }, |
| 26 | + expected: []Task{ |
| 27 | + {TaskTitle: "task1", Status: enums.Pending}, |
| 28 | + {TaskTitle: "task2", Status: enums.Pending}, |
| 29 | + }, |
| 30 | + }, |
| 31 | + { |
| 32 | + name: "all started", |
| 33 | + input: []Task{ |
| 34 | + {TaskTitle: "task1", Status: enums.Started}, |
| 35 | + {TaskTitle: "task2", Status: enums.Started}, |
| 36 | + }, |
| 37 | + expected: []Task{ |
| 38 | + {TaskTitle: "task1", Status: enums.Started}, |
| 39 | + {TaskTitle: "task2", Status: enums.Started}, |
| 40 | + }, |
| 41 | + }, |
| 42 | + { |
| 43 | + name: "all complete", |
| 44 | + input: []Task{ |
| 45 | + {TaskTitle: "task1", Status: enums.Complete}, |
| 46 | + {TaskTitle: "task2", Status: enums.Complete}, |
| 47 | + }, |
| 48 | + expected: []Task{}, |
| 49 | + }, |
| 50 | + { |
| 51 | + name: "all abandoned", |
| 52 | + input: []Task{ |
| 53 | + {TaskTitle: "task1", Status: enums.Abandoned}, |
| 54 | + {TaskTitle: "task2", Status: enums.Abandoned}, |
| 55 | + }, |
| 56 | + expected: []Task{}, |
| 57 | + }, |
| 58 | + { |
| 59 | + name: "mixed statuses", |
| 60 | + input: []Task{ |
| 61 | + {TaskTitle: "pending", Status: enums.Pending}, |
| 62 | + {TaskTitle: "started", Status: enums.Started}, |
| 63 | + {TaskTitle: "complete", Status: enums.Complete}, |
| 64 | + {TaskTitle: "abandoned", Status: enums.Abandoned}, |
| 65 | + }, |
| 66 | + expected: []Task{ |
| 67 | + {TaskTitle: "pending", Status: enums.Pending}, |
| 68 | + {TaskTitle: "started", Status: enums.Started}, |
| 69 | + }, |
| 70 | + }, |
| 71 | + { |
| 72 | + name: "preserves fields", |
| 73 | + input: []Task{ |
| 74 | + {TaskTitle: "my task", TaskDesc: "my description", Status: enums.Pending}, |
| 75 | + }, |
| 76 | + expected: []Task{ |
| 77 | + {TaskTitle: "my task", TaskDesc: "my description", Status: enums.Pending}, |
| 78 | + }, |
| 79 | + }, |
| 80 | + } |
| 81 | + |
| 82 | + for _, tt := range tests { |
| 83 | + t.Run(tt.name, func(t *testing.T) { |
| 84 | + got := filterRolloverTasks(tt.input) |
| 85 | + |
| 86 | + if len(got) != len(tt.expected) { |
| 87 | + t.Fatalf("filterRolloverTasks() length = %d, want %d", len(got), len(tt.expected)) |
| 88 | + } |
| 89 | + |
| 90 | + for i := range got { |
| 91 | + if got[i].TaskTitle != tt.expected[i].TaskTitle { |
| 92 | + t.Errorf("filterRolloverTasks() [%d].TaskTitle = %q, want %q", i, got[i].TaskTitle, tt.expected[i].TaskTitle) |
| 93 | + } |
| 94 | + |
| 95 | + if got[i].TaskDesc != tt.expected[i].TaskDesc { |
| 96 | + t.Errorf("filterRolloverTasks() [%d].TaskDesc = %q, want %q", i, got[i].TaskDesc, tt.expected[i].TaskDesc) |
| 97 | + } |
| 98 | + |
| 99 | + if got[i].Status != tt.expected[i].Status { |
| 100 | + t.Errorf("filterRolloverTasks() [%d].Status = %d, want %d", i, got[i].Status, tt.expected[i].Status) |
| 101 | + } |
| 102 | + } |
| 103 | + }) |
| 104 | + } |
| 105 | +} |
0 commit comments