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