增加handle format的单元测试以及修复float处理的BUG
This commit is contained in:
		
							
								
								
									
										18
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								go.mod
									
									
									
									
									
								
							@ -3,20 +3,26 @@ module git.zhangdeman.cn/gateway/validator
 | 
			
		||||
go 1.22.2
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc // indirect
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20240325080031-1f58204e8687
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/util v0.0.0-20231227095334-7eb5cdbf9253
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240422034417-8c922be06d95
 | 
			
		||||
	github.com/stretchr/testify v1.9.0
 | 
			
		||||
	github.com/tidwall/gjson v1.17.1
 | 
			
		||||
	github.com/tidwall/sjson v1.2.5
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20240311030808-e2a2e6a3c211 // indirect
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20240325080031-1f58204e8687 // indirect
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/util v0.0.0-20231227095334-7eb5cdbf9253 // indirect
 | 
			
		||||
	git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240422034417-8c922be06d95 // indirect
 | 
			
		||||
	github.com/BurntSushi/toml v1.3.2 // indirect
 | 
			
		||||
	github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
			
		||||
	github.com/go-ini/ini v1.67.0 // indirect
 | 
			
		||||
	github.com/mitchellh/go-homedir v1.1.0 // indirect
 | 
			
		||||
	github.com/mozillazg/go-pinyin v0.20.0 // indirect
 | 
			
		||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
			
		||||
	github.com/spaolacci/murmur3 v1.1.0 // indirect
 | 
			
		||||
	github.com/tidwall/gjson v1.17.1 // indirect
 | 
			
		||||
	github.com/tidwall/match v1.1.1 // indirect
 | 
			
		||||
	github.com/tidwall/pretty v1.2.1 // indirect
 | 
			
		||||
	github.com/tidwall/sjson v1.2.5 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								go.sum
									
									
									
									
									
								
							@ -1,13 +1,3 @@
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429055735-7d7191726f0c h1:n+n49onVpIgemvRdX4XnUB5psWh/NZ/qYkapCbJ4AYA=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429055735-7d7191726f0c/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429080251-9cd57471a8f5 h1:6JsrADIXKWb7ZzaqAFlNpfL5ynu8m1X8Tju8h63mN0Y=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429080251-9cd57471a8f5/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429082641-eeef7e967d00 h1:bOPZXYX9CfnZBPqkQnzgwnuC1uyXBivSY0nmV4HabXg=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240429082641-eeef7e967d00/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240430135109-0be82b4a6434 h1:BgpbeE3Vuy1iS4xrMzJP6bDGbrrhlv8uSDh8n/Sj+fg=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240430135109-0be82b4a6434/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501132050-6c507d6b9c99 h1:rskqw1MOJ7b2qvGZLJ8S9POZFqvcaeaCnBp4FStIiyI=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501132050-6c507d6b9c99/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc h1:kPz9xiUVruM8kwbUUVpxyCTX8pGgyKt60K5zX77oyC4=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
 | 
			
		||||
git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20240311030808-e2a2e6a3c211 h1:I/wOsRpCSRkU9vo1u703slQsmK0wnNeZzsWQOGtIAG0=
 | 
			
		||||
@ -22,25 +12,31 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8
 | 
			
		||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 | 
			
		||||
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
 | 
			
		||||
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
 | 
			
		||||
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
 | 
			
		||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 | 
			
		||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 | 
			
		||||
github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ=
 | 
			
		||||
github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 | 
			
		||||
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 | 
			
		||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 | 
			
		||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 | 
			
		||||
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 | 
			
		||||
github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U=
 | 
			
		||||
github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 | 
			
		||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
 | 
			
		||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
 | 
			
		||||
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
 | 
			
		||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 | 
			
		||||
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
 | 
			
		||||
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 | 
			
		||||
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
 | 
			
		||||
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,7 @@ import (
 | 
			
		||||
	"git.zhangdeman.cn/gateway/validator/define"
 | 
			
		||||
	"git.zhangdeman.cn/zhangdeman/util"
 | 
			
		||||
	"git.zhangdeman.cn/zhangdeman/wrapper"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// handleFloat 处理float数据
 | 
			
		||||
@ -27,20 +28,20 @@ func handleFloat(inputVal any, rule *define.FieldRule) (float64, error) {
 | 
			
		||||
	if err = util.ConvertAssign(&formatData, inputVal); nil != err {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if !rule.AllowZero {
 | 
			
		||||
	if !rule.AllowZero && formatData == 0 {
 | 
			
		||||
		return 0, fmt.Errorf("%v : field type is float, but zero val is not allowed", rule.Path)
 | 
			
		||||
	}
 | 
			
		||||
	if nil == rule.ValueLimit {
 | 
			
		||||
		return formatData, nil
 | 
			
		||||
	}
 | 
			
		||||
	if nil != rule.ValueLimit.Min && formatData < *rule.ValueLimit.Min {
 | 
			
		||||
		return 0, fmt.Errorf("%v : field type is float, min val is %v, real val is %v", rule.Path, *rule.ValueLimit.Min, formatData)
 | 
			
		||||
		return 0, fmt.Errorf("%v : field type is float, min val is [%v], real val is [%v]", rule.Path, *rule.ValueLimit.Min, formatData)
 | 
			
		||||
	}
 | 
			
		||||
	if nil != rule.ValueLimit.Max && formatData > *rule.ValueLimit.Max {
 | 
			
		||||
		return 0, fmt.Errorf("%v : field type is float, max val is %v, real val is %v", rule.Path, *rule.ValueLimit.Max, formatData)
 | 
			
		||||
	}
 | 
			
		||||
	if len(rule.ValueLimit.EnumList) > 0 {
 | 
			
		||||
		if wrapper.ArrayType(rule.ValueLimit.EnumList).Has(formatData) < 0 {
 | 
			
		||||
		if wrapper.ArrayType(rule.ValueLimit.EnumList).Has(strconv.FormatFloat(formatData, 'f', -1, 64)) < 0 {
 | 
			
		||||
			return 0, fmt.Errorf("%v : field type is float, real val is %v, is not in enum list", rule.Path, formatData)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										82
									
								
								handle_base_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								handle_base_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,82 @@
 | 
			
		||||
// Package validator ...
 | 
			
		||||
//
 | 
			
		||||
// Description : validator ...
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 2024-05-01 22:57
 | 
			
		||||
package validator
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.zhangdeman.cn/gateway/validator/define"
 | 
			
		||||
	"git.zhangdeman.cn/zhangdeman/consts"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Test_handleFloat float转换单元测试
 | 
			
		||||
//
 | 
			
		||||
// Author : go_developer@163.com<白茶清欢>
 | 
			
		||||
//
 | 
			
		||||
// Date : 23:00 2024/5/1
 | 
			
		||||
func Test_handleFloat(t *testing.T) {
 | 
			
		||||
	minVal0 := float64(0)
 | 
			
		||||
	minVal1 := float64(1)
 | 
			
		||||
	maxVal := float64(100)
 | 
			
		||||
	as := assert.New(t)
 | 
			
		||||
	checkRule := &define.FieldRule{
 | 
			
		||||
		Path:                   "test_float",
 | 
			
		||||
		Type:                   consts.DataTypeFloat,
 | 
			
		||||
		DisableRewrite:         false,
 | 
			
		||||
		DefaultValue:           "",
 | 
			
		||||
		IsRequired:             false,
 | 
			
		||||
		AllowEmpty:             false,
 | 
			
		||||
		AllowZero:              false,
 | 
			
		||||
		AllowNil:               false,
 | 
			
		||||
		DisableAutoConvert:     false,
 | 
			
		||||
		RequiredConditionGroup: nil,
 | 
			
		||||
		ValueLimit: &define.ValueLimit{
 | 
			
		||||
			EnumList: nil,
 | 
			
		||||
			Min:      nil,
 | 
			
		||||
			Max:      nil,
 | 
			
		||||
			String:   nil,
 | 
			
		||||
			Map:      nil,
 | 
			
		||||
		},
 | 
			
		||||
		SliceConfig: nil,
 | 
			
		||||
	}
 | 
			
		||||
	int1 := int64(1)
 | 
			
		||||
	f1, err := handleFloat(int1, checkRule)
 | 
			
		||||
	as.Equal(nil, err)
 | 
			
		||||
	as.Equal(float64(1), f1)
 | 
			
		||||
	// 不允许零值
 | 
			
		||||
	int0 := int64(0)
 | 
			
		||||
	f0, err := handleFloat(int0, checkRule)
 | 
			
		||||
	as.Equal(float64(0), f0)
 | 
			
		||||
	as.NotEqual(nil, err)
 | 
			
		||||
	// 允许零值
 | 
			
		||||
	checkRule.AllowZero = true
 | 
			
		||||
	f0, err = handleFloat(int0, checkRule)
 | 
			
		||||
	as.Equal(float64(0), f0)
 | 
			
		||||
	as.Equal(nil, err)
 | 
			
		||||
	// 取值范围符合
 | 
			
		||||
	checkRule.ValueLimit.Min = &minVal0
 | 
			
		||||
	checkRule.ValueLimit.Max = &maxVal
 | 
			
		||||
	f0, err = handleFloat(int0, checkRule)
 | 
			
		||||
	as.Equal(float64(0), f0)
 | 
			
		||||
	as.Equal(nil, err)
 | 
			
		||||
	// 取值范围不符合
 | 
			
		||||
	checkRule.ValueLimit.Min = &minVal1
 | 
			
		||||
	f0, err = handleFloat(int0, checkRule)
 | 
			
		||||
	as.Equal(float64(0), f0)
 | 
			
		||||
	as.NotEqual(nil, err)
 | 
			
		||||
	// 验证枚举值(不包含)
 | 
			
		||||
	checkRule.ValueLimit.EnumList = []string{"0", "2"}
 | 
			
		||||
	f1, err = handleFloat(int1, checkRule)
 | 
			
		||||
	as.Equal(float64(0), f1)
 | 
			
		||||
	as.NotEqual(nil, err)
 | 
			
		||||
	// 验证枚举值(包含)
 | 
			
		||||
	checkRule.ValueLimit.EnumList = []string{"0", "1", "2"}
 | 
			
		||||
	f1, err = handleFloat(int1, checkRule)
 | 
			
		||||
	as.Equal(float64(1), f1)
 | 
			
		||||
	as.Equal(nil, err)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user