Skip to content

Commit 9e18217

Browse files
authored
fix:[#450] The image rule of validation is wrong (#532)
1 parent 1b41800 commit 9e18217

3 files changed

Lines changed: 65 additions & 44 deletions

File tree

support/constant.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package support
22

3-
const Version string = "v1.14.1"
3+
const Version string = "v1.14.2"
44

55
const (
66
EnvRuntime = "runtime"

validation/validator.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package validation
22

33
import (
4+
"mime/multipart"
45
"reflect"
56

67
"github.com/gookit/validate"
@@ -39,7 +40,29 @@ func (v *Validator) Bind(ptr any) error {
3940
return err
4041
}
4142

42-
return decoder.Decode(data)
43+
if err := decoder.Decode(data); err != nil {
44+
return err
45+
}
46+
47+
ptrValue := reflect.Indirect(reflect.ValueOf(ptr))
48+
if ptrValue.Type().Kind() == reflect.Struct {
49+
for i := 0; i < ptrValue.Type().NumField(); i++ {
50+
if !ptrValue.Type().Field(i).IsExported() {
51+
continue
52+
}
53+
formTag := ptrValue.Type().Field(i).Tag.Get("form")
54+
if formTag != "" && ptrValue.Type().Field(i).Type == reflect.TypeOf(new(multipart.FileHeader)) {
55+
if raw, exist := v.instance.Raw(formTag); exist {
56+
rawType := reflect.TypeOf(raw)
57+
if rawType == reflect.TypeOf(new(multipart.FileHeader)) {
58+
ptrValue.Field(i).Set(reflect.ValueOf(raw))
59+
}
60+
}
61+
}
62+
}
63+
}
64+
65+
return nil
4366
}
4467

4568
func (v *Validator) Errors() httpvalidate.Errors {

validation/validator_test.go

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,51 +25,50 @@ func TestBind(t *testing.T) {
2525
}
2626

2727
tests := []struct {
28-
name string
29-
data validate.DataFace
30-
rules map[string]string
31-
expectData Data
32-
expectErr error
28+
name string
29+
data validate.DataFace
30+
rules map[string]string
31+
assert func(data Data)
3332
}{
3433
{
3534
name: "success when data is map and key is lowercase",
3635
data: validate.FromMap(map[string]any{"a": "aa"}),
3736
rules: map[string]string{"a": "required"},
38-
expectData: Data{
39-
A: "aa",
37+
assert: func(data Data) {
38+
assert.Equal(t, "aa", data.A)
4039
},
4140
},
4241
{
4342
name: "success when data is map and key is int",
4443
data: validate.FromMap(map[string]any{"b": 1}),
4544
rules: map[string]string{"b": "required"},
46-
expectData: Data{
47-
B: 1,
45+
assert: func(data Data) {
46+
assert.Equal(t, 1, data.B)
4847
},
4948
},
5049
{
5150
name: "success when data is map and cast key",
5251
data: validate.FromMap(map[string]any{"b": "1"}),
5352
rules: map[string]string{"b": "required"},
54-
expectData: Data{
55-
B: 1,
53+
assert: func(data Data) {
54+
assert.Equal(t, 1, data.B)
5655
},
5756
},
5857
{
5958
name: "success when data is map, key is lowercase and has errors",
6059
data: validate.FromMap(map[string]any{"a": "aa", "c": "cc"}),
6160
rules: map[string]string{"a": "required", "b": "required"},
62-
expectData: Data{
63-
A: "",
64-
C: "",
61+
assert: func(data Data) {
62+
assert.Equal(t, "", data.A)
63+
assert.Equal(t, "", data.C)
6564
},
6665
},
6766
{
6867
name: "success when data is map and key is uppercase",
6968
data: validate.FromMap(map[string]any{"A": "aa"}),
7069
rules: map[string]string{"A": "required"},
71-
expectData: Data{
72-
A: "aa",
70+
assert: func(data Data) {
71+
assert.Equal(t, "aa", data.A)
7372
},
7473
},
7574
{
@@ -85,8 +84,8 @@ func TestBind(t *testing.T) {
8584
return data
8685
}(),
8786
rules: map[string]string{"A": "required"},
88-
expectData: Data{
89-
A: "aa",
87+
assert: func(data Data) {
88+
assert.Equal(t, "aa", data.A)
9089
},
9190
},
9291
{
@@ -101,8 +100,10 @@ func TestBind(t *testing.T) {
101100

102101
return data
103102
}(),
104-
rules: map[string]string{"a": "required"},
105-
expectData: Data{},
103+
rules: map[string]string{"a": "required"},
104+
assert: func(data Data) {
105+
assert.Equal(t, "", data.A)
106+
},
106107
},
107108
{
108109
name: "empty when data is struct and key is struct",
@@ -118,8 +119,10 @@ func TestBind(t *testing.T) {
118119

119120
return data
120121
}(),
121-
rules: map[string]string{"d.a": "required"},
122-
expectData: Data{},
122+
rules: map[string]string{"d.a": "required"},
123+
assert: func(data Data) {
124+
assert.Equal(t, "", data.A)
125+
},
123126
},
124127
{
125128
name: "success when data is get request",
@@ -132,8 +135,8 @@ func TestBind(t *testing.T) {
132135
return data
133136
}(),
134137
rules: map[string]string{"a": "required"},
135-
expectData: Data{
136-
A: "aa",
138+
assert: func(data Data) {
139+
assert.Equal(t, "aa", data.A)
137140
},
138141
},
139142
{
@@ -147,8 +150,8 @@ func TestBind(t *testing.T) {
147150
return data
148151
}(),
149152
rules: map[string]string{"b": "required"},
150-
expectData: Data{
151-
B: 1,
153+
assert: func(data Data) {
154+
assert.Equal(t, 1, data.B)
152155
},
153156
},
154157
{
@@ -163,8 +166,8 @@ func TestBind(t *testing.T) {
163166
return data
164167
}(),
165168
rules: map[string]string{"a": "required"},
166-
expectData: Data{
167-
A: "aa",
169+
assert: func(data Data) {
170+
assert.Equal(t, "aa", data.A)
168171
},
169172
},
170173
{
@@ -177,16 +180,14 @@ func TestBind(t *testing.T) {
177180
return data
178181
}(),
179182
rules: map[string]string{"a": "required", "file": "required"},
180-
expectData: func() Data {
183+
assert: func(data Data) {
181184
request := buildRequest(t)
182-
_, fileHeader, _ := request.FormFile("file")
183-
data := Data{
184-
A: "aa",
185-
File: fileHeader,
186-
}
185+
_, file, _ := request.FormFile("file")
187186

188-
return data
189-
}(),
187+
assert.Equal(t, "aa", data.A)
188+
assert.NotNil(t, data.File)
189+
assert.Equal(t, file.Filename, data.File.Filename)
190+
},
190191
},
191192
}
192193

@@ -198,12 +199,9 @@ func TestBind(t *testing.T) {
198199

199200
var data Data
200201
err = validator.Bind(&data)
201-
assert.Nil(t, test.expectErr, err)
202-
assert.Equal(t, test.expectData.A, data.A)
203-
assert.Equal(t, test.expectData.B, data.B)
204-
assert.Equal(t, test.expectData.C, data.C)
205-
assert.Equal(t, test.expectData.D, data.D)
206-
assert.Equal(t, test.expectData.File == nil, data.File == nil)
202+
assert.Nil(t, err)
203+
204+
test.assert(data)
207205
})
208206
}
209207
}

0 commit comments

Comments
 (0)