180 lines
3.8 KiB
Go
180 lines
3.8 KiB
Go
package validator
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
func TestValidateAuthDate(t *testing.T) {
|
|
validate := validator.New()
|
|
validate.RegisterValidation("auth_date", validateAuthDate)
|
|
|
|
today := time.Now().Format("20060102")
|
|
yesterday := time.Now().AddDate(0, 0, -1).Format("20060102")
|
|
tomorrow := time.Now().AddDate(0, 0, 1).Format("20060102")
|
|
lastWeek := time.Now().AddDate(0, 0, -7).Format("20060102")
|
|
nextWeek := time.Now().AddDate(0, 0, 7).Format("20060102")
|
|
|
|
tests := []struct {
|
|
name string
|
|
authDate string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "今天到今天 - 有效",
|
|
authDate: today + "-" + today,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "昨天到今天 - 有效",
|
|
authDate: yesterday + "-" + today,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "今天到明天 - 有效",
|
|
authDate: today + "-" + tomorrow,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "上周到今天 - 有效",
|
|
authDate: lastWeek + "-" + today,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "今天到下周 - 有效",
|
|
authDate: today + "-" + nextWeek,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "昨天到明天 - 有效",
|
|
authDate: yesterday + "-" + tomorrow,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "明天到后天 - 无效(不包括今天)",
|
|
authDate: tomorrow + "-" + time.Now().AddDate(0, 0, 2).Format("20060102"),
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "上周到昨天 - 无效(不包括今天)",
|
|
authDate: lastWeek + "-" + yesterday,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "格式错误 - 缺少连字符",
|
|
authDate: "2024010120240131",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "格式错误 - 多个连字符",
|
|
authDate: "20240101-20240131-20240201",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "格式错误 - 日期长度不对",
|
|
authDate: "202401-20240131",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "格式错误 - 非数字",
|
|
authDate: "20240101-2024013A",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "无效日期 - 2月30日",
|
|
authDate: "20240230-20240301",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "无效日期 - 13月",
|
|
authDate: "20241301-20241331",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "开始日期晚于结束日期",
|
|
authDate: "20240131-20240101",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "空字符串 - 由required处理",
|
|
authDate: "",
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := validate.Var(tt.authDate, "auth_date")
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("validateAuthDate() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseYYYYMMDD(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
dateStr string
|
|
want time.Time
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "有效日期",
|
|
dateStr: "20240101",
|
|
want: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "闰年2月29日",
|
|
dateStr: "20240229",
|
|
want: time.Date(2024, 2, 29, 0, 0, 0, 0, time.UTC),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "非闰年2月29日",
|
|
dateStr: "20230229",
|
|
want: time.Time{},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "长度错误",
|
|
dateStr: "202401",
|
|
want: time.Time{},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "非数字",
|
|
dateStr: "2024010A",
|
|
want: time.Time{},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "无效月份",
|
|
dateStr: "20241301",
|
|
want: time.Time{},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "无效日期",
|
|
dateStr: "20240230",
|
|
want: time.Time{},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := parseYYYYMMDD(tt.dateStr)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("parseYYYYMMDD() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if !tt.wantErr && !got.Equal(tt.want) {
|
|
t.Errorf("parseYYYYMMDD() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
} |