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 }