2021-01-12 10:46:39 +08:00
|
|
|
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
2019-01-29 23:01:14 +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,
|
2019-02-02 16:18:25 +08:00
|
|
|
// You can obtain one at https://github.com/gogf/gf.
|
2019-01-29 23:01:14 +08:00
|
|
|
|
|
|
|
package gvalid_test
|
|
|
|
|
|
|
|
import (
|
2021-05-13 20:56:52 +08:00
|
|
|
"context"
|
2019-06-27 14:33:39 +08:00
|
|
|
"testing"
|
|
|
|
|
2021-11-13 23:30:31 +08:00
|
|
|
"github.com/gogf/gf/v2/container/gvar"
|
2021-10-11 21:41:56 +08:00
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
2021-11-13 23:30:31 +08:00
|
|
|
"github.com/gogf/gf/v2/os/gtime"
|
2021-10-11 21:41:56 +08:00
|
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
|
|
"github.com/gogf/gf/v2/util/gvalid"
|
2019-01-29 23:01:14 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func Test_CheckStruct(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
|
|
|
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": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
"Age": "年龄为18到30周岁",
|
|
|
|
}
|
|
|
|
obj := &Object{"john", 16}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err, nil)
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
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": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
"Age": "年龄为18到30周岁",
|
|
|
|
}
|
|
|
|
obj := &Object{"john", 16}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 2)
|
|
|
|
t.Assert(err.Maps()["Name"]["required"], "")
|
|
|
|
t.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
|
|
|
t.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
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": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-07-04 11:19:59 +08:00
|
|
|
},
|
|
|
|
"Age": "年龄为18到30周岁",
|
|
|
|
}
|
|
|
|
obj := &Object{"john", 16}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 2)
|
|
|
|
t.Assert(err.Maps()["Name"]["required"], "")
|
|
|
|
t.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
|
|
|
t.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-19 09:06:52 +08:00
|
|
|
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": "名称不能为空",
|
2021-11-14 21:00:34 +08:00
|
|
|
"length": "名称长度为{min}到{max}个字符",
|
2019-06-19 09:06:52 +08:00
|
|
|
},
|
|
|
|
"Age": "年龄为18到30周岁",
|
|
|
|
}
|
|
|
|
obj := &Object{"john", 16}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 2)
|
|
|
|
t.Assert(err.Maps()["Name"]["required"], "")
|
|
|
|
t.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符")
|
|
|
|
t.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁")
|
2019-06-19 09:06:52 +08:00
|
|
|
})
|
2019-03-11 22:33:20 +08:00
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-19 09:06:52 +08:00
|
|
|
type LoginRequest struct {
|
|
|
|
Username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
|
|
|
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
|
|
|
}
|
|
|
|
var login LoginRequest
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), login, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 2)
|
|
|
|
t.Assert(err.Maps()["username"]["required"], "用户名不能为空")
|
|
|
|
t.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
2019-06-19 09:06:52 +08:00
|
|
|
})
|
2019-03-11 22:33:20 +08:00
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
type LoginRequest struct {
|
|
|
|
Username string `json:"username" gvalid:"@required#用户名不能为空"`
|
|
|
|
Password string `json:"password" gvalid:"@required#登录密码不能为空"`
|
|
|
|
}
|
|
|
|
var login LoginRequest
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), login, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err, nil)
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
type LoginRequest struct {
|
|
|
|
username string `json:"username" gvalid:"username@required#用户名不能为空"`
|
|
|
|
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
|
|
|
|
}
|
|
|
|
var login LoginRequest
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), login, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2019-06-27 14:33:39 +08:00
|
|
|
// gvalid tag
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-19 09:06:52 +08:00
|
|
|
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",
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 1)
|
|
|
|
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
2019-06-19 09:06:52 +08:00
|
|
|
})
|
2019-03-11 22:33:20 +08:00
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
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#用户名不能为空",
|
|
|
|
}
|
|
|
|
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, rules)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 1)
|
|
|
|
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:19:59 +08:00
|
|
|
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",
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 1)
|
2019-07-04 11:19:59 +08:00
|
|
|
})
|
|
|
|
|
2019-06-27 14:33:39 +08:00
|
|
|
// valid tag
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-27 14:33:39 +08:00
|
|
|
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",
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(len(err.Maps()), 1)
|
|
|
|
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
|
2019-06-27 14:33:39 +08:00
|
|
|
})
|
2019-01-29 23:01:14 +08:00
|
|
|
}
|
2019-07-04 11:11:41 +08:00
|
|
|
|
2021-05-17 19:59:34 +08:00
|
|
|
func Test_CheckStruct_EmbeddedObject_Attribute(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Base struct {
|
|
|
|
Time *gtime.Time
|
|
|
|
}
|
|
|
|
type Object struct {
|
|
|
|
Base
|
|
|
|
Name string
|
|
|
|
Type int
|
|
|
|
}
|
|
|
|
rules := map[string]string{
|
|
|
|
"Name": "required",
|
|
|
|
"Type": "required",
|
|
|
|
}
|
|
|
|
ruleMsg := map[string]interface{}{
|
|
|
|
"Name": "名称必填",
|
|
|
|
"Type": "类型必填",
|
|
|
|
}
|
|
|
|
obj := &Object{}
|
|
|
|
obj.Type = 1
|
|
|
|
obj.Name = "john"
|
|
|
|
obj.Time = gtime.Now()
|
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, ruleMsg)
|
|
|
|
t.Assert(err, nil)
|
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Base struct {
|
|
|
|
Name string
|
|
|
|
Type int
|
|
|
|
}
|
|
|
|
type Object struct {
|
|
|
|
Base Base
|
|
|
|
Name string
|
|
|
|
Type int
|
|
|
|
}
|
|
|
|
rules := map[string]string{
|
|
|
|
"Name": "required",
|
|
|
|
"Type": "required",
|
|
|
|
}
|
|
|
|
ruleMsg := map[string]interface{}{
|
|
|
|
"Name": "名称必填",
|
|
|
|
"Type": "类型必填",
|
|
|
|
}
|
|
|
|
obj := &Object{}
|
|
|
|
obj.Type = 1
|
|
|
|
obj.Name = "john"
|
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, rules, ruleMsg)
|
|
|
|
t.Assert(err, nil)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-03-10 23:28:34 +08:00
|
|
|
func Test_CheckStruct_With_EmbeddedObject(t *testing.T) {
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-07-04 11:11:41 +08:00
|
|
|
type Pass struct {
|
|
|
|
Pass1 string `valid:"password1@required|same:password2#请输入您的密码|您两次输入的密码不一致"`
|
|
|
|
Pass2 string `valid:"password2@required|same:password1#请再次输入您的密码|您两次输入的密码不一致"`
|
|
|
|
}
|
|
|
|
type User struct {
|
|
|
|
Id int
|
|
|
|
Name string `valid:"name@required#请输入您的姓名"`
|
2020-11-04 20:04:54 +08:00
|
|
|
Pass
|
2019-07-04 11:11:41 +08:00
|
|
|
}
|
|
|
|
user := &User{
|
2019-07-13 14:24:44 +08:00
|
|
|
Name: "",
|
2019-07-04 11:11:41 +08:00
|
|
|
Pass: Pass{
|
|
|
|
Pass1: "1",
|
|
|
|
Pass2: "2",
|
|
|
|
},
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, nil)
|
2020-03-19 22:56:12 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(err.Maps()["name"], g.Map{"required": "请输入您的姓名"})
|
|
|
|
t.Assert(err.Maps()["password1"], g.Map{"same": "您两次输入的密码不一致"})
|
|
|
|
t.Assert(err.Maps()["password2"], g.Map{"same": "您两次输入的密码不一致"})
|
2019-07-04 11:11:41 +08:00
|
|
|
})
|
|
|
|
}
|
2020-08-20 23:25:36 +08:00
|
|
|
|
2021-03-10 23:28:34 +08:00
|
|
|
func Test_CheckStruct_With_StructAttribute(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Pass struct {
|
|
|
|
Pass1 string `valid:"password1@required|same:password2#请输入您的密码|您两次输入的密码不一致"`
|
|
|
|
Pass2 string `valid:"password2@required|same:password1#请再次输入您的密码|您两次输入的密码不一致"`
|
|
|
|
}
|
|
|
|
type User struct {
|
2021-05-17 19:59:34 +08:00
|
|
|
Pass
|
|
|
|
Id int
|
|
|
|
Name string `valid:"name@required#请输入您的姓名"`
|
2021-03-10 23:28:34 +08:00
|
|
|
}
|
|
|
|
user := &User{
|
|
|
|
Name: "",
|
2021-05-17 19:59:34 +08:00
|
|
|
Pass: Pass{
|
2021-03-10 23:28:34 +08:00
|
|
|
Pass1: "1",
|
|
|
|
Pass2: "2",
|
|
|
|
},
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), user, nil)
|
2021-03-10 23:28:34 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
t.Assert(err.Maps()["name"], g.Map{"required": "请输入您的姓名"})
|
|
|
|
t.Assert(err.Maps()["password1"], g.Map{"same": "您两次输入的密码不一致"})
|
|
|
|
t.Assert(err.Maps()["password2"], g.Map{"same": "您两次输入的密码不一致"})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-08-20 23:25:36 +08:00
|
|
|
func Test_CheckStruct_Optional(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Params struct {
|
2020-08-20 23:28:10 +08:00
|
|
|
Page int `v:"required|min:1 # page is required"`
|
|
|
|
Size int `v:"required|between:1,100 # size is required"`
|
2021-11-14 21:00:34 +08:00
|
|
|
ProjectId string `v:"between:1,10000 # project id must between {min}, {max}"`
|
2020-08-20 23:25:36 +08:00
|
|
|
}
|
|
|
|
obj := &Params{
|
|
|
|
Page: 1,
|
2020-08-20 23:28:58 +08:00
|
|
|
Size: 10,
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, nil)
|
2020-08-20 23:28:58 +08:00
|
|
|
t.Assert(err, nil)
|
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Params struct {
|
|
|
|
Page int `v:"required|min:1 # page is required"`
|
|
|
|
Size int `v:"required|between:1,100 # size is required"`
|
2021-11-14 21:00:34 +08:00
|
|
|
ProjectId *gvar.Var `v:"between:1,10000 # project id must between {min}, {max}"`
|
2020-08-20 23:28:58 +08:00
|
|
|
}
|
|
|
|
obj := &Params{
|
|
|
|
Page: 1,
|
|
|
|
Size: 10,
|
2020-08-20 23:25:36 +08:00
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, nil)
|
2020-08-20 23:25:36 +08:00
|
|
|
t.Assert(err, nil)
|
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Params struct {
|
2020-08-20 23:28:10 +08:00
|
|
|
Page int `v:"required|min:1 # page is required"`
|
|
|
|
Size int `v:"required|between:1,100 # size is required"`
|
2021-11-14 21:00:34 +08:00
|
|
|
ProjectId int `v:"between:1,10000 # project id must between {min}, {max}"`
|
2020-08-20 23:25:36 +08:00
|
|
|
}
|
|
|
|
obj := &Params{
|
|
|
|
Page: 1,
|
2020-08-20 23:28:58 +08:00
|
|
|
Size: 10,
|
2020-08-20 23:25:36 +08:00
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, nil)
|
2020-08-20 23:25:36 +08:00
|
|
|
t.Assert(err.String(), "project id must between 1, 10000")
|
|
|
|
})
|
|
|
|
}
|
2020-12-09 21:00:30 +08:00
|
|
|
|
|
|
|
func Test_CheckStruct_NoTag(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Params struct {
|
|
|
|
Page int
|
|
|
|
Size int
|
|
|
|
ProjectId string
|
|
|
|
}
|
|
|
|
obj := &Params{
|
|
|
|
Page: 1,
|
|
|
|
Size: 10,
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, nil)
|
2020-12-09 21:00:30 +08:00
|
|
|
t.Assert(err, nil)
|
|
|
|
})
|
|
|
|
}
|
2021-03-30 15:25:26 +08:00
|
|
|
|
|
|
|
func Test_CheckStruct_InvalidRule(t *testing.T) {
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type Params struct {
|
|
|
|
Name string
|
|
|
|
Age uint
|
|
|
|
Phone string `v:"mobile"`
|
|
|
|
}
|
|
|
|
obj := &Params{
|
|
|
|
Name: "john",
|
|
|
|
Age: 18,
|
|
|
|
Phone: "123",
|
|
|
|
}
|
2021-05-13 20:56:52 +08:00
|
|
|
err := gvalid.CheckStruct(context.TODO(), obj, nil)
|
2021-03-30 15:25:26 +08:00
|
|
|
t.AssertNE(err, nil)
|
|
|
|
})
|
|
|
|
}
|
2021-05-11 20:57:30 +08:00
|
|
|
|
2021-05-19 09:25:49 +08:00
|
|
|
func TestValidator_CheckStructWithData(t *testing.T) {
|
2021-05-11 20:57:30 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type UserApiSearch struct {
|
2021-05-12 00:01:52 +08:00
|
|
|
Uid int64 `v:"required"`
|
|
|
|
Nickname string `v:"required-with:uid"`
|
|
|
|
}
|
|
|
|
data := UserApiSearch{
|
|
|
|
Uid: 1,
|
|
|
|
Nickname: "john",
|
|
|
|
}
|
2021-05-19 09:25:49 +08:00
|
|
|
t.Assert(gvalid.CheckStructWithData(context.TODO(), data, g.Map{"uid": 1, "nickname": "john"}, nil), nil)
|
2021-05-12 00:01:52 +08:00
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type UserApiSearch struct {
|
|
|
|
Uid int64 `v:"required"`
|
|
|
|
Nickname string `v:"required-with:uid"`
|
2021-05-11 20:57:30 +08:00
|
|
|
}
|
|
|
|
data := UserApiSearch{}
|
2021-05-19 09:25:49 +08:00
|
|
|
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
|
2021-05-11 20:57:30 +08:00
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type UserApiSearch struct {
|
|
|
|
Uid int64 `json:"uid" v:"required"`
|
|
|
|
Nickname string `json:"nickname" v:"required-with:Uid"`
|
|
|
|
}
|
|
|
|
data := UserApiSearch{
|
|
|
|
Uid: 1,
|
|
|
|
}
|
2021-05-19 09:25:49 +08:00
|
|
|
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
|
2021-05-11 20:57:30 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type UserApiSearch struct {
|
|
|
|
Uid int64 `json:"uid"`
|
|
|
|
Nickname string `json:"nickname" v:"required-with:Uid"`
|
|
|
|
StartTime *gtime.Time `json:"start_time" v:"required-with:EndTime"`
|
|
|
|
EndTime *gtime.Time `json:"end_time" v:"required-with:StartTime"`
|
|
|
|
}
|
|
|
|
data := UserApiSearch{
|
|
|
|
StartTime: nil,
|
|
|
|
EndTime: nil,
|
|
|
|
}
|
2021-05-19 09:25:49 +08:00
|
|
|
t.Assert(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
|
2021-05-11 20:57:30 +08:00
|
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
|
|
type UserApiSearch struct {
|
|
|
|
Uid int64 `json:"uid"`
|
|
|
|
Nickname string `json:"nickname" v:"required-with:Uid"`
|
|
|
|
StartTime *gtime.Time `json:"start_time" v:"required-with:EndTime"`
|
|
|
|
EndTime *gtime.Time `json:"end_time" v:"required-with:StartTime"`
|
|
|
|
}
|
|
|
|
data := UserApiSearch{
|
|
|
|
StartTime: gtime.Now(),
|
|
|
|
EndTime: nil,
|
|
|
|
}
|
2021-05-19 09:25:49 +08:00
|
|
|
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{"start_time": gtime.Now()}, nil), nil)
|
2021-05-11 20:57:30 +08:00
|
|
|
})
|
|
|
|
}
|