MCPcopy
hub / github.com/gofiber/fiber / Test_BindError_FieldExtraction

Function Test_BindError_FieldExtraction

bind_test.go:127–270  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

125}
126
127func Test_BindError_FieldExtraction(t *testing.T) {
128 t.Parallel()
129
130 t.Run("QueryConversionError", func(t *testing.T) {
131 t.Parallel()
132 type Q struct {
133 ID int `query:"id"`
134 }
135 app := New()
136 c := app.AcquireCtx(&fasthttp.RequestCtx{})
137 t.Cleanup(func() { app.ReleaseCtx(c) })
138 c.Request().URI().SetQueryString("id=notanint")
139 err := c.Bind().Query(new(Q))
140 require.Error(t, err)
141 var be *BindError
142 require.ErrorAs(t, err, &be)
143 require.Equal(t, BindSourceQuery, be.Source)
144 require.Equal(t, "id", be.Field)
145 require.ErrorAs(t, err, &MultiError{})
146 })
147
148 t.Run("ConversionError", func(t *testing.T) {
149 t.Parallel()
150 convErrBinder := &customBinderReturningError{
151 err: schema.ConversionError{Key: "count"},
152 mimeType: "application/x-conversion-error-test",
153 }
154 app := New()
155 app.RegisterCustomBinder(convErrBinder)
156 c := app.AcquireCtx(&fasthttp.RequestCtx{})
157 t.Cleanup(func() { app.ReleaseCtx(c) })
158 c.Request().SetBody([]byte("{}"))
159 c.Request().Header.SetContentType("application/x-conversion-error-test")
160 type D struct{ Name string }
161 err := c.Bind().Body(new(D))
162 require.Error(t, err)
163 var be *BindError
164 require.ErrorAs(t, err, &be)
165 require.Equal(t, BindSourceBody, be.Source)
166 require.Equal(t, "count", be.Field)
167 })
168
169 t.Run("JSONUnmarshalTypeError", func(t *testing.T) {
170 t.Parallel()
171 type J struct {
172 Count int `json:"count"`
173 }
174 app := New()
175 c := app.AcquireCtx(&fasthttp.RequestCtx{})
176 t.Cleanup(func() { app.ReleaseCtx(c) })
177 c.Request().SetBody([]byte(`{"count":"notanint"}`))
178 c.Request().Header.SetContentType(MIMEApplicationJSON)
179 err := c.Bind().Body(new(J))
180 require.Error(t, err)
181 var be *BindError
182 require.ErrorAs(t, err, &be)
183 require.Equal(t, BindSourceBody, be.Source)
184 require.Equal(t, "count", be.Field)

Callers

nothing calls this directly

Calls 12

AcquireCtxMethod · 0.80
ReleaseCtxMethod · 0.80
URIMethod · 0.80
RegisterCustomBinderMethod · 0.80
ContainsMethod · 0.80
NewFunction · 0.70
RequestMethod · 0.65
QueryMethod · 0.65
BindMethod · 0.65
ErrorMethod · 0.65
BodyMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected