github.com/gocaveman/caveman@v0.0.0-20191211162744-0ddf99dbdf6e/valid/structtags_test.go (about)

     1  package valid
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  type T1 struct {
    11  	F1 string `valid:"name=field1name,notnil,minlen=5,maxlen=10"`
    12  }
    13  
    14  type T2 struct {
    15  	F2 string `valid:"name=f2,regexp=^test2$"`
    16  }
    17  
    18  type T3 struct {
    19  	F3 string `valid:"minlen=5"` // no name in the valid:"..." part of struct tag
    20  }
    21  
    22  type T4 struct {
    23  	F4 string `valid:"email"`
    24  }
    25  
    26  type T5 struct {
    27  	F5 int `valid:"minval=10,maxval=20"`
    28  }
    29  
    30  func TestStructTags(t *testing.T) {
    31  
    32  	assert := assert.New(t)
    33  
    34  	t1 := &T1{
    35  		F1: "test",
    36  	}
    37  
    38  	rules, err := StructRules(reflect.TypeOf(t1), nil)
    39  	assert.NoError(err)
    40  	// log.Printf("rules=%#v", rules)
    41  
    42  	err = rules.Apply(t1)
    43  	// log.Printf("err=%#v", err)
    44  
    45  	msgserr, _ := err.(Messages)
    46  	assert.NotNil(msgserr)
    47  	assert.Len(msgserr, 1)
    48  	assert.Equal("minlen", msgserr[0].Code)
    49  
    50  	t1.F1 = "testtesttest"
    51  	assert.True(rules.Apply(t1).(Messages).ContainsCode("maxlen"))
    52  
    53  	var t2 *T2
    54  	rules, err = StructRules(reflect.TypeOf(t2), nil)
    55  	assert.NoError(err)
    56  	t2 = &T2{F2: "test2"}
    57  	assert.NoError(rules.Apply(t2))
    58  	t2 = &T2{F2: "nomatch"}
    59  	// log.Printf("HERE: %#v", rules.Apply(t2))
    60  	assert.True(rules.Apply(t2).(Messages).ContainsCode("regexp"))
    61  
    62  	var t3 *T3
    63  	rules, err = StructRules(reflect.TypeOf(t3), nil)
    64  	assert.NoError(err)
    65  	// log.Printf("rules: %#v", rules)
    66  	t3 = &T3{F3: "test3"}
    67  	assert.NoError(rules.Apply(t3))
    68  
    69  	var t4 *T4
    70  	rules, err = StructRules(reflect.TypeOf(t4), nil)
    71  	assert.NoError(err)
    72  	t4 = &T4{F4: "test4@example.com"}
    73  	assert.NoError(rules.Apply(t4))
    74  	t4 = &T4{F4: "test4@example"}
    75  	assert.Error(rules.Apply(t4))
    76  
    77  	var t5 *T5
    78  	rules, err = StructRules(reflect.TypeOf(t5), nil)
    79  	// log.Printf("rules: %#v", rules)
    80  	assert.NoError(err)
    81  	t5 = &T5{F5: 15}
    82  	assert.NoError(rules.Apply(t5))
    83  	t5 = &T5{F5: 5}
    84  	assert.Error(rules.Apply(t5))
    85  	assert.True(rules.Apply(t5).(Messages).ContainsCode("minval"))
    86  	t5 = &T5{F5: 25}
    87  	assert.Error(rules.Apply(t5))
    88  	assert.True(rules.Apply(t5).(Messages).ContainsCode("maxval"))
    89  
    90  }