1
2
3
4
5
6 package github
7
8 import (
9 "bytes"
10 "context"
11 "encoding/json"
12 "fmt"
13 "io/ioutil"
14 "net/http"
15 "testing"
16
17 "github.com/google/go-cmp/cmp"
18 )
19
20 func TestRepositoriesService_EnablePages(t *testing.T) {
21 client, mux, _, teardown := setup()
22 defer teardown()
23
24 input := &Pages{
25 Source: &PagesSource{
26 Branch: String("master"),
27 Path: String("/"),
28 },
29 CNAME: String("www.my-domain.com"),
30 }
31
32 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
33 v := new(createPagesRequest)
34 json.NewDecoder(r.Body).Decode(v)
35
36 testMethod(t, r, "POST")
37 testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
38 want := &createPagesRequest{Source: &PagesSource{Branch: String("master"), Path: String("/")}}
39 if !cmp.Equal(v, want) {
40 t.Errorf("Request body = %+v, want %+v", v, want)
41 }
42
43 fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h", "source": {"branch":"master", "path":"/"}}`)
44 })
45
46 ctx := context.Background()
47 page, _, err := client.Repositories.EnablePages(ctx, "o", "r", input)
48 if err != nil {
49 t.Errorf("Repositories.EnablePages returned error: %v", err)
50 }
51
52 want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h"), Source: &PagesSource{Branch: String("master"), Path: String("/")}}
53
54 if !cmp.Equal(page, want) {
55 t.Errorf("Repositories.EnablePages returned %v, want %v", page, want)
56 }
57
58 const methodName = "EnablePages"
59 testBadOptions(t, methodName, func() (err error) {
60 _, _, err = client.Repositories.EnablePages(ctx, "\n", "\n", input)
61 return err
62 })
63
64 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
65 got, resp, err := client.Repositories.EnablePages(ctx, "o", "r", input)
66 if got != nil {
67 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
68 }
69 return resp, err
70 })
71 }
72
73 func TestRepositoriesService_UpdatePages(t *testing.T) {
74 client, mux, _, teardown := setup()
75 defer teardown()
76
77 input := &PagesUpdate{
78 CNAME: String("www.my-domain.com"),
79 Source: String("gh-pages"),
80 }
81
82 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
83 v := new(PagesUpdate)
84 json.NewDecoder(r.Body).Decode(v)
85
86 testMethod(t, r, "PUT")
87 want := &PagesUpdate{CNAME: String("www.my-domain.com"), Source: String("gh-pages")}
88 if !cmp.Equal(v, want) {
89 t.Errorf("Request body = %+v, want %+v", v, want)
90 }
91
92 fmt.Fprint(w, `{"cname":"www.my-domain.com","source":"gh-pages"}`)
93 })
94
95 ctx := context.Background()
96 _, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
97 if err != nil {
98 t.Errorf("Repositories.UpdatePages returned error: %v", err)
99 }
100
101 const methodName = "UpdatePages"
102 testBadOptions(t, methodName, func() (err error) {
103 _, err = client.Repositories.UpdatePages(ctx, "\n", "\n", input)
104 return err
105 })
106
107 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
108 return client.Repositories.UpdatePages(ctx, "o", "r", input)
109 })
110 }
111
112 func TestRepositoriesService_UpdatePages_NullCNAME(t *testing.T) {
113 client, mux, _, teardown := setup()
114 defer teardown()
115
116 input := &PagesUpdate{
117 Source: String("gh-pages"),
118 }
119
120 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
121 got, err := ioutil.ReadAll(r.Body)
122 if err != nil {
123 t.Fatalf("unable to read body: %v", err)
124 }
125
126 want := []byte(`{"cname":null,"source":"gh-pages"}` + "\n")
127 if !bytes.Equal(got, want) {
128 t.Errorf("Request body = %+v, want %+v", got, want)
129 }
130
131 fmt.Fprint(w, `{"cname":null,"source":"gh-pages"}`)
132 })
133
134 ctx := context.Background()
135 _, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
136 if err != nil {
137 t.Errorf("Repositories.UpdatePages returned error: %v", err)
138 }
139 }
140
141 func TestRepositoriesService_DisablePages(t *testing.T) {
142 client, mux, _, teardown := setup()
143 defer teardown()
144
145 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
146 testMethod(t, r, "DELETE")
147 testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
148 })
149
150 ctx := context.Background()
151 _, err := client.Repositories.DisablePages(ctx, "o", "r")
152 if err != nil {
153 t.Errorf("Repositories.DisablePages returned error: %v", err)
154 }
155
156 const methodName = "DisablePages"
157 testBadOptions(t, methodName, func() (err error) {
158 _, err = client.Repositories.DisablePages(ctx, "\n", "\n")
159 return err
160 })
161
162 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
163 return client.Repositories.DisablePages(ctx, "o", "r")
164 })
165 }
166
167 func TestRepositoriesService_GetPagesInfo(t *testing.T) {
168 client, mux, _, teardown := setup()
169 defer teardown()
170
171 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
172 testMethod(t, r, "GET")
173 fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h","public":true, "https_certificate": {"state":"approved","description": "Certificate is approved","domains": ["developer.github.com"],"expires_at": "2021-05-22"},"https_enforced": true}`)
174 })
175
176 ctx := context.Background()
177 page, _, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
178 if err != nil {
179 t.Errorf("Repositories.GetPagesInfo returned error: %v", err)
180 }
181
182 want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h"), Public: Bool(true), HTTPSCertificate: &PagesHTTPSCertificate{State: String("approved"), Description: String("Certificate is approved"), Domains: []string{"developer.github.com"}, ExpiresAt: String("2021-05-22")}, HTTPSEnforced: Bool(true)}
183 if !cmp.Equal(page, want) {
184 t.Errorf("Repositories.GetPagesInfo returned %+v, want %+v", page, want)
185 }
186
187 const methodName = "GetPagesInfo"
188 testBadOptions(t, methodName, func() (err error) {
189 _, _, err = client.Repositories.GetPagesInfo(ctx, "\n", "\n")
190 return err
191 })
192
193 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
194 got, resp, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
195 if got != nil {
196 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
197 }
198 return resp, err
199 })
200 }
201
202 func TestRepositoriesService_ListPagesBuilds(t *testing.T) {
203 client, mux, _, teardown := setup()
204 defer teardown()
205
206 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
207 testMethod(t, r, "GET")
208 fmt.Fprint(w, `[{"url":"u","status":"s","commit":"c"}]`)
209 })
210
211 ctx := context.Background()
212 pages, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
213 if err != nil {
214 t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
215 }
216
217 want := []*PagesBuild{{URL: String("u"), Status: String("s"), Commit: String("c")}}
218 if !cmp.Equal(pages, want) {
219 t.Errorf("Repositories.ListPagesBuilds returned %+v, want %+v", pages, want)
220 }
221
222 const methodName = "ListPagesBuilds"
223 testBadOptions(t, methodName, func() (err error) {
224 _, _, err = client.Repositories.ListPagesBuilds(ctx, "\n", "\n", nil)
225 return err
226 })
227
228 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
229 got, resp, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
230 if got != nil {
231 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
232 }
233 return resp, err
234 })
235 }
236
237 func TestRepositoriesService_ListPagesBuilds_withOptions(t *testing.T) {
238 client, mux, _, teardown := setup()
239 defer teardown()
240
241 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
242 testMethod(t, r, "GET")
243 testFormValues(t, r, values{
244 "page": "2",
245 })
246 fmt.Fprint(w, `[]`)
247 })
248
249 ctx := context.Background()
250 _, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", &ListOptions{Page: 2})
251 if err != nil {
252 t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
253 }
254 }
255
256 func TestRepositoriesService_GetLatestPagesBuild(t *testing.T) {
257 client, mux, _, teardown := setup()
258 defer teardown()
259
260 mux.HandleFunc("/repos/o/r/pages/builds/latest", func(w http.ResponseWriter, r *http.Request) {
261 testMethod(t, r, "GET")
262 fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
263 })
264
265 ctx := context.Background()
266 build, _, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
267 if err != nil {
268 t.Errorf("Repositories.GetLatestPagesBuild returned error: %v", err)
269 }
270
271 want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")}
272 if !cmp.Equal(build, want) {
273 t.Errorf("Repositories.GetLatestPagesBuild returned %+v, want %+v", build, want)
274 }
275
276 const methodName = "GetLatestPagesBuild"
277 testBadOptions(t, methodName, func() (err error) {
278 _, _, err = client.Repositories.GetLatestPagesBuild(ctx, "\n", "\n")
279 return err
280 })
281
282 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
283 got, resp, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
284 if got != nil {
285 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
286 }
287 return resp, err
288 })
289 }
290
291 func TestRepositoriesService_GetPageBuild(t *testing.T) {
292 client, mux, _, teardown := setup()
293 defer teardown()
294
295 mux.HandleFunc("/repos/o/r/pages/builds/1", func(w http.ResponseWriter, r *http.Request) {
296 testMethod(t, r, "GET")
297 fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
298 })
299
300 ctx := context.Background()
301 build, _, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
302 if err != nil {
303 t.Errorf("Repositories.GetPageBuild returned error: %v", err)
304 }
305
306 want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")}
307 if !cmp.Equal(build, want) {
308 t.Errorf("Repositories.GetPageBuild returned %+v, want %+v", build, want)
309 }
310
311 const methodName = "GetPageBuild"
312 testBadOptions(t, methodName, func() (err error) {
313 _, _, err = client.Repositories.GetPageBuild(ctx, "\n", "\n", -1)
314 return err
315 })
316
317 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
318 got, resp, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
319 if got != nil {
320 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
321 }
322 return resp, err
323 })
324 }
325
326 func TestRepositoriesService_RequestPageBuild(t *testing.T) {
327 client, mux, _, teardown := setup()
328 defer teardown()
329
330 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
331 testMethod(t, r, "POST")
332 fmt.Fprint(w, `{"url":"u","status":"s"}`)
333 })
334
335 ctx := context.Background()
336 build, _, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
337 if err != nil {
338 t.Errorf("Repositories.RequestPageBuild returned error: %v", err)
339 }
340
341 want := &PagesBuild{URL: String("u"), Status: String("s")}
342 if !cmp.Equal(build, want) {
343 t.Errorf("Repositories.RequestPageBuild returned %+v, want %+v", build, want)
344 }
345
346 const methodName = "RequestPageBuild"
347 testBadOptions(t, methodName, func() (err error) {
348 _, _, err = client.Repositories.RequestPageBuild(ctx, "\n", "\n")
349 return err
350 })
351
352 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
353 got, resp, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
354 if got != nil {
355 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
356 }
357 return resp, err
358 })
359 }
360
361 func TestPagesSource_Marshal(t *testing.T) {
362 testJSONMarshal(t, &PagesSource{}, "{}")
363
364 u := &PagesSource{
365 Branch: String("branch"),
366 Path: String("path"),
367 }
368
369 want := `{
370 "branch": "branch",
371 "path": "path"
372 }`
373
374 testJSONMarshal(t, u, want)
375 }
376
377 func TestPagesError_Marshal(t *testing.T) {
378 testJSONMarshal(t, &PagesError{}, "{}")
379
380 u := &PagesError{
381 Message: String("message"),
382 }
383
384 want := `{
385 "message": "message"
386 }`
387
388 testJSONMarshal(t, u, want)
389 }
390
391 func TestPagesUpdate_Marshal(t *testing.T) {
392 testJSONMarshal(t, &PagesUpdate{}, "{}")
393
394 u := &PagesUpdate{
395 CNAME: String("cname"),
396 Source: String("src"),
397 }
398
399 want := `{
400 "cname": "cname",
401 "source": "src"
402 }`
403
404 testJSONMarshal(t, u, want)
405 }
406
407 func TestPages_Marshal(t *testing.T) {
408 testJSONMarshal(t, &Pages{}, "{}")
409
410 u := &Pages{
411 URL: String("url"),
412 Status: String("status"),
413 CNAME: String("cname"),
414 Custom404: Bool(false),
415 HTMLURL: String("hurl"),
416 Source: &PagesSource{
417 Branch: String("branch"),
418 Path: String("path"),
419 },
420 }
421
422 want := `{
423 "url": "url",
424 "status": "status",
425 "cname": "cname",
426 "custom_404": false,
427 "html_url": "hurl",
428 "source": {
429 "branch": "branch",
430 "path": "path"
431 }
432 }`
433
434 testJSONMarshal(t, u, want)
435 }
436
437 func TestPagesBuild_Marshal(t *testing.T) {
438 testJSONMarshal(t, &PagesBuild{}, "{}")
439
440 u := &PagesBuild{
441 URL: String("url"),
442 Status: String("status"),
443 Error: &PagesError{
444 Message: String("message"),
445 },
446 Pusher: &User{ID: Int64(1)},
447 Commit: String("commit"),
448 Duration: Int(1),
449 CreatedAt: &Timestamp{referenceTime},
450 UpdatedAt: &Timestamp{referenceTime},
451 }
452
453 want := `{
454 "url": "url",
455 "status": "status",
456 "error": {
457 "message": "message"
458 },
459 "pusher": {
460 "id": 1
461 },
462 "commit": "commit",
463 "duration": 1,
464 "created_at": ` + referenceTimeStr + `,
465 "updated_at": ` + referenceTimeStr + `
466 }`
467
468 testJSONMarshal(t, u, want)
469 }
470
471 func TestCreatePagesRequest_Marshal(t *testing.T) {
472 testJSONMarshal(t, &createPagesRequest{}, "{}")
473
474 u := &createPagesRequest{
475 Source: &PagesSource{
476 Branch: String("branch"),
477 Path: String("path"),
478 },
479 }
480
481 want := `{
482 "source": {
483 "branch": "branch",
484 "path": "path"
485 }
486 }`
487
488 testJSONMarshal(t, u, want)
489 }
490
View as plain text