From 18f601261bb08b3c08fe806add8f149fdaa38b06 Mon Sep 17 00:00:00 2001 From: Xin Hao Date: Fri, 17 May 2024 13:22:25 +0800 Subject: [PATCH 1/2] binding: fix the error message of the query required constraint --- pkg/app/server/binding/binder_test.go | 8 ++++++-- .../server/binding/internal/decoder/base_type_decoder.go | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/app/server/binding/binder_test.go b/pkg/app/server/binding/binder_test.go index 225b8bd2e..f9176cacb 100644 --- a/pkg/app/server/binding/binder_test.go +++ b/pkg/app/server/binding/binder_test.go @@ -466,10 +466,14 @@ func TestBind_RequiredBind(t *testing.T) { A int `query:"a,required"` } req := newMockRequest(). + SetRequestURI("http://foobar.com") + err := DefaultBinder().Bind(req.Req, &s, nil) + assert.DeepEqual(t, "'a' field is a 'required' parameter, but the request does not have this parameter", err.Error()) + + req = newMockRequest(). SetRequestURI("http://foobar.com"). SetHeader("A", "1") - - err := DefaultBinder().Bind(req.Req, &s, nil) + err = DefaultBinder().Bind(req.Req, &s, nil) if err == nil { t.Fatal("expected error") } diff --git a/pkg/app/server/binding/internal/decoder/base_type_decoder.go b/pkg/app/server/binding/internal/decoder/base_type_decoder.go index 9c5cb1200..cc53b8f00 100644 --- a/pkg/app/server/binding/internal/decoder/base_type_decoder.go +++ b/pkg/app/server/binding/internal/decoder/base_type_decoder.go @@ -90,7 +90,7 @@ func (d *baseTypeFieldTextDecoder) Decode(req *protocol.Request, params param.Pa break } if tagInfo.Required { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } } if err != nil { From b6b469f6ce34463869f300dc9fe8fd58c78343c4 Mon Sep 17 00:00:00 2001 From: Xin Hao Date: Fri, 17 May 2024 14:22:03 +0800 Subject: [PATCH 2/2] binding: fix the error message of the required constraint --- pkg/app/server/binding/binder_test.go | 2 ++ .../server/binding/internal/decoder/base_type_decoder.go | 2 +- pkg/app/server/binding/internal/decoder/map_type_decoder.go | 4 ++-- .../server/binding/internal/decoder/slice_type_decoder.go | 4 ++-- .../server/binding/internal/decoder/struct_type_decoder.go | 4 ++-- pkg/app/server/binding/tagexpr_bind_test.go | 6 +++--- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/app/server/binding/binder_test.go b/pkg/app/server/binding/binder_test.go index f9176cacb..ec962dafa 100644 --- a/pkg/app/server/binding/binder_test.go +++ b/pkg/app/server/binding/binder_test.go @@ -908,6 +908,7 @@ func TestBind_JSONRequiredField(t *testing.T) { if err == nil { t.Errorf("expected an error, but get nil") } + assert.DeepEqual(t, "'c' field is a 'required' parameter, but the request body does not have this parameter 'n.n2.c'", err.Error()) assert.DeepEqual(t, 1, result.N.A) assert.DeepEqual(t, 2, result.N.B) assert.DeepEqual(t, 0, result.N.N2.C) @@ -1496,6 +1497,7 @@ func Test_ValidatorErrorFactory(t *testing.T) { if err == nil { t.Fatalf("unexpected nil, expected an error") } + assert.DeepEqual(t, "'a' field is a 'required' parameter, but the request does not have this parameter", err.Error()) type TestValidate struct { B int `query:"b" vd:"$>100"` diff --git a/pkg/app/server/binding/internal/decoder/base_type_decoder.go b/pkg/app/server/binding/internal/decoder/base_type_decoder.go index cc53b8f00..bf26c9c5b 100644 --- a/pkg/app/server/binding/internal/decoder/base_type_decoder.go +++ b/pkg/app/server/binding/internal/decoder/base_type_decoder.go @@ -75,7 +75,7 @@ func (d *baseTypeFieldTextDecoder) Decode(req *protocol.Request, params param.Pa if found { err = nil } else { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request body does not have this parameter '%s'", d.fieldName, tagInfo.JSONName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request body does not have this parameter '%s'", tagInfo.Value, tagInfo.JSONName) } if len(tagInfo.Default) != 0 && keyExist(req, tagInfo) { defaultValue = "" diff --git a/pkg/app/server/binding/internal/decoder/map_type_decoder.go b/pkg/app/server/binding/internal/decoder/map_type_decoder.go index 59fed7716..18e15c991 100644 --- a/pkg/app/server/binding/internal/decoder/map_type_decoder.go +++ b/pkg/app/server/binding/internal/decoder/map_type_decoder.go @@ -67,7 +67,7 @@ func (d *mapTypeFieldTextDecoder) Decode(req *protocol.Request, params param.Par if found { err = nil } else { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } if len(tagInfo.Default) != 0 && keyExist(req, tagInfo) { defaultValue = "" @@ -82,7 +82,7 @@ func (d *mapTypeFieldTextDecoder) Decode(req *protocol.Request, params param.Par break } if tagInfo.Required { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } } if err != nil { diff --git a/pkg/app/server/binding/internal/decoder/slice_type_decoder.go b/pkg/app/server/binding/internal/decoder/slice_type_decoder.go index c2887d1c4..7b6c5913c 100644 --- a/pkg/app/server/binding/internal/decoder/slice_type_decoder.go +++ b/pkg/app/server/binding/internal/decoder/slice_type_decoder.go @@ -70,7 +70,7 @@ func (d *sliceTypeFieldTextDecoder) Decode(req *protocol.Request, params param.P if found { err = nil } else { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } if len(tagInfo.Default) != 0 && keyExist(req, tagInfo) { // defaultValue = "" @@ -88,7 +88,7 @@ func (d *sliceTypeFieldTextDecoder) Decode(req *protocol.Request, params param.P break } if tagInfo.Required { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } } if err != nil { diff --git a/pkg/app/server/binding/internal/decoder/struct_type_decoder.go b/pkg/app/server/binding/internal/decoder/struct_type_decoder.go index 75f3ae4aa..c2af2c030 100644 --- a/pkg/app/server/binding/internal/decoder/struct_type_decoder.go +++ b/pkg/app/server/binding/internal/decoder/struct_type_decoder.go @@ -44,7 +44,7 @@ func (d *structTypeFieldTextDecoder) Decode(req *protocol.Request, params param. if found { err = nil } else { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } if len(tagInfo.Default) != 0 && keyExist(req, tagInfo) { defaultValue = "" @@ -59,7 +59,7 @@ func (d *structTypeFieldTextDecoder) Decode(req *protocol.Request, params param. break } if tagInfo.Required { - err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", d.fieldName) + err = fmt.Errorf("'%s' field is a 'required' parameter, but the request does not have this parameter", tagInfo.Value) } } if err != nil { diff --git a/pkg/app/server/binding/tagexpr_bind_test.go b/pkg/app/server/binding/tagexpr_bind_test.go index 1533b5aea..1d331e163 100644 --- a/pkg/app/server/binding/tagexpr_bind_test.go +++ b/pkg/app/server/binding/tagexpr_bind_test.go @@ -121,7 +121,7 @@ func TestGetBody(t *testing.T) { if err == nil { t.Fatalf("expected an error, but get nil") } - assert.DeepEqual(t, err.Error(), "'E' field is a 'required' parameter, but the request body does not have this parameter 'X.e'") + assert.DeepEqual(t, err.Error(), "'e' field is a 'required' parameter, but the request body does not have this parameter 'X.e'") } func TestQueryNum(t *testing.T) { @@ -431,7 +431,7 @@ func TestJSON(t *testing.T) { if err == nil { t.Error("expected an error, but get nil") } - assert.DeepEqual(t, err.Error(), "'Y' field is a 'required' parameter, but the request body does not have this parameter 'y'") + assert.DeepEqual(t, err.Error(), "'y' field is a 'required' parameter, but the request body does not have this parameter 'y'") assert.DeepEqual(t, []string{"a1", "a2"}, (**recv.X).A) assert.DeepEqual(t, int32(21), (**recv.X).B) assert.DeepEqual(t, &[]uint16{31, 32}, (**recv.X).C) @@ -753,7 +753,7 @@ func TestOption(t *testing.T) { req = newRequest("", header, nil, bodyReader) recv = new(Recv) err = DefaultBinder().Bind(req.Req, recv, nil) - assert.DeepEqual(t, err.Error(), "'C' field is a 'required' parameter, but the request body does not have this parameter 'X.c'") + assert.DeepEqual(t, err.Error(), "'c' field is a 'required' parameter, but the request body does not have this parameter 'X.c'") assert.DeepEqual(t, 0, recv.X.C) assert.DeepEqual(t, 0, recv.X.D) assert.DeepEqual(t, "y1", recv.Y)