go test -run Test_Bind_Query -v
(t *testing.T)
| 391 | |
| 392 | // go test -run Test_Bind_Query -v |
| 393 | func Test_Bind_Query(t *testing.T) { |
| 394 | t.Parallel() |
| 395 | app := New(Config{ |
| 396 | EnableSplittingOnParsers: true, |
| 397 | }) |
| 398 | c := app.AcquireCtx(&fasthttp.RequestCtx{}) |
| 399 | |
| 400 | type Query struct { |
| 401 | Name string |
| 402 | Hobby []string |
| 403 | ID int |
| 404 | } |
| 405 | c.Request().SetBody([]byte(``)) |
| 406 | c.Request().Header.SetContentType("") |
| 407 | c.Request().URI().SetQueryString("id=1&name=tom&hobby=basketball&hobby=football") |
| 408 | q := new(Query) |
| 409 | require.NoError(t, c.Bind().Query(q)) |
| 410 | require.Len(t, q.Hobby, 2) |
| 411 | |
| 412 | c.Request().URI().SetQueryString("id=1&name=tom&hobby=basketball,football") |
| 413 | q = new(Query) |
| 414 | require.NoError(t, c.Bind().Query(q)) |
| 415 | require.Len(t, q.Hobby, 2) |
| 416 | |
| 417 | c.Request().URI().SetQueryString("id=1&name=tom&hobby=soccer&hobby=basketball,football") |
| 418 | q = new(Query) |
| 419 | require.NoError(t, c.Bind().Query(q)) |
| 420 | require.Len(t, q.Hobby, 3) |
| 421 | |
| 422 | empty := new(Query) |
| 423 | c.Request().URI().SetQueryString("") |
| 424 | require.NoError(t, c.Bind().Query(empty)) |
| 425 | require.Empty(t, empty.Hobby) |
| 426 | |
| 427 | type Query2 struct { |
| 428 | Name string |
| 429 | Hobby string |
| 430 | Default string `query:"default,default:hello"` |
| 431 | FavouriteDrinks []string |
| 432 | Empty []string |
| 433 | Alloc []string |
| 434 | Defaults []string `query:"defaults,default:hello|world"` |
| 435 | No []int64 |
| 436 | ID int |
| 437 | Bool bool |
| 438 | } |
| 439 | |
| 440 | c.Request().URI().SetQueryString("id=1&name=tom&hobby=basketball,football&favouriteDrinks=milo,coke,pepsi&alloc=&no=1") |
| 441 | q2 := new(Query2) |
| 442 | q2.Bool = true |
| 443 | q2.Name = helloWorld |
| 444 | require.NoError(t, c.Bind().Query(q2)) |
| 445 | require.Equal(t, "basketball,football", q2.Hobby) |
| 446 | require.True(t, q2.Bool) |
| 447 | require.Equal(t, "tom", q2.Name) // check value get overwritten |
| 448 | require.Equal(t, []string{"milo", "coke", "pepsi"}, q2.FavouriteDrinks) |
| 449 | var nilSlice []string |
| 450 | require.Equal(t, nilSlice, q2.Empty) |