@@ -1,136 +0,0 @@
1−package requests
2−
3−import (
4− "context"
5− "io/ioutil"
6− "net/http"
7− "net/http/httptest"
8− "strings"
9− "testing"
10−
11− "github.com/bitly/go-simplejson"
12− "github.com/stretchr/testify/assert"
13− "github.com/stretchr/testify/require"
14−)
15−
16−func testBackend(t *testing.T, responseCode int, payload string) *httptest.Server {
17− return httptest.NewServer(http.HandlerFunc(
18− func(w http.ResponseWriter, r *http.Request) {
19− w.WriteHeader(responseCode)
20− _, err := w.Write([]byte(payload))
21− require.NoError(t, err)
22− }))
23−}
24−
25−func TestRequest(t *testing.T) {
26− backend := testBackend(t, 200, "{\"foo\": \"bar\"}")
27− defer backend.Close()
28−
29− req, _ := http.NewRequest("GET", backend.URL, nil)
30− response, err := Request(req)
31− assert.Equal(t, nil, err)
32− result, err := response.Get("foo").String()
33− assert.Equal(t, nil, err)
34− assert.Equal(t, "bar", result)
35−}
36−
37−func TestRequestFailure(t *testing.T) {
38− // Create a backend to generate a test URL, then close it to cause a
39− // connection error.
40− backend := testBackend(t, 200, "{\"foo\": \"bar\"}")
41− backend.Close()
42−
43− req, err := http.NewRequest("GET", backend.URL, nil)
44− assert.Equal(t, nil, err)
45− resp, err := Request(req)
46− assert.Equal(t, (*simplejson.Json)(nil), resp)
47− assert.NotEqual(t, nil, err)
48− if !strings.Contains(err.Error(), "refused") {
49− t.Error("expected error when a connection fails: ", err)
50− }
51−}
52−
53−func TestHttpErrorCode(t *testing.T) {
54− backend := testBackend(t, 404, "{\"foo\": \"bar\"}")
55− defer backend.Close()
56−
57− req, err := http.NewRequest("GET", backend.URL, nil)
58− assert.Equal(t, nil, err)
59− resp, err := Request(req)
60− assert.Equal(t, (*simplejson.Json)(nil), resp)
61− assert.NotEqual(t, nil, err)
62−}
63−
64−func TestJsonParsingError(t *testing.T) {
65− backend := testBackend(t, 200, "not well-formed JSON")
66− defer backend.Close()
67−
68− req, err := http.NewRequest("GET", backend.URL, nil)
69− assert.Equal(t, nil, err)
70− resp, err := Request(req)
71− assert.Equal(t, (*simplejson.Json)(nil), resp)
72− assert.NotEqual(t, nil, err)
73−}
74−
75−// Parsing a URL practically never fails, so we won't cover that test case.
76−func TestRequestUnparsedResponseUsingAccessTokenParameter(t *testing.T) {
77− backend := httptest.NewServer(http.HandlerFunc(
78− func(w http.ResponseWriter, r *http.Request) {
79− token := r.FormValue("access_token")
80− if r.URL.Path == "/" && token == "my_token" {
81− w.WriteHeader(200)
82− _, err := w.Write([]byte("some payload"))
83− require.NoError(t, err)
84− } else {
85− w.WriteHeader(403)
86− }
87− }))
88− defer backend.Close()
89−
90− response, err := RequestUnparsedResponse(
91− context.Background(), backend.URL+"?access_token=my_token", nil)
92− assert.Equal(t, nil, err)
93− defer response.Body.Close()
94−
95− assert.Equal(t, 200, response.StatusCode)
96− body, err := ioutil.ReadAll(response.Body)
97− assert.Equal(t, nil, err)
98− assert.Equal(t, "some payload", string(body))
99−}
100−
101−func TestRequestUnparsedResponseUsingAccessTokenParameterFailedResponse(t *testing.T) {
102− backend := testBackend(t, 200, "some payload")
103− // Close the backend now to force a request failure.
104− backend.Close()
105−
106− response, err := RequestUnparsedResponse(
107− context.Background(), backend.URL+"?access_token=my_token", nil)
108− assert.NotEqual(t, nil, err)
109− assert.Equal(t, (*http.Response)(nil), response)
110−}
111−
112−func TestRequestUnparsedResponseUsingHeaders(t *testing.T) {
113− backend := httptest.NewServer(http.HandlerFunc(
114− func(w http.ResponseWriter, r *http.Request) {
115− if r.URL.Path == "/" && r.Header["Auth"][0] == "my_token" {
116− w.WriteHeader(200)
117− _, err := w.Write([]byte("some payload"))
118− require.NoError(t, err)
119− } else {
120− w.WriteHeader(403)
121− }
122− }))
123− defer backend.Close()
124−
125− headers := make(http.Header)
126− headers.Set("Auth", "my_token")
127− response, err := RequestUnparsedResponse(context.Background(), backend.URL, headers)
128− assert.Equal(t, nil, err)
129− defer response.Body.Close()
130−
131− assert.Equal(t, 200, response.StatusCode)
132− body, err := ioutil.ReadAll(response.Body)
133− assert.Equal(t, nil, err)
134−
135− assert.Equal(t, "some payload", string(body))
136−}