Skip to content

Commit 8d3cf90

Browse files
authored
Merge pull request #92 from theantichris/feat/issue-87/sort-daily-tasks
Feat/issue 87/sort daily tasks
2 parents 38c4d03 + 3b8f9ca commit 8d3cf90

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

internal/models/daily/items.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7+
"slices"
78
"time"
89

910
"github.com/SourcewareLab/Toney/v2/internal/config"
@@ -76,6 +77,10 @@ func GetItems() []Task {
7677
fmt.Println(err.Error())
7778
}
7879

80+
slices.SortStableFunc(tasks, func(a, b Task) int {
81+
return getStatusOrder(a.Status) - getStatusOrder(b.Status)
82+
})
83+
7984
return tasks
8085
}
8186

@@ -129,3 +134,18 @@ func filterRolloverTasks(tasks []Task) []Task {
129134
}
130135
return result
131136
}
137+
138+
func getStatusOrder(s enums.TaskStatus) int {
139+
switch s {
140+
case enums.Started:
141+
return 0
142+
case enums.Pending:
143+
return 1
144+
case enums.Abandoned:
145+
return 2
146+
case enums.Complete:
147+
return 3
148+
default:
149+
return 4
150+
}
151+
}

internal/models/daily/items_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,40 @@ func TestFilterRolloverTasks(t *testing.T) {
106106
}
107107
}
108108

109+
func TestGetStatusOrder(t *testing.T) {
110+
tests := []struct {
111+
name string
112+
status enums.TaskStatus
113+
want int
114+
}{
115+
{"started is first", enums.Started, 0},
116+
{"pending is second", enums.Pending, 1},
117+
{"abandoned is third", enums.Abandoned, 2},
118+
{"complete is last", enums.Complete, 3},
119+
{"unknown status returns 4", enums.TaskStatus(99), 4},
120+
}
121+
122+
for _, tt := range tests {
123+
t.Run(tt.name, func(t *testing.T) {
124+
got := getStatusOrder(tt.status)
125+
if got != tt.want {
126+
t.Errorf("getStatusOrder(%d) = %d, want %d", tt.status, got, tt.want)
127+
}
128+
})
129+
}
130+
131+
// Verify relative ordering: Started < Pending < Abandoned < Complete
132+
if getStatusOrder(enums.Started) >= getStatusOrder(enums.Pending) {
133+
t.Error("Started should sort before Pending")
134+
}
135+
if getStatusOrder(enums.Pending) >= getStatusOrder(enums.Abandoned) {
136+
t.Error("Pending should sort before Abandoned")
137+
}
138+
if getStatusOrder(enums.Abandoned) >= getStatusOrder(enums.Complete) {
139+
t.Error("Abandoned should sort before Complete")
140+
}
141+
}
142+
109143
func TestFindMostRecentFile(t *testing.T) {
110144
tests := []struct {
111145
name string

0 commit comments

Comments
 (0)