api_client_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package services
  2. import (
  3. "bytes"
  4. "io"
  5. "io/ioutil"
  6. "net/http"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestHandleResponse(t *testing.T) {
  11. t.Run("Returns body if status == 200", func(t *testing.T) {
  12. body, err := handleResponse(makeResponse(200, "test"))
  13. assert.Nil(t, err)
  14. assert.Equal(t, "test", string(body))
  15. })
  16. t.Run("Returns ErrorNotFound if status == 404", func(t *testing.T) {
  17. _, err := handleResponse(makeResponse(404, ""))
  18. assert.Equal(t, ErrNotFoundError, err)
  19. })
  20. t.Run("Returns message from body if status == 400", func(t *testing.T) {
  21. _, err := handleResponse(makeResponse(400, "{ \"message\": \"error_message\" }"))
  22. assert.NotNil(t, err)
  23. assert.Equal(t, "error_message", asBadRequestError(t, err).Message)
  24. })
  25. t.Run("Returns body if status == 400 and no message key", func(t *testing.T) {
  26. _, err := handleResponse(makeResponse(400, "{ \"test\": \"test_message\"}"))
  27. assert.NotNil(t, err)
  28. assert.Equal(t, "{ \"test\": \"test_message\"}", asBadRequestError(t, err).Message)
  29. })
  30. t.Run("Returns Bad request error if status == 400 and no body", func(t *testing.T) {
  31. _, err := handleResponse(makeResponse(400, ""))
  32. assert.NotNil(t, err)
  33. _ = asBadRequestError(t, err)
  34. })
  35. t.Run("Returns error with invalid status if status == 500", func(t *testing.T) {
  36. _, err := handleResponse(makeResponse(500, ""))
  37. assert.NotNil(t, err)
  38. assert.Contains(t, err.Error(), "invalid status")
  39. })
  40. }
  41. func makeResponse(status int, body string) *http.Response {
  42. return &http.Response{
  43. StatusCode: status,
  44. Body: makeBody(body),
  45. }
  46. }
  47. func makeBody(body string) io.ReadCloser {
  48. return ioutil.NopCloser(bytes.NewReader([]byte(body)))
  49. }
  50. func asBadRequestError(t *testing.T, err error) *BadRequestError {
  51. if badRequestError, ok := err.(*BadRequestError); ok {
  52. return badRequestError
  53. }
  54. assert.FailNow(t, "Error was not of type BadRequestError")
  55. return nil
  56. }