mirror of
https://gitee.com/johng/gf
synced 2026-07-03 11:51:04 +08:00
gvalid test 20190704 11:16
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -1,182 +1,182 @@
|
||||
// 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/g/test/gtest"
|
||||
"github.com/gogf/gf/g/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.Case(t, func() {
|
||||
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)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Map()), 2)
|
||||
gtest.Assert(err.Map()["required"], "账号不能为空")
|
||||
gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间")
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
|
||||
gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等")
|
||||
gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"})
|
||||
|
||||
k, m := err.FirstItem()
|
||||
gtest.Assert(k, "passport")
|
||||
gtest.Assert(m, err.Map())
|
||||
|
||||
r, s := err.FirstRule()
|
||||
gtest.Assert(r, "required")
|
||||
gtest.Assert(s, "账号不能为空")
|
||||
})
|
||||
}
|
||||
// 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/g/test/gtest"
|
||||
"github.com/gogf/gf/g/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.Case(t, func() {
|
||||
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)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Map()), 2)
|
||||
gtest.Assert(err.Map()["required"], "账号不能为空")
|
||||
gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间")
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
|
||||
gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等")
|
||||
gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"})
|
||||
|
||||
k, m := err.FirstItem()
|
||||
gtest.Assert(k, "passport")
|
||||
gtest.Assert(m, err.Map())
|
||||
|
||||
r, s := err.FirstRule()
|
||||
gtest.Assert(r, "required")
|
||||
gtest.Assert(s, "账号不能为空")
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,224 +1,224 @@
|
||||
// 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/g/test/gtest"
|
||||
"github.com/gogf/gf/g/util/gvalid"
|
||||
)
|
||||
|
||||
func Test_CheckStruct(t *testing.T) {
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"@required|length:6,16",
|
||||
"@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.Assert(err, nil)
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"Name@required|length:6,16#名称不能为空",
|
||||
"Age@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"Name@required|length:6,16#名称不能为空|",
|
||||
"Age@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := map[string]string{
|
||||
"Name": "required|length:6,16",
|
||||
"Age": "between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空")
|
||||
gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
Username string `json:"username" gvalid:"@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.Assert(err, nil)
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
||||
})
|
||||
|
||||
// gvalid tag
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
|
||||
rules := []string{
|
||||
"username@required#用户名不能为空",
|
||||
}
|
||||
|
||||
err := gvalid.CheckStruct(user, rules)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
})
|
||||
|
||||
// valid tag
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `valid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `valid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
}
|
||||
// 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/g/test/gtest"
|
||||
"github.com/gogf/gf/g/util/gvalid"
|
||||
)
|
||||
|
||||
func Test_CheckStruct(t *testing.T) {
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"@required|length:6,16",
|
||||
"@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.Assert(err, nil)
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"Name@required|length:6,16#名称不能为空",
|
||||
"Age@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := []string{
|
||||
"Name@required|length:6,16#名称不能为空|",
|
||||
"Age@between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type Object struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
rules := map[string]string{
|
||||
"Name": "required|length:6,16",
|
||||
"Age": "between:18,30",
|
||||
}
|
||||
msgs := map[string]interface{}{
|
||||
"Name": map[string]string{
|
||||
"required": "名称不能为空",
|
||||
"length": "名称长度为:min到:max个字符",
|
||||
},
|
||||
"Age": "年龄为18到30周岁",
|
||||
}
|
||||
obj := &Object{"john", 16}
|
||||
err := gvalid.CheckStruct(obj, rules, msgs)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["Name"]["required"], "")
|
||||
gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
||||
gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 2)
|
||||
gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空")
|
||||
gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
Username string `json:"username" gvalid:"@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.Assert(err, nil)
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type LoginRequest struct {
|
||||
username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
var login LoginRequest
|
||||
err := gvalid.CheckStruct(login, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
||||
})
|
||||
|
||||
// gvalid tag
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
|
||||
rules := []string{
|
||||
"username@required#用户名不能为空",
|
||||
}
|
||||
|
||||
err := gvalid.CheckStruct(user, rules)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `gvalid:"uid@required|min:10#ID不能为空"`
|
||||
Age int `gvalid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
})
|
||||
|
||||
// valid tag
|
||||
gtest.Case(t, func() {
|
||||
type User struct {
|
||||
Id int `valid:"uid@required|min:10#|ID不能为空"`
|
||||
Age int `valid:"age@required#年龄不能为空"`
|
||||
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
||||
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
||||
}
|
||||
user := &User{
|
||||
Id: 1,
|
||||
Username: "john",
|
||||
Password: "123456",
|
||||
}
|
||||
err := gvalid.CheckStruct(user, nil)
|
||||
gtest.AssertNE(err, nil)
|
||||
gtest.Assert(len(err.Maps()), 1)
|
||||
gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,94 +1,94 @@
|
||||
// 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 (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/gogf/gf/g/test/gtest"
|
||||
"github.com/gogf/gf/g/util/gvalid"
|
||||
)
|
||||
|
||||
func Test_Map(t *testing.T) {
|
||||
err := &gvalid.Error{}
|
||||
m := err.Map()
|
||||
gtest.Assert(m, nil)
|
||||
}
|
||||
|
||||
func Test_FirstString(t *testing.T) {
|
||||
err := &gvalid.Error{}
|
||||
n := err.FirstString()
|
||||
gtest.Assert(n, "")
|
||||
}
|
||||
|
||||
func Test_SetDefaultErrorMsgs(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := map[string]string{
|
||||
"integer": "请输入一个整数",
|
||||
"length": "参数长度不对啊老铁",
|
||||
}
|
||||
gvalid.SetDefaultErrorMsgs(msgs)
|
||||
e := gvalid.Check("6.66", rule, nil)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, msgs["integer"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, msgs["length"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_CustomError1(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := map[string]string{
|
||||
"integer": "请输入一个整数",
|
||||
"length": "参数长度不对啊老铁",
|
||||
}
|
||||
e := gvalid.Check("6.66", rule, msgs)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, msgs["integer"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, msgs["length"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_CustomError2(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := "请输入一个整数|参数长度不对啊老铁"
|
||||
e := gvalid.Check("6.66", rule, msgs)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, "请输入一个整数") != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, "参数长度不对啊老铁") != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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 (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/gogf/gf/g/test/gtest"
|
||||
"github.com/gogf/gf/g/util/gvalid"
|
||||
)
|
||||
|
||||
func Test_Map(t *testing.T) {
|
||||
err := &gvalid.Error{}
|
||||
m := err.Map()
|
||||
gtest.Assert(m, nil)
|
||||
}
|
||||
|
||||
func Test_FirstString(t *testing.T) {
|
||||
err := &gvalid.Error{}
|
||||
n := err.FirstString()
|
||||
gtest.Assert(n, "")
|
||||
}
|
||||
|
||||
func Test_SetDefaultErrorMsgs(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := map[string]string{
|
||||
"integer": "请输入一个整数",
|
||||
"length": "参数长度不对啊老铁",
|
||||
}
|
||||
gvalid.SetDefaultErrorMsgs(msgs)
|
||||
e := gvalid.Check("6.66", rule, nil)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, msgs["integer"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, msgs["length"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_CustomError1(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := map[string]string{
|
||||
"integer": "请输入一个整数",
|
||||
"length": "参数长度不对啊老铁",
|
||||
}
|
||||
e := gvalid.Check("6.66", rule, msgs)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, msgs["integer"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, msgs["length"]) != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_CustomError2(t *testing.T) {
|
||||
rule := "integer|length:6,16"
|
||||
msgs := "请输入一个整数|参数长度不对啊老铁"
|
||||
e := gvalid.Check("6.66", rule, msgs)
|
||||
if e == nil || len(e.Map()) != 2 {
|
||||
t.Error("规则校验失败")
|
||||
} else {
|
||||
if v, ok := e.Map()["integer"]; ok {
|
||||
if strings.Compare(v, "请输入一个整数") != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
if v, ok := e.Map()["length"]; ok {
|
||||
if strings.Compare(v, "参数长度不对啊老铁") != 0 {
|
||||
t.Error("错误信息不匹配")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user