gf/util/gvalid/gvalid_unit_checkmap_test.go
2020-03-19 22:56:12 +08:00

183 lines
4.6 KiB
Go
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved.
//
// 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 (
"testing"
"github.com/gogf/gf/test/gtest"
"github.com/gogf/gf/util/gvalid"
)
func Test_CheckMap(t *testing.T) {
var params interface{}
if m := gvalid.CheckMap(params, nil, nil); m == nil {
t.Error("CheckMap校验失败")
}
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{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules, msgs); m == nil {
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{}{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil {
t.Error(m)
}
kvmap = map[string]interface{}{
"id": "1",
"name": "john",
}
rules = map[string]string{
"id": "",
"name": "",
}
msgs = map[string]interface{}{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil {
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{}{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil {
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{}{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil {
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{}{
"id": "ID不能为空|ID范围应当为:min到:max",
"name": map[string]string{
"required": "名称不能为空",
"length": "名称长度为:min到:max个字符",
},
}
if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil {
t.Error(m)
}
}
// 如果值为nil并且不需要require*验证时,其他验证失效
func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) {
data := map[string]interface{}{
"id": "1",
}
rules := map[string]string{
"id": "required",
"name": "length:4,16",
}
if m := gvalid.CheckMap(data, rules); m != nil {
t.Error(m)
}
}
func Test_Sequence(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
params := map[string]interface{}{
"passport": "",
"password": "123456",
"password2": "1234567",
}
rules := []string{
"passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间",
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
err := gvalid.CheckMap(params, rules)
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)
t.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等")
t.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"})
k, m := err.FirstItem()
t.Assert(k, "passport")
t.Assert(m, err.Map())
r, s := err.FirstRule()
t.Assert(r, "required")
t.Assert(s, "账号不能为空")
})
}