package util import ( "bytes" "io" "net/http" "testing" "github.com/stretchr/testify/assert" ) func TestResponse_DecodeJSON(t *testing.T) { type temp struct { Name string `json:"name"` } json := `{"name":"Test Name","a":"a"}` reader := io.NopCloser(bytes.NewReader([]byte(json))) resp, err := NewResponse(&http.Response{ StatusCode: 200, Body: reader, }) assert.NoError(t, err) assert.Equal(t, json, resp.String()) var result temp assert.NoError(t, resp.DecodeJSON(&result)) assert.Equal(t, "Test Name", result.Name) } func TestResponse_IsError(t *testing.T) { resp := &Response{Response: &http.Response{}} cases := map[int]bool{ 100: false, 200: false, 300: false, 400: true, 500: true, } for code, isErr := range cases { resp.StatusCode = code assert.Equal(t, isErr, resp.IsError()) } } func TestResponse_IsJSON(t *testing.T) { cases := map[string]bool{ "text/json": true, "application/json": true, "application/json; charset=utf-8": true, "text/html": false, } for k, v := range cases { resp := &Response{Response: &http.Response{}} resp.Header = http.Header{} resp.Header.Set("content-type", k) assert.Equal(t, v, resp.IsJSON()) } } func TestResponse_IsHTML(t *testing.T) { cases := map[string]bool{ "text/json": false, "application/json": false, "application/json; charset=utf-8": false, "text/html": true, } for k, v := range cases { resp := &Response{Response: &http.Response{}} resp.Header = http.Header{} resp.Header.Set("content-type", k) assert.Equal(t, v, resp.IsHTML()) } }