github.com/google/go-github/v49@v49.1.0/github/repos_pages_test.go (about) 1 // Copyright 2014 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "bytes" 10 "context" 11 "encoding/json" 12 "fmt" 13 "io" 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"), // not passed along. 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: &PagesSource{Branch: 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: &PagesSource{Branch: 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":{"branch":"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: &PagesSource{Branch: String("gh-pages")}, 118 } 119 120 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 121 got, err := io.ReadAll(r.Body) 122 if err != nil { 123 t.Fatalf("unable to read body: %v", err) 124 } 125 126 want := []byte(`{"cname":null,"source":{"branch":"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":{"branch":"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: &PagesSource{Path: String("src")}, 397 } 398 399 want := `{ 400 "cname": "cname", 401 "source": { "path": "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 }