github.com/qiniu/go-sdk/v7@v7.27.0/pili/validate_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package pili
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestValidator_Validate(t *testing.T) {
    13  	ast := assert.New(t)
    14  
    15  	type Foo struct {
    16  		Num    int    `validate:"gt=0,lte=10"`
    17  		String string `validate:"required"`
    18  	}
    19  
    20  	// struct
    21  	struct1 := Foo{}
    22  	struct2 := Foo{Num: 1, String: "bar"}
    23  	err := defaultValidator.Validate(struct1)
    24  	ast.NotNil(err)
    25  	err = defaultValidator.Validate(struct2)
    26  	ast.Nil(err)
    27  
    28  	// struct ptr
    29  	err = defaultValidator.Validate(&struct1)
    30  	ast.NotNil(err)
    31  	err = defaultValidator.Validate(&struct2)
    32  	ast.Nil(err)
    33  
    34  	// slice/array struct
    35  	slice1 := []Foo{{}, {}}
    36  	slice2 := []Foo{{Num: 1, String: "bar"}, {Num: 2, String: "bar2"}}
    37  	err = defaultValidator.Validate(slice1)
    38  	ast.NotNil(err)
    39  	err = defaultValidator.Validate(slice2)
    40  	ast.Nil(err)
    41  
    42  	// not dive
    43  	type NotDive struct {
    44  		Foos []Foo
    45  	}
    46  	notDive := NotDive{Foos: []Foo{{}, {}}}
    47  	err = defaultValidator.Validate(notDive)
    48  	ast.Nil(err)
    49  
    50  	// dive
    51  	type Dive struct {
    52  		Foos []Foo `validate:"dive"`
    53  	}
    54  	dive1 := Dive{Foos: []Foo{{}, {}}}
    55  	dive2 := Dive{Foos: []Foo{{Num: 1, String: "bar"}, {Num: 2, String: "bar2"}}}
    56  	err = defaultValidator.Validate(dive1)
    57  	ast.NotNil(err)
    58  	err = defaultValidator.Validate(dive2)
    59  	ast.Nil(err)
    60  }