Files
tyapi-server/internal/shared/validator/auth_date_test.go

180 lines
3.8 KiB
Go
Raw Normal View History

2025-07-28 01:46:39 +08:00
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)
}
})
}
}