github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/gin/binding/default_validator_test.go (about) 1 // Copyright 2020 Gin Core Team. All rights reserved. 2 // Use of this source code is governed by a MIT style 3 // license that can be found in the LICENSE file. 4 5 package binding 6 7 import ( 8 "errors" 9 "testing" 10 ) 11 12 func TestSliceValidateError(t *testing.T) { 13 tests := []struct { 14 name string 15 err sliceValidateError 16 want string 17 }{ 18 {"has nil elements", sliceValidateError{errors.New("test error"), nil}, "[0]: test error"}, 19 } 20 for _, tt := range tests { 21 t.Run(tt.name, func(t *testing.T) { 22 if got := tt.err.Error(); got != tt.want { 23 t.Errorf("sliceValidateError.Error() = %v, want %v", got, tt.want) 24 } 25 }) 26 } 27 } 28 29 func TestDefaultValidator(t *testing.T) { 30 type exampleStruct struct { 31 A string `binding:"max=8"` 32 B int `binding:"gt=0"` 33 } 34 tests := []struct { 35 name string 36 v *defaultValidator 37 obj interface{} 38 wantErr bool 39 }{ 40 {"validate nil obj", &defaultValidator{}, nil, false}, 41 {"validate int obj", &defaultValidator{}, 3, false}, 42 {"validate struct failed-1", &defaultValidator{}, exampleStruct{A: "123456789", B: 1}, true}, 43 {"validate struct failed-2", &defaultValidator{}, exampleStruct{A: "12345678", B: 0}, true}, 44 {"validate struct passed", &defaultValidator{}, exampleStruct{A: "12345678", B: 1}, false}, 45 {"validate *struct failed-1", &defaultValidator{}, &exampleStruct{A: "123456789", B: 1}, true}, 46 {"validate *struct failed-2", &defaultValidator{}, &exampleStruct{A: "12345678", B: 0}, true}, 47 {"validate *struct passed", &defaultValidator{}, &exampleStruct{A: "12345678", B: 1}, false}, 48 {"validate []struct failed-1", &defaultValidator{}, []exampleStruct{{A: "123456789", B: 1}}, true}, 49 {"validate []struct failed-2", &defaultValidator{}, []exampleStruct{{A: "12345678", B: 0}}, true}, 50 {"validate []struct passed", &defaultValidator{}, []exampleStruct{{A: "12345678", B: 1}}, false}, 51 {"validate []*struct failed-1", &defaultValidator{}, []*exampleStruct{{A: "123456789", B: 1}}, true}, 52 {"validate []*struct failed-2", &defaultValidator{}, []*exampleStruct{{A: "12345678", B: 0}}, true}, 53 {"validate []*struct passed", &defaultValidator{}, []*exampleStruct{{A: "12345678", B: 1}}, false}, 54 {"validate *[]struct failed-1", &defaultValidator{}, &[]exampleStruct{{A: "123456789", B: 1}}, true}, 55 {"validate *[]struct failed-2", &defaultValidator{}, &[]exampleStruct{{A: "12345678", B: 0}}, true}, 56 {"validate *[]struct passed", &defaultValidator{}, &[]exampleStruct{{A: "12345678", B: 1}}, false}, 57 {"validate *[]*struct failed-1", &defaultValidator{}, &[]*exampleStruct{{A: "123456789", B: 1}}, true}, 58 {"validate *[]*struct failed-2", &defaultValidator{}, &[]*exampleStruct{{A: "12345678", B: 0}}, true}, 59 {"validate *[]*struct passed", &defaultValidator{}, &[]*exampleStruct{{A: "12345678", B: 1}}, false}, 60 } 61 for _, tt := range tests { 62 t.Run(tt.name, func(t *testing.T) { 63 if err := tt.v.ValidateStruct(tt.obj); (err != nil) != tt.wantErr { 64 t.Errorf("defaultValidator.Validate() error = %v, wantErr %v", err, tt.wantErr) 65 } 66 }) 67 } 68 }