Skip to content

Commit 0667a01

Browse files
committed
Add more tests for unreachable year
1 parent 04b8bc3 commit 0667a01

File tree

1 file changed

+85
-20
lines changed

1 file changed

+85
-20
lines changed

next_test.go

+85-20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package gronx
22

33
import (
44
"fmt"
5+
"strings"
56
"testing"
67
"time"
78
)
@@ -73,32 +74,96 @@ func TestNextTickAfter(t *testing.T) {
7374
})
7475
}
7576

76-
// https://github.com/adhocore/gronx/issues/51
77-
func TestIsUnreachableYearCurrentYear(t *testing.T) {
77+
func TestIsUnreachableYearPrevTickBefore(t *testing.T) {
7878
now := time.Date(2024, time.November, 8, 22, 18, 16, 0, time.UTC)
79+
tests := []struct {
80+
name string
81+
cronExpr string
82+
expectedTime time.Time
83+
expectError bool
84+
}{
85+
{
86+
// https://github.com/adhocore/gronx/issues/51
87+
name: "Current Year - Previous Tick",
88+
cronExpr: "30 15 4 11 * 2024",
89+
expectedTime: time.Date(2024, time.November, 4, 15, 30, 0, 0, time.UTC),
90+
expectError: false,
91+
},
92+
{
93+
name: "Next Year - Previous Tick (Unreachable Year)",
94+
cronExpr: "30 15 4 11 * 2025",
95+
expectedTime: time.Time{}, // Error expected
96+
expectError: true,
97+
},
98+
{
99+
name: "Previous Year - Previous Tick",
100+
cronExpr: "30 15 4 11 * 2023",
101+
expectedTime: time.Date(2023, time.November, 4, 15, 30, 0, 0, time.UTC),
102+
expectError: false,
103+
},
104+
}
79105

80-
cronExpr := "30 15 4 11 * 2024"
81-
expectedTime := time.Date(2024, time.November, 4, 15, 30, 0, 0, time.UTC)
82-
actualTime, err := PrevTickBefore(cronExpr, now, true)
83-
84-
if err != nil {
85-
t.Errorf("got unexpected error: %s", err)
86-
} else if !actualTime.Equal(expectedTime) {
87-
t.Errorf("expected previous tick to be %v, got %v", expectedTime, actualTime)
106+
for _, tc := range tests {
107+
t.Run(tc.name, func(t *testing.T) {
108+
actualTime, err := PrevTickBefore(tc.cronExpr, now, true)
109+
if tc.expectError {
110+
if err == nil || !strings.Contains(err.Error(), "unreachable year segment") {
111+
t.Errorf("expected unreachable year error, got: %v", err)
112+
}
113+
} else {
114+
if err != nil {
115+
t.Errorf("unexpected error: %v", err)
116+
} else if !actualTime.Equal(tc.expectedTime) {
117+
t.Errorf("expected previous tick to be %v, got %v", tc.expectedTime, actualTime)
118+
}
119+
}
120+
})
88121
}
89122
}
90123

91-
// https://github.com/adhocore/gronx/issues/53
92-
func TestIsUnreachableYearCurrentYearReverse(t *testing.T) {
124+
func TestIsUnreachableYearNextTickAfter(t *testing.T) {
93125
now := time.Date(2024, time.November, 8, 22, 18, 16, 0, time.UTC)
126+
tests := []struct {
127+
name string
128+
cronExpr string
129+
expectedTime time.Time
130+
expectError bool
131+
}{
132+
{
133+
// https://github.com/adhocore/gronx/issues/53
134+
name: "Current Year - Next Tick",
135+
cronExpr: "30 15 31 12 * 2024",
136+
expectedTime: time.Date(2024, time.December, 31, 15, 30, 0, 0, time.UTC),
137+
expectError: false,
138+
},
139+
{
140+
name: "Next Year - Next Tick",
141+
cronExpr: "30 15 31 12 * 2025",
142+
expectedTime: time.Date(2025, time.December, 31, 15, 30, 0, 0, time.UTC),
143+
expectError: false,
144+
},
145+
{
146+
name: "Previous Year - Next Tick (Unreachable Year)",
147+
cronExpr: "30 15 31 12 * 2023",
148+
expectedTime: time.Time{}, // Error expected
149+
expectError: true,
150+
},
151+
}
94152

95-
cronExpr := "30 15 31 12 * 2024"
96-
expectedTime := time.Date(2024, time.December, 31, 15, 30, 0, 0, time.UTC)
97-
actualTime, err := NextTickAfter(cronExpr, now, false)
98-
99-
if err != nil {
100-
t.Errorf("got unexpected error: %s", err)
101-
} else if !actualTime.Equal(expectedTime) {
102-
t.Errorf("expected previous tick to be %v, got %v", expectedTime, actualTime)
153+
for _, tc := range tests {
154+
t.Run(tc.name, func(t *testing.T) {
155+
actualTime, err := NextTickAfter(tc.cronExpr, now, false)
156+
if tc.expectError {
157+
if err == nil || !strings.Contains(err.Error(), "unreachable year segment") {
158+
t.Errorf("expected unreachable year error, got: %v", err)
159+
}
160+
} else {
161+
if err != nil {
162+
t.Errorf("unexpected error: %v", err)
163+
} else if !actualTime.Equal(tc.expectedTime) {
164+
t.Errorf("expected next tick to be %v, got %v", tc.expectedTime, actualTime)
165+
}
166+
}
167+
})
103168
}
104169
}

0 commit comments

Comments
 (0)