responses_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package httpc
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/zeromicro/go-zero/rest/internal/header"
  8. )
  9. func TestParse(t *testing.T) {
  10. var val struct {
  11. Foo string `header:"foo"`
  12. Name string `json:"name"`
  13. Value int `json:"value"`
  14. }
  15. svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  16. w.Header().Set("foo", "bar")
  17. w.Header().Set(header.ContentType, header.JsonContentType)
  18. w.Write([]byte(`{"name":"kevin","value":100}`))
  19. }))
  20. defer svr.Close()
  21. req, err := http.NewRequest(http.MethodGet, svr.URL, nil)
  22. assert.Nil(t, err)
  23. resp, err := DoRequest(req)
  24. assert.Nil(t, err)
  25. assert.Nil(t, Parse(resp, &val))
  26. assert.Equal(t, "bar", val.Foo)
  27. assert.Equal(t, "kevin", val.Name)
  28. assert.Equal(t, 100, val.Value)
  29. }
  30. func TestParseHeaderError(t *testing.T) {
  31. var val struct {
  32. Foo int `header:"foo"`
  33. }
  34. svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  35. w.Header().Set("foo", "bar")
  36. w.Header().Set(header.ContentType, header.JsonContentType)
  37. }))
  38. defer svr.Close()
  39. req, err := http.NewRequest(http.MethodGet, svr.URL, nil)
  40. assert.Nil(t, err)
  41. resp, err := DoRequest(req)
  42. assert.Nil(t, err)
  43. assert.NotNil(t, Parse(resp, &val))
  44. }
  45. func TestParseNoBody(t *testing.T) {
  46. var val struct {
  47. Foo string `header:"foo"`
  48. }
  49. svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  50. w.Header().Set("foo", "bar")
  51. w.Header().Set(header.ContentType, header.JsonContentType)
  52. }))
  53. defer svr.Close()
  54. req, err := http.NewRequest(http.MethodGet, svr.URL, nil)
  55. assert.Nil(t, err)
  56. resp, err := DoRequest(req)
  57. assert.Nil(t, err)
  58. assert.Nil(t, Parse(resp, &val))
  59. assert.Equal(t, "bar", val.Foo)
  60. }