62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package scheduling
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNextTime(t *testing.T) {
|
|
pattern := Pattern("0 * * * *")
|
|
|
|
now := time.Now()
|
|
|
|
nextTime, _ := pattern.NextTime(now)
|
|
|
|
assert.True(t, now.Add(time.Hour).Truncate(time.Hour).Equal(*nextTime))
|
|
}
|
|
|
|
func TestNextTimeUntil(t *testing.T) {
|
|
pattern := Pattern("0 0 * * *")
|
|
|
|
now := time.Now()
|
|
|
|
nextTimes, _ := pattern.NextTimesUntil(now, now.Add(5*24*time.Hour))
|
|
|
|
assert.True(t, len(nextTimes) == 5)
|
|
}
|
|
|
|
func TestMatchesTime(t *testing.T) {
|
|
testCases := []struct {
|
|
pattern Pattern
|
|
expected time.Time
|
|
precision time.Duration
|
|
}{
|
|
{
|
|
pattern: Pattern("0 * * * *"),
|
|
expected: time.Now().Add(time.Hour).Truncate(time.Hour),
|
|
precision: time.Hour,
|
|
},
|
|
{
|
|
pattern: Pattern("5 4 * * *"),
|
|
expected: time.Now().Add(24 * time.Hour),
|
|
precision: 24 * time.Hour,
|
|
},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
matchingTime, _ := testCase.pattern.MatchesTime(testCase.expected, testCase.precision)
|
|
|
|
assert.NotNil(t, matchingTime)
|
|
}
|
|
}
|
|
|
|
func TestNotMatchesTime(t *testing.T) {
|
|
pattern := Pattern("0 * * * *")
|
|
|
|
nextHour := time.Now().Add(time.Hour + 30*time.Minute)
|
|
|
|
matchingTime, _ := pattern.MatchesTime(nextHour, time.Minute)
|
|
|
|
assert.Nil(t, matchingTime)
|
|
}
|