diff options
Diffstat (limited to 'vendor/github.com/DreamItGetIT/statuscake/client_test.go')
-rw-r--r-- | vendor/github.com/DreamItGetIT/statuscake/client_test.go | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/vendor/github.com/DreamItGetIT/statuscake/client_test.go b/vendor/github.com/DreamItGetIT/statuscake/client_test.go new file mode 100644 index 0000000..7c40c81 --- /dev/null +++ b/vendor/github.com/DreamItGetIT/statuscake/client_test.go | |||
@@ -0,0 +1,236 @@ | |||
1 | package statuscake | ||
2 | |||
3 | import ( | ||
4 | "bytes" | ||
5 | "io" | ||
6 | "io/ioutil" | ||
7 | "log" | ||
8 | "net/http" | ||
9 | "net/url" | ||
10 | "os" | ||
11 | "path/filepath" | ||
12 | "testing" | ||
13 | |||
14 | "github.com/stretchr/testify/assert" | ||
15 | "github.com/stretchr/testify/require" | ||
16 | ) | ||
17 | |||
18 | func TestAuth_validate(t *testing.T) { | ||
19 | assert := assert.New(t) | ||
20 | require := require.New(t) | ||
21 | |||
22 | auth := &Auth{} | ||
23 | err := auth.validate() | ||
24 | |||
25 | require.NotNil(err) | ||
26 | assert.Contains(err.Error(), "Username is required") | ||
27 | assert.Contains(err.Error(), "Apikey is required") | ||
28 | |||
29 | auth.Username = "foo" | ||
30 | err = auth.validate() | ||
31 | |||
32 | require.NotNil(err) | ||
33 | assert.Equal("Apikey is required", err.Error()) | ||
34 | |||
35 | auth.Apikey = "bar" | ||
36 | err = auth.validate() | ||
37 | assert.Nil(err) | ||
38 | } | ||
39 | |||
40 | func TestClient(t *testing.T) { | ||
41 | require := require.New(t) | ||
42 | assert := assert.New(t) | ||
43 | |||
44 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
45 | require.Nil(err) | ||
46 | |||
47 | assert.Equal("random-user", c.username) | ||
48 | assert.Equal("my-pass", c.apiKey) | ||
49 | } | ||
50 | |||
51 | func TestClient_newRequest(t *testing.T) { | ||
52 | assert := assert.New(t) | ||
53 | require := require.New(t) | ||
54 | |||
55 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
56 | require.Nil(err) | ||
57 | |||
58 | r, err := c.newRequest("GET", "/hello", nil, nil) | ||
59 | |||
60 | require.Nil(err) | ||
61 | assert.Equal("GET", r.Method) | ||
62 | assert.Equal("https://app.statuscake.com/API/hello", r.URL.String()) | ||
63 | assert.Equal("random-user", r.Header.Get("Username")) | ||
64 | assert.Equal("my-pass", r.Header.Get("API")) | ||
65 | } | ||
66 | |||
67 | func TestClient_doRequest(t *testing.T) { | ||
68 | assert := assert.New(t) | ||
69 | require := require.New(t) | ||
70 | |||
71 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
72 | require.Nil(err) | ||
73 | |||
74 | hc := &fakeHTTPClient{StatusCode: 200} | ||
75 | c.c = hc | ||
76 | |||
77 | req, err := http.NewRequest("GET", "http://example.com/test", nil) | ||
78 | require.Nil(err) | ||
79 | |||
80 | _, err = c.doRequest(req) | ||
81 | require.Nil(err) | ||
82 | |||
83 | assert.Len(hc.requests, 1) | ||
84 | assert.Equal("http://example.com/test", hc.requests[0].URL.String()) | ||
85 | } | ||
86 | |||
87 | func TestClient_doRequest_WithHTTPErrors(t *testing.T) { | ||
88 | assert := assert.New(t) | ||
89 | require := require.New(t) | ||
90 | |||
91 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
92 | require.Nil(err) | ||
93 | |||
94 | hc := &fakeHTTPClient{ | ||
95 | StatusCode: 500, | ||
96 | } | ||
97 | c.c = hc | ||
98 | |||
99 | req, err := http.NewRequest("GET", "http://example.com/test", nil) | ||
100 | require.Nil(err) | ||
101 | |||
102 | _, err = c.doRequest(req) | ||
103 | require.NotNil(err) | ||
104 | assert.IsType(&httpError{}, err) | ||
105 | } | ||
106 | |||
107 | func TestClient_doRequest_HttpAuthenticationErrors(t *testing.T) { | ||
108 | assert := assert.New(t) | ||
109 | require := require.New(t) | ||
110 | |||
111 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
112 | require.Nil(err) | ||
113 | |||
114 | hc := &fakeHTTPClient{ | ||
115 | StatusCode: 200, | ||
116 | Fixture: "auth_error.json", | ||
117 | } | ||
118 | c.c = hc | ||
119 | |||
120 | req, err := http.NewRequest("GET", "http://example.com/test", nil) | ||
121 | require.Nil(err) | ||
122 | |||
123 | _, err = c.doRequest(req) | ||
124 | require.NotNil(err) | ||
125 | assert.IsType(&AuthenticationError{}, err) | ||
126 | } | ||
127 | |||
128 | func TestClient_get(t *testing.T) { | ||
129 | require := require.New(t) | ||
130 | assert := assert.New(t) | ||
131 | |||
132 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
133 | require.Nil(err) | ||
134 | |||
135 | hc := &fakeHTTPClient{} | ||
136 | c.c = hc | ||
137 | |||
138 | c.get("/hello", nil) | ||
139 | assert.Len(hc.requests, 1) | ||
140 | assert.Equal("GET", hc.requests[0].Method) | ||
141 | assert.Equal("https://app.statuscake.com/API/hello", hc.requests[0].URL.String()) | ||
142 | } | ||
143 | |||
144 | func TestClient_put(t *testing.T) { | ||
145 | require := require.New(t) | ||
146 | assert := assert.New(t) | ||
147 | |||
148 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
149 | require.Nil(err) | ||
150 | |||
151 | hc := &fakeHTTPClient{} | ||
152 | c.c = hc | ||
153 | |||
154 | v := url.Values{"foo": {"bar"}} | ||
155 | c.put("/hello", v) | ||
156 | assert.Len(hc.requests, 1) | ||
157 | assert.Equal("PUT", hc.requests[0].Method) | ||
158 | assert.Equal("https://app.statuscake.com/API/hello", hc.requests[0].URL.String()) | ||
159 | |||
160 | b, err := ioutil.ReadAll(hc.requests[0].Body) | ||
161 | require.Nil(err) | ||
162 | assert.Equal("foo=bar", string(b)) | ||
163 | } | ||
164 | |||
165 | func TestClient_delete(t *testing.T) { | ||
166 | require := require.New(t) | ||
167 | assert := assert.New(t) | ||
168 | |||
169 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
170 | require.Nil(err) | ||
171 | |||
172 | hc := &fakeHTTPClient{} | ||
173 | c.c = hc | ||
174 | |||
175 | v := url.Values{"foo": {"bar"}} | ||
176 | c.delete("/hello", v) | ||
177 | assert.Len(hc.requests, 1) | ||
178 | assert.Equal("DELETE", hc.requests[0].Method) | ||
179 | assert.Equal("https://app.statuscake.com/API/hello?foo=bar", hc.requests[0].URL.String()) | ||
180 | } | ||
181 | |||
182 | func TestClient_Tests(t *testing.T) { | ||
183 | require := require.New(t) | ||
184 | assert := assert.New(t) | ||
185 | |||
186 | c, err := New(Auth{Username: "random-user", Apikey: "my-pass"}) | ||
187 | require.Nil(err) | ||
188 | |||
189 | expected := &tests{ | ||
190 | client: c, | ||
191 | } | ||
192 | |||
193 | assert.Equal(expected, c.Tests()) | ||
194 | } | ||
195 | |||
196 | type fakeBody struct { | ||
197 | io.Reader | ||
198 | } | ||
199 | |||
200 | func (f *fakeBody) Close() error { | ||
201 | return nil | ||
202 | } | ||
203 | |||
204 | type fakeHTTPClient struct { | ||
205 | StatusCode int | ||
206 | Fixture string | ||
207 | requests []*http.Request | ||
208 | } | ||
209 | |||
210 | func (c *fakeHTTPClient) Do(r *http.Request) (*http.Response, error) { | ||
211 | c.requests = append(c.requests, r) | ||
212 | var body []byte | ||
213 | |||
214 | if c.Fixture != "" { | ||
215 | p := filepath.Join("fixtures", c.Fixture) | ||
216 | f, err := os.Open(p) | ||
217 | if err != nil { | ||
218 | log.Fatal(err) | ||
219 | } | ||
220 | defer f.Close() | ||
221 | |||
222 | b, err := ioutil.ReadAll(f) | ||
223 | if err != nil { | ||
224 | log.Fatal(err) | ||
225 | } | ||
226 | |||
227 | body = b | ||
228 | } | ||
229 | |||
230 | resp := &http.Response{ | ||
231 | StatusCode: c.StatusCode, | ||
232 | Body: &fakeBody{Reader: bytes.NewReader(body)}, | ||
233 | } | ||
234 | |||
235 | return resp, nil | ||
236 | } | ||