v0.1
This commit is contained in:
180
internal/shared/validator/auth_date_test.go
Normal file
180
internal/shared/validator/auth_date_test.go
Normal file
@@ -0,0 +1,180 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user