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  }