2021-01-12 10:46:39 +08:00
|
|
|
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
2019-07-04 11:19:59 +08:00
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
|
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
|
|
|
|
package gvalid_test
|
|
|
|
|
|
|
|
import (
|
2021-05-13 20:56:52 +08:00
|
|
|
"context"
|
2019-07-04 11:19:59 +08:00
|
|
|
"testing"
|
|
|
|
|
2021-11-13 23:30:31 +08:00
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
2021-10-11 21:41:56 +08:00
|
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
|
|
"github.com/gogf/gf/v2/util/gvalid"
|
2019-07-04 11:19:59 +08:00
|
|
|
)
|
|
|
|
|
2020-06-12 22:25:58 +08:00
|
|
|
func Test_CheckMap1(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
data := map[string]interface{}{
|
|
|
|
"id": "0",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules := map[string]string{
|
|
|
|
"id": "required|between:1,100",
|
|
|
|
"name": "required|length:6,16",
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(data).Rules(rules).Run(context.TODO()); m == nil {
|
2020-06-12 22:25:58 +08:00
|
|
|
t.Error("CheckMap校验失败")
|
|
|
|
} else {
|
|
|
|
t.Assert(len(m.Maps()), 2)
|
2021-11-14 21:00:34 +08:00
|
|
|
t.Assert(m.Maps()["id"]["between"], "The id value `0` must be between 1 and 100")
|
|
|
|
t.Assert(m.Maps()["name"]["length"], "The name value `john` length must be between 6 and 16")
|
2020-06-12 22:25:58 +08:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2019-07-04 11:19:59 +08:00
|
|
|
|
2020-06-12 22:25:58 +08:00
|
|
|
func Test_CheckMap2(t *testing.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
var params interface{}
|
2020-12-09 21:00:30 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2021-12-04 00:11:57 +08:00
|
|
|
if err := g.Validator().Data(params).Run(context.TODO()); err == nil {
|
2022-03-10 11:36:40 +08:00
|
|
|
t.AssertNil(err)
|
2020-12-09 21:00:30 +08:00
|
|
|
}
|
|
|
|
})
|
2019-07-04 11:19:59 +08:00
|
|
|
|
|
|
|
kvmap := map[string]interface{}{
|
|
|
|
"id": "0",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules := map[string]string{
|
|
|
|
"id": "required|between:1,100",
|
|
|
|
"name": "required|length:6,16",
|
|
|
|
}
|
|
|
|
msgs := gvalid.CustomMsg{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m == nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error("CheckMap校验失败")
|
|
|
|
}
|
|
|
|
|
|
|
|
kvmap = map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules = map[string]string{
|
|
|
|
"id": "required|between:1,100",
|
|
|
|
"name": "required|length:4,16",
|
|
|
|
}
|
|
|
|
msgs = map[string]interface{}{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
kvmap = map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules = map[string]string{
|
|
|
|
"id": "",
|
|
|
|
"name": "",
|
|
|
|
}
|
|
|
|
msgs = map[string]interface{}{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
kvmap = map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules2 := []string{
|
|
|
|
"@required|between:1,100",
|
|
|
|
"@required|length:4,16",
|
|
|
|
}
|
|
|
|
msgs = map[string]interface{}{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
kvmap = map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules2 = []string{
|
|
|
|
"id@required|between:1,100",
|
|
|
|
"name@required|length:4,16#名称不能为空|",
|
|
|
|
}
|
|
|
|
msgs = map[string]interface{}{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
kvmap = map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
"name": "john",
|
|
|
|
}
|
|
|
|
rules2 = []string{
|
|
|
|
"id@required|between:1,100",
|
|
|
|
"name@required|length:4,16#名称不能为空",
|
|
|
|
}
|
|
|
|
msgs = map[string]interface{}{
|
2021-11-14 21:00:34 +08:00
|
|
|
"id": "ID不能为空|ID范围应当为{min}到{max}",
|
2019-07-04 11:19:59 +08:00
|
|
|
"name": map[string]string{
|
|
|
|
"required": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) {
|
|
|
|
data := map[string]interface{}{
|
|
|
|
"id": "1",
|
|
|
|
}
|
|
|
|
rules := map[string]string{
|
|
|
|
"id": "required",
|
|
|
|
"name": "length:4,16",
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
if m := g.Validator().Data(data).Rules(rules).Run(context.TODO()); m != nil {
|
2019-07-04 11:19:59 +08:00
|
|
|
t.Error(m)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_Sequence(t *testing.T) {
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
params := map[string]interface{}{
|
|
|
|
"passport": "",
|
|
|
|
"password": "123456",
|
|
|
|
"password2": "1234567",
|
|
|
|
}
|
|
|
|
rules := []string{
|
2021-11-14 21:00:34 +08:00
|
|
|
"passport@required|length:6,16#账号不能为空|账号长度应当在{min}到{max}之间",
|
|
|
|
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
|
2019-07-04 11:19:59 +08:00
|
|
|
"password2@required|length:6,16#",
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
err := g.Validator().Data(params).Rules(rules).Run(context.TODO())
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Map()), 2)
|
|
|
|
t.Assert(err.Map()["required"], "账号不能为空")
|
|
|
|
t.Assert(err.Map()["length"], "账号长度应当在6到16之间")
|
|
|
|
t.Assert(len(err.Maps()), 2)
|
2019-07-04 11:19:59 +08:00
|
|
|
|
2021-05-19 19:00:34 +08:00
|
|
|
t.Assert(len(err.Items()), 2)
|
|
|
|
t.Assert(err.Items()[0]["passport"]["length"], "账号长度应当在6到16之间")
|
|
|
|
t.Assert(err.Items()[0]["passport"]["required"], "账号不能为空")
|
|
|
|
t.Assert(err.Items()[1]["password"]["same"], "两次密码输入不相等")
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等")
|
|
|
|
t.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"})
|
2019-07-04 11:19:59 +08:00
|
|
|
|
|
|
|
k, m := err.FirstItem()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(k, "passport")
|
|
|
|
t.Assert(m, err.Map())
|
2019-07-04 11:19:59 +08:00
|
|
|
|
|
|
|
r, s := err.FirstRule()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(r, "required")
|
|
|
|
t.Assert(s, "账号不能为空")
|
2020-11-25 19:06:29 +08:00
|
|
|
|
|
|
|
t.Assert(gerror.Current(err), "账号不能为空")
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
}
|
2021-08-01 23:50:44 +08:00
|
|
|
|
|
|
|
func Test_Map_Bail(t *testing.T) {
|
|
|
|
// global bail
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
params := map[string]interface{}{
|
|
|
|
"passport": "",
|
|
|
|
"password": "123456",
|
|
|
|
"password2": "1234567",
|
|
|
|
}
|
|
|
|
rules := []string{
|
2021-11-14 21:00:34 +08:00
|
|
|
"passport@required|length:6,16#账号不能为空|账号长度应当在{min}到{max}之间",
|
|
|
|
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
|
2021-08-01 23:50:44 +08:00
|
|
|
"password2@required|length:6,16#",
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
err := g.Validator().Bail().Rules(rules).Data(params).Run(ctx)
|
2021-08-01 23:50:44 +08:00
|
|
|
t.AssertNE(err, nil)
|
2021-11-22 14:41:33 +08:00
|
|
|
t.Assert(err.String(), "账号不能为空")
|
2021-08-01 23:50:44 +08:00
|
|
|
})
|
|
|
|
// global bail with rule bail
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
params := map[string]interface{}{
|
|
|
|
"passport": "",
|
|
|
|
"password": "123456",
|
|
|
|
"password2": "1234567",
|
|
|
|
}
|
|
|
|
rules := []string{
|
2021-11-14 21:00:34 +08:00
|
|
|
"passport@bail|required|length:6,16#|账号不能为空|账号长度应当在{min}到{max}之间",
|
|
|
|
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
|
2021-08-01 23:50:44 +08:00
|
|
|
"password2@required|length:6,16#",
|
|
|
|
}
|
2021-11-22 22:43:09 +08:00
|
|
|
err := g.Validator().Bail().Rules(rules).Data(params).Run(ctx)
|
2021-08-01 23:50:44 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(err.String(), "账号不能为空")
|
|
|
|
})
|
|
|
|
}
|