110 lines
2.9 KiB
Go
110 lines
2.9 KiB
Go
|
package core
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func TestGetNextUpdate(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
lastUpdated time.Time
|
||
|
spec string
|
||
|
expected time.Time
|
||
|
expectErr bool
|
||
|
}{
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 12, 0, 0, 0, time.UTC),
|
||
|
spec: "every 1h#1",
|
||
|
expected: time.Date(2020, 10, 22, 13, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 12, 0, 5, 0, time.UTC),
|
||
|
spec: "every 1h#2",
|
||
|
expected: time.Date(2020, 10, 22, 13, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 11, 0, 0, 0, time.UTC),
|
||
|
spec: "every 2h30m#1",
|
||
|
expected: time.Date(2020, 10, 22, 11, 30, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 11, 30, 0, 0, time.UTC),
|
||
|
spec: "every 2h30m#2",
|
||
|
expected: time.Date(2020, 10, 22, 14, 00, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 11, 30, 0, 0, time.UTC),
|
||
|
spec: "every 3",
|
||
|
expected: time.Time{},
|
||
|
expectErr: true,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 12, 0, 0, 0, time.UTC),
|
||
|
spec: "at 14:00#1",
|
||
|
expected: time.Date(2020, 10, 22, 14, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 14, 0, 0, 0, time.UTC),
|
||
|
spec: "at 14:00#2",
|
||
|
expected: time.Date(2020, 10, 23, 14, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 15, 0, 0, 0, time.UTC),
|
||
|
spec: "at 14:00#3",
|
||
|
expected: time.Date(2020, 10, 23, 14, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 9, 0, 0, 0, time.UTC),
|
||
|
spec: "at 10:00,15:00#1",
|
||
|
expected: time.Date(2020, 10, 22, 10, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 12, 0, 0, 0, time.UTC),
|
||
|
spec: "at 10:00,15:00#2",
|
||
|
expected: time.Date(2020, 10, 22, 15, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 15, 0, 0, 0, time.UTC),
|
||
|
spec: "at 10:00,15:00#3",
|
||
|
expected: time.Date(2020, 10, 23, 10, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
{
|
||
|
lastUpdated: time.Date(2020, 10, 22, 16, 0, 0, 0, time.UTC),
|
||
|
spec: "at 10:00,15:00#4",
|
||
|
expected: time.Date(2020, 10, 23, 10, 0, 0, 0, time.UTC),
|
||
|
expectErr: false,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
t.Run(test.spec, func(t *testing.T) {
|
||
|
spec := test.spec
|
||
|
if comment := strings.Index(spec, "#"); comment > -1 {
|
||
|
spec = spec[:comment]
|
||
|
}
|
||
|
nextUpdate, err := GetNextUpdate(test.lastUpdated, spec)
|
||
|
if test.expectErr && err == nil {
|
||
|
t.Error("test did not fail as expected")
|
||
|
}
|
||
|
if !test.expectErr && err != nil {
|
||
|
t.Errorf("error: %v", err)
|
||
|
}
|
||
|
if !nextUpdate.Equal(test.expected) {
|
||
|
t.Errorf("\nexpected: %v\n got: %v", test.expected, nextUpdate)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
}
|