@@ -0,0 +1,68 @@
1+package api
2+
3+import (
4+ "github.com/bitly/go-simplejson"
5+ "github.com/bmizerany/assert"
6+ "net/http"
7+ "net/http/httptest"
8+ "strings"
9+ "testing"
10+)
11+
12+func testBackend(response_code int, payload string) *httptest.Server {
13+ return httptest.NewServer(http.HandlerFunc(
14+ func(w http.ResponseWriter, r *http.Request) {
15+ w.WriteHeader(response_code)
16+ w.Write([]byte(payload))
17+ }))
18+}
19+
20+func TestRequest(t *testing.T) {
21+ backend := testBackend(200, "{\"foo\": \"bar\"}")
22+ defer backend.Close()
23+
24+ req, _ := http.NewRequest("GET", backend.URL, nil)
25+ response, err := Request(req)
26+ assert.Equal(t, nil, err)
27+ result, err := response.Get("foo").String()
28+ assert.Equal(t, nil, err)
29+ assert.Equal(t, "bar", result)
30+}
31+
32+func TestRequestFailure(t *testing.T) {
33+ // Create a backend to generate a test URL, then close it to cause a
34+ // connection error.
35+ backend := testBackend(200, "{\"foo\": \"bar\"}")
36+ backend.Close()
37+
38+ req, err := http.NewRequest("GET", backend.URL, nil)
39+ assert.Equal(t, nil, err)
40+ resp, err := Request(req)
41+ assert.Equal(t, (*simplejson.Json)(nil), resp)
42+ assert.NotEqual(t, nil, err)
43+ if !strings.HasSuffix(err.Error(), "connection refused") {
44+ t.Error("expected error when a connection fails")
45+ }
46+}
47+
48+func TestHttpErrorCode(t *testing.T) {
49+ backend := testBackend(404, "{\"foo\": \"bar\"}")
50+ defer backend.Close()
51+
52+ req, err := http.NewRequest("GET", backend.URL, nil)
53+ assert.Equal(t, nil, err)
54+ resp, err := Request(req)
55+ assert.Equal(t, (*simplejson.Json)(nil), resp)
56+ assert.NotEqual(t, nil, err)
57+}
58+
59+func TestJsonParsingError(t *testing.T) {
60+ backend := testBackend(200, "not well-formed JSON")
61+ defer backend.Close()
62+
63+ req, err := http.NewRequest("GET", backend.URL, nil)
64+ assert.Equal(t, nil, err)
65+ resp, err := Request(req)
66+ assert.Equal(t, (*simplejson.Json)(nil), resp)
67+ assert.NotEqual(t, nil, err)
68+}