109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
package timerx_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/yuninks/timerx"
|
|
)
|
|
|
|
func TestGetNextTime(t *testing.T) {
|
|
// Test cases
|
|
tests := []struct {
|
|
name string
|
|
job timerx.JobData
|
|
expectedTime time.Time
|
|
expectedError error
|
|
}{
|
|
{
|
|
name: "Test JobTypeEveryMonth",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeEveryMonth,
|
|
Day: 15,
|
|
Hour: 10,
|
|
Minute: 0,
|
|
Second: 0,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 15, 10, 0, 0, 0, time.Local),
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test JobTypeEveryWeek",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeEveryWeek,
|
|
Weekday: time.Tuesday,
|
|
Hour: 10,
|
|
Minute: 0,
|
|
Second: 0,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 8, 10, 0, 0, 0, time.Local), // Assuming current date is March 7, 2022
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test JobTypeEveryDay",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeEveryDay,
|
|
Hour: 10,
|
|
Minute: 0,
|
|
Second: 0,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 8, 10, 0, 0, 0, time.Local), // Assuming current date is March 7, 2022
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test JobTypeEveryHour",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeEveryHour,
|
|
Minute: 0,
|
|
Second: 0,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 7, 11, 0, 0, 0, time.Local), // Assuming current date is March 7, 2022, 10:30 AM
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test JobTypeEveryMinute",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeEveryMinute,
|
|
Second: 0,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 7, 10, 31, 0, 0, time.Local), // Assuming current date is March 7, 2022, 10:30 AM
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test JobTypeInterval",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobTypeInterval,
|
|
IntervalTime: 1 * time.Hour,
|
|
},
|
|
expectedTime: time.Date(2022, 3, 7, 11, 30, 0, 0, time.Local), // Assuming current date is March 7, 2022, 10:30 AM
|
|
expectedError: nil,
|
|
},
|
|
{
|
|
name: "Test unknown JobType",
|
|
job: timerx.JobData{
|
|
JobType: timerx.JobType(100),
|
|
},
|
|
expectedTime: time.Time{},
|
|
expectedError: errors.New("未知的任务类型: 100"),
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
now := time.Now()
|
|
// loc := time.FixedZone("CST", 8*3600)
|
|
nextTime, err := timerx.GetNextTime(now, test.job)
|
|
if err != nil {
|
|
if test.expectedError == nil || err.Error() != test.expectedError.Error() {
|
|
t.Errorf("Expected error: %v, Got error: %v", test.expectedError, err)
|
|
}
|
|
} else {
|
|
if nextTime.IsZero() != (test.expectedTime == time.Time{}) || (nextTime != &test.expectedTime) {
|
|
t.Errorf("Expected time: %v, Got time: %v", test.expectedTime, nextTime)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|