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) } }) } }