github.com/gogf/gf@v1.16.9/util/gvalid/gvalid_z_unit_checkmap_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gvalid_test 8 9 import ( 10 "context" 11 "github.com/gogf/gf/errors/gerror" 12 "github.com/gogf/gf/frame/g" 13 "testing" 14 15 "github.com/gogf/gf/test/gtest" 16 "github.com/gogf/gf/util/gvalid" 17 ) 18 19 func Test_CheckMap1(t *testing.T) { 20 gtest.C(t, func(t *gtest.T) { 21 data := map[string]interface{}{ 22 "id": "0", 23 "name": "john", 24 } 25 rules := map[string]string{ 26 "id": "required|between:1,100", 27 "name": "required|length:6,16", 28 } 29 if m := gvalid.CheckMap(context.TODO(), data, rules); m == nil { 30 t.Error("CheckMap校验失败") 31 } else { 32 t.Assert(len(m.Maps()), 2) 33 t.Assert(m.Maps()["id"]["between"], "The id value must be between 1 and 100") 34 t.Assert(m.Maps()["name"]["length"], "The name value length must be between 6 and 16") 35 } 36 }) 37 } 38 39 func Test_CheckMap2(t *testing.T) { 40 var params interface{} 41 gtest.C(t, func(t *gtest.T) { 42 if err := gvalid.CheckMap(context.TODO(), params, nil, nil); err == nil { 43 t.Assert(err, nil) 44 } 45 }) 46 47 kvmap := map[string]interface{}{ 48 "id": "0", 49 "name": "john", 50 } 51 rules := map[string]string{ 52 "id": "required|between:1,100", 53 "name": "required|length:6,16", 54 } 55 msgs := gvalid.CustomMsg{ 56 "id": "ID不能为空|ID范围应当为:min到:max", 57 "name": map[string]string{ 58 "required": "名称不能为空", 59 "length": "名称长度为:min到:max个字符", 60 }, 61 } 62 if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m == nil { 63 t.Error("CheckMap校验失败") 64 } 65 66 kvmap = map[string]interface{}{ 67 "id": "1", 68 "name": "john", 69 } 70 rules = map[string]string{ 71 "id": "required|between:1,100", 72 "name": "required|length:4,16", 73 } 74 msgs = map[string]interface{}{ 75 "id": "ID不能为空|ID范围应当为:min到:max", 76 "name": map[string]string{ 77 "required": "名称不能为空", 78 "length": "名称长度为:min到:max个字符", 79 }, 80 } 81 if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m != nil { 82 t.Error(m) 83 } 84 85 kvmap = map[string]interface{}{ 86 "id": "1", 87 "name": "john", 88 } 89 rules = map[string]string{ 90 "id": "", 91 "name": "", 92 } 93 msgs = map[string]interface{}{ 94 "id": "ID不能为空|ID范围应当为:min到:max", 95 "name": map[string]string{ 96 "required": "名称不能为空", 97 "length": "名称长度为:min到:max个字符", 98 }, 99 } 100 if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m != nil { 101 t.Error(m) 102 } 103 104 kvmap = map[string]interface{}{ 105 "id": "1", 106 "name": "john", 107 } 108 rules2 := []string{ 109 "@required|between:1,100", 110 "@required|length:4,16", 111 } 112 msgs = map[string]interface{}{ 113 "id": "ID不能为空|ID范围应当为:min到:max", 114 "name": map[string]string{ 115 "required": "名称不能为空", 116 "length": "名称长度为:min到:max个字符", 117 }, 118 } 119 if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil { 120 t.Error(m) 121 } 122 123 kvmap = map[string]interface{}{ 124 "id": "1", 125 "name": "john", 126 } 127 rules2 = []string{ 128 "id@required|between:1,100", 129 "name@required|length:4,16#名称不能为空|", 130 } 131 msgs = map[string]interface{}{ 132 "id": "ID不能为空|ID范围应当为:min到:max", 133 "name": map[string]string{ 134 "required": "名称不能为空", 135 "length": "名称长度为:min到:max个字符", 136 }, 137 } 138 if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil { 139 t.Error(m) 140 } 141 142 kvmap = map[string]interface{}{ 143 "id": "1", 144 "name": "john", 145 } 146 rules2 = []string{ 147 "id@required|between:1,100", 148 "name@required|length:4,16#名称不能为空", 149 } 150 msgs = map[string]interface{}{ 151 "id": "ID不能为空|ID范围应当为:min到:max", 152 "name": map[string]string{ 153 "required": "名称不能为空", 154 "length": "名称长度为:min到:max个字符", 155 }, 156 } 157 if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil { 158 t.Error(m) 159 } 160 } 161 162 // 如果值为nil,并且不需要require*验证时,其他验证失效 163 func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) { 164 data := map[string]interface{}{ 165 "id": "1", 166 } 167 rules := map[string]string{ 168 "id": "required", 169 "name": "length:4,16", 170 } 171 if m := gvalid.CheckMap(context.TODO(), data, rules); m != nil { 172 t.Error(m) 173 } 174 } 175 176 func Test_Sequence(t *testing.T) { 177 gtest.C(t, func(t *gtest.T) { 178 params := map[string]interface{}{ 179 "passport": "", 180 "password": "123456", 181 "password2": "1234567", 182 } 183 rules := []string{ 184 "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", 185 "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", 186 "password2@required|length:6,16#", 187 } 188 err := gvalid.CheckMap(context.TODO(), params, rules) 189 t.AssertNE(err, nil) 190 t.Assert(len(err.Map()), 2) 191 t.Assert(err.Map()["required"], "账号不能为空") 192 t.Assert(err.Map()["length"], "账号长度应当在6到16之间") 193 t.Assert(len(err.Maps()), 2) 194 195 t.Assert(len(err.Items()), 2) 196 t.Assert(err.Items()[0]["passport"]["length"], "账号长度应当在6到16之间") 197 t.Assert(err.Items()[0]["passport"]["required"], "账号不能为空") 198 t.Assert(err.Items()[1]["password"]["same"], "两次密码输入不相等") 199 200 t.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等") 201 t.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"}) 202 203 k, m := err.FirstItem() 204 t.Assert(k, "passport") 205 t.Assert(m, err.Map()) 206 207 r, s := err.FirstRule() 208 t.Assert(r, "required") 209 t.Assert(s, "账号不能为空") 210 211 t.Assert(gerror.Current(err), "账号不能为空") 212 }) 213 } 214 215 func Test_Map_Bail(t *testing.T) { 216 // global bail 217 gtest.C(t, func(t *gtest.T) { 218 params := map[string]interface{}{ 219 "passport": "", 220 "password": "123456", 221 "password2": "1234567", 222 } 223 rules := []string{ 224 "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", 225 "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", 226 "password2@required|length:6,16#", 227 } 228 err := g.Validator().Bail().Rules(rules).CheckMap(params) 229 t.AssertNE(err, nil) 230 t.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间") 231 }) 232 // global bail with rule bail 233 gtest.C(t, func(t *gtest.T) { 234 params := map[string]interface{}{ 235 "passport": "", 236 "password": "123456", 237 "password2": "1234567", 238 } 239 rules := []string{ 240 "passport@bail|required|length:6,16#|账号不能为空|账号长度应当在:min到:max之间", 241 "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", 242 "password2@required|length:6,16#", 243 } 244 err := g.Validator().Bail().Rules(rules).CheckMap(params) 245 t.AssertNE(err, nil) 246 t.Assert(err.String(), "账号不能为空") 247 }) 248 }