github.com/google/go-github/v74@v74.0.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_EnablePagesLegacy(t *testing.T) {
    21  	t.Parallel()
    22  	client, mux, _ := setup(t)
    23  
    24  	input := &Pages{
    25  		BuildType: Ptr("legacy"),
    26  		Source: &PagesSource{
    27  			Branch: Ptr("master"),
    28  			Path:   Ptr("/"),
    29  		},
    30  		CNAME: Ptr("www.my-domain.com"), // not passed along.
    31  	}
    32  
    33  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
    34  		v := new(createPagesRequest)
    35  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
    36  
    37  		testMethod(t, r, "POST")
    38  		testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
    39  		want := &createPagesRequest{BuildType: Ptr("legacy"), Source: &PagesSource{Branch: Ptr("master"), Path: Ptr("/")}}
    40  		if !cmp.Equal(v, want) {
    41  			t.Errorf("Request body = %+v, want %+v", v, want)
    42  		}
    43  
    44  		fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h","build_type": "legacy","source": {"branch":"master", "path":"/"}}`)
    45  	})
    46  
    47  	ctx := context.Background()
    48  	page, _, err := client.Repositories.EnablePages(ctx, "o", "r", input)
    49  	if err != nil {
    50  		t.Errorf("Repositories.EnablePages returned error: %v", err)
    51  	}
    52  
    53  	want := &Pages{URL: Ptr("u"), Status: Ptr("s"), CNAME: Ptr("c"), Custom404: Ptr(false), HTMLURL: Ptr("h"), BuildType: Ptr("legacy"), Source: &PagesSource{Branch: Ptr("master"), Path: Ptr("/")}}
    54  
    55  	if !cmp.Equal(page, want) {
    56  		t.Errorf("Repositories.EnablePages returned %v, want %v", page, want)
    57  	}
    58  
    59  	const methodName = "EnablePages"
    60  	testBadOptions(t, methodName, func() (err error) {
    61  		_, _, err = client.Repositories.EnablePages(ctx, "\n", "\n", input)
    62  		return err
    63  	})
    64  
    65  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    66  		got, resp, err := client.Repositories.EnablePages(ctx, "o", "r", input)
    67  		if got != nil {
    68  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    69  		}
    70  		return resp, err
    71  	})
    72  }
    73  
    74  func TestRepositoriesService_EnablePagesWorkflow(t *testing.T) {
    75  	t.Parallel()
    76  	client, mux, _ := setup(t)
    77  
    78  	input := &Pages{
    79  		BuildType: Ptr("workflow"),
    80  		CNAME:     Ptr("www.my-domain.com"), // not passed along.
    81  	}
    82  
    83  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
    84  		v := new(createPagesRequest)
    85  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
    86  
    87  		testMethod(t, r, "POST")
    88  		testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
    89  		want := &createPagesRequest{BuildType: Ptr("workflow")}
    90  		if !cmp.Equal(v, want) {
    91  			t.Errorf("Request body = %+v, want %+v", v, want)
    92  		}
    93  
    94  		fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h","build_type": "workflow"}`)
    95  	})
    96  
    97  	ctx := context.Background()
    98  	page, _, err := client.Repositories.EnablePages(ctx, "o", "r", input)
    99  	if err != nil {
   100  		t.Errorf("Repositories.EnablePages returned error: %v", err)
   101  	}
   102  
   103  	want := &Pages{URL: Ptr("u"), Status: Ptr("s"), CNAME: Ptr("c"), Custom404: Ptr(false), HTMLURL: Ptr("h"), BuildType: Ptr("workflow")}
   104  
   105  	if !cmp.Equal(page, want) {
   106  		t.Errorf("Repositories.EnablePages returned %v, want %v", page, want)
   107  	}
   108  
   109  	const methodName = "EnablePages"
   110  	testBadOptions(t, methodName, func() (err error) {
   111  		_, _, err = client.Repositories.EnablePages(ctx, "\n", "\n", input)
   112  		return err
   113  	})
   114  
   115  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   116  		got, resp, err := client.Repositories.EnablePages(ctx, "o", "r", input)
   117  		if got != nil {
   118  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   119  		}
   120  		return resp, err
   121  	})
   122  }
   123  
   124  func TestRepositoriesService_UpdatePagesLegacy(t *testing.T) {
   125  	t.Parallel()
   126  	client, mux, _ := setup(t)
   127  
   128  	input := &PagesUpdate{
   129  		CNAME:     Ptr("www.my-domain.com"),
   130  		BuildType: Ptr("legacy"),
   131  		Source:    &PagesSource{Branch: Ptr("gh-pages")},
   132  	}
   133  
   134  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   135  		v := new(PagesUpdate)
   136  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   137  
   138  		testMethod(t, r, "PUT")
   139  		want := &PagesUpdate{CNAME: Ptr("www.my-domain.com"), BuildType: Ptr("legacy"), Source: &PagesSource{Branch: Ptr("gh-pages")}}
   140  		if !cmp.Equal(v, want) {
   141  			t.Errorf("Request body = %+v, want %+v", v, want)
   142  		}
   143  
   144  		fmt.Fprint(w, `{"cname":"www.my-domain.com","build_type":"legacy","source":{"branch":"gh-pages"}}`)
   145  	})
   146  
   147  	ctx := context.Background()
   148  	_, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
   149  	if err != nil {
   150  		t.Errorf("Repositories.UpdatePages returned error: %v", err)
   151  	}
   152  
   153  	const methodName = "UpdatePages"
   154  	testBadOptions(t, methodName, func() (err error) {
   155  		_, err = client.Repositories.UpdatePages(ctx, "\n", "\n", input)
   156  		return err
   157  	})
   158  
   159  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   160  		return client.Repositories.UpdatePages(ctx, "o", "r", input)
   161  	})
   162  }
   163  
   164  func TestRepositoriesService_UpdatePagesWorkflow(t *testing.T) {
   165  	t.Parallel()
   166  	client, mux, _ := setup(t)
   167  
   168  	input := &PagesUpdate{
   169  		CNAME:     Ptr("www.my-domain.com"),
   170  		BuildType: Ptr("workflow"),
   171  	}
   172  
   173  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   174  		v := new(PagesUpdate)
   175  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   176  
   177  		testMethod(t, r, "PUT")
   178  		want := &PagesUpdate{CNAME: Ptr("www.my-domain.com"), BuildType: Ptr("workflow")}
   179  		if !cmp.Equal(v, want) {
   180  			t.Errorf("Request body = %+v, want %+v", v, want)
   181  		}
   182  
   183  		fmt.Fprint(w, `{"cname":"www.my-domain.com","build_type":"workflow"}`)
   184  	})
   185  
   186  	ctx := context.Background()
   187  	_, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
   188  	if err != nil {
   189  		t.Errorf("Repositories.UpdatePages returned error: %v", err)
   190  	}
   191  
   192  	const methodName = "UpdatePages"
   193  	testBadOptions(t, methodName, func() (err error) {
   194  		_, err = client.Repositories.UpdatePages(ctx, "\n", "\n", input)
   195  		return err
   196  	})
   197  
   198  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   199  		return client.Repositories.UpdatePages(ctx, "o", "r", input)
   200  	})
   201  }
   202  
   203  func TestRepositoriesService_UpdatePagesGHES(t *testing.T) {
   204  	t.Parallel()
   205  	client, mux, _ := setup(t)
   206  
   207  	input := &PagesUpdateWithoutCNAME{
   208  		BuildType: Ptr("workflow"),
   209  	}
   210  
   211  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   212  		v := new(PagesUpdate)
   213  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
   214  
   215  		testMethod(t, r, "PUT")
   216  		want := &PagesUpdate{BuildType: Ptr("workflow")}
   217  		if !cmp.Equal(v, want) {
   218  			t.Errorf("Request body = %+v, want %+v", v, want)
   219  		}
   220  
   221  		fmt.Fprint(w, `{"build_type":"workflow"}`)
   222  	})
   223  
   224  	ctx := context.Background()
   225  	_, err := client.Repositories.UpdatePagesGHES(ctx, "o", "r", input)
   226  	if err != nil {
   227  		t.Errorf("Repositories.UpdatePagesGHES returned error: %v", err)
   228  	}
   229  
   230  	const methodName = "UpdatePagesGHES"
   231  	testBadOptions(t, methodName, func() (err error) {
   232  		_, err = client.Repositories.UpdatePagesGHES(ctx, "\n", "\n", input)
   233  		return err
   234  	})
   235  
   236  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   237  		return client.Repositories.UpdatePagesGHES(ctx, "o", "r", input)
   238  	})
   239  }
   240  
   241  func TestRepositoriesService_UpdatePages_NullCNAME(t *testing.T) {
   242  	t.Parallel()
   243  	client, mux, _ := setup(t)
   244  
   245  	input := &PagesUpdate{
   246  		Source: &PagesSource{Branch: Ptr("gh-pages")},
   247  	}
   248  
   249  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   250  		got, err := io.ReadAll(r.Body)
   251  		if err != nil {
   252  			t.Fatalf("unable to read body: %v", err)
   253  		}
   254  
   255  		want := []byte(`{"cname":null,"source":{"branch":"gh-pages"}}` + "\n")
   256  		if !bytes.Equal(got, want) {
   257  			t.Errorf("Request body = %+v, want %+v", got, want)
   258  		}
   259  
   260  		fmt.Fprint(w, `{"cname":null,"source":{"branch":"gh-pages"}}`)
   261  	})
   262  
   263  	ctx := context.Background()
   264  	_, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
   265  	if err != nil {
   266  		t.Errorf("Repositories.UpdatePages returned error: %v", err)
   267  	}
   268  }
   269  
   270  func TestRepositoriesService_DisablePages(t *testing.T) {
   271  	t.Parallel()
   272  	client, mux, _ := setup(t)
   273  
   274  	mux.HandleFunc("/repos/o/r/pages", func(_ http.ResponseWriter, r *http.Request) {
   275  		testMethod(t, r, "DELETE")
   276  		testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
   277  	})
   278  
   279  	ctx := context.Background()
   280  	_, err := client.Repositories.DisablePages(ctx, "o", "r")
   281  	if err != nil {
   282  		t.Errorf("Repositories.DisablePages returned error: %v", err)
   283  	}
   284  
   285  	const methodName = "DisablePages"
   286  	testBadOptions(t, methodName, func() (err error) {
   287  		_, err = client.Repositories.DisablePages(ctx, "\n", "\n")
   288  		return err
   289  	})
   290  
   291  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   292  		return client.Repositories.DisablePages(ctx, "o", "r")
   293  	})
   294  }
   295  
   296  func TestRepositoriesService_GetPagesInfo(t *testing.T) {
   297  	t.Parallel()
   298  	client, mux, _ := setup(t)
   299  
   300  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   301  		testMethod(t, r, "GET")
   302  		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}`)
   303  	})
   304  
   305  	ctx := context.Background()
   306  	page, _, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
   307  	if err != nil {
   308  		t.Errorf("Repositories.GetPagesInfo returned error: %v", err)
   309  	}
   310  
   311  	want := &Pages{URL: Ptr("u"), Status: Ptr("s"), CNAME: Ptr("c"), Custom404: Ptr(false), HTMLURL: Ptr("h"), Public: Ptr(true), HTTPSCertificate: &PagesHTTPSCertificate{State: Ptr("approved"), Description: Ptr("Certificate is approved"), Domains: []string{"developer.github.com"}, ExpiresAt: Ptr("2021-05-22")}, HTTPSEnforced: Ptr(true)}
   312  	if !cmp.Equal(page, want) {
   313  		t.Errorf("Repositories.GetPagesInfo returned %+v, want %+v", page, want)
   314  	}
   315  
   316  	const methodName = "GetPagesInfo"
   317  	testBadOptions(t, methodName, func() (err error) {
   318  		_, _, err = client.Repositories.GetPagesInfo(ctx, "\n", "\n")
   319  		return err
   320  	})
   321  
   322  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   323  		got, resp, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
   324  		if got != nil {
   325  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   326  		}
   327  		return resp, err
   328  	})
   329  }
   330  
   331  func TestRepositoriesService_ListPagesBuilds(t *testing.T) {
   332  	t.Parallel()
   333  	client, mux, _ := setup(t)
   334  
   335  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   336  		testMethod(t, r, "GET")
   337  		fmt.Fprint(w, `[{"url":"u","status":"s","commit":"c"}]`)
   338  	})
   339  
   340  	ctx := context.Background()
   341  	pages, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
   342  	if err != nil {
   343  		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
   344  	}
   345  
   346  	want := []*PagesBuild{{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}}
   347  	if !cmp.Equal(pages, want) {
   348  		t.Errorf("Repositories.ListPagesBuilds returned %+v, want %+v", pages, want)
   349  	}
   350  
   351  	const methodName = "ListPagesBuilds"
   352  	testBadOptions(t, methodName, func() (err error) {
   353  		_, _, err = client.Repositories.ListPagesBuilds(ctx, "\n", "\n", nil)
   354  		return err
   355  	})
   356  
   357  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   358  		got, resp, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
   359  		if got != nil {
   360  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   361  		}
   362  		return resp, err
   363  	})
   364  }
   365  
   366  func TestRepositoriesService_ListPagesBuilds_withOptions(t *testing.T) {
   367  	t.Parallel()
   368  	client, mux, _ := setup(t)
   369  
   370  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   371  		testMethod(t, r, "GET")
   372  		testFormValues(t, r, values{
   373  			"page": "2",
   374  		})
   375  		fmt.Fprint(w, `[]`)
   376  	})
   377  
   378  	ctx := context.Background()
   379  	_, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", &ListOptions{Page: 2})
   380  	if err != nil {
   381  		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
   382  	}
   383  }
   384  
   385  func TestRepositoriesService_GetLatestPagesBuild(t *testing.T) {
   386  	t.Parallel()
   387  	client, mux, _ := setup(t)
   388  
   389  	mux.HandleFunc("/repos/o/r/pages/builds/latest", func(w http.ResponseWriter, r *http.Request) {
   390  		testMethod(t, r, "GET")
   391  		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
   392  	})
   393  
   394  	ctx := context.Background()
   395  	build, _, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
   396  	if err != nil {
   397  		t.Errorf("Repositories.GetLatestPagesBuild returned error: %v", err)
   398  	}
   399  
   400  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}
   401  	if !cmp.Equal(build, want) {
   402  		t.Errorf("Repositories.GetLatestPagesBuild returned %+v, want %+v", build, want)
   403  	}
   404  
   405  	const methodName = "GetLatestPagesBuild"
   406  	testBadOptions(t, methodName, func() (err error) {
   407  		_, _, err = client.Repositories.GetLatestPagesBuild(ctx, "\n", "\n")
   408  		return err
   409  	})
   410  
   411  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   412  		got, resp, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
   413  		if got != nil {
   414  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   415  		}
   416  		return resp, err
   417  	})
   418  }
   419  
   420  func TestRepositoriesService_GetPageBuild(t *testing.T) {
   421  	t.Parallel()
   422  	client, mux, _ := setup(t)
   423  
   424  	mux.HandleFunc("/repos/o/r/pages/builds/1", func(w http.ResponseWriter, r *http.Request) {
   425  		testMethod(t, r, "GET")
   426  		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
   427  	})
   428  
   429  	ctx := context.Background()
   430  	build, _, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
   431  	if err != nil {
   432  		t.Errorf("Repositories.GetPageBuild returned error: %v", err)
   433  	}
   434  
   435  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}
   436  	if !cmp.Equal(build, want) {
   437  		t.Errorf("Repositories.GetPageBuild returned %+v, want %+v", build, want)
   438  	}
   439  
   440  	const methodName = "GetPageBuild"
   441  	testBadOptions(t, methodName, func() (err error) {
   442  		_, _, err = client.Repositories.GetPageBuild(ctx, "\n", "\n", -1)
   443  		return err
   444  	})
   445  
   446  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   447  		got, resp, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
   448  		if got != nil {
   449  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   450  		}
   451  		return resp, err
   452  	})
   453  }
   454  
   455  func TestRepositoriesService_RequestPageBuild(t *testing.T) {
   456  	t.Parallel()
   457  	client, mux, _ := setup(t)
   458  
   459  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   460  		testMethod(t, r, "POST")
   461  		fmt.Fprint(w, `{"url":"u","status":"s"}`)
   462  	})
   463  
   464  	ctx := context.Background()
   465  	build, _, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
   466  	if err != nil {
   467  		t.Errorf("Repositories.RequestPageBuild returned error: %v", err)
   468  	}
   469  
   470  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s")}
   471  	if !cmp.Equal(build, want) {
   472  		t.Errorf("Repositories.RequestPageBuild returned %+v, want %+v", build, want)
   473  	}
   474  
   475  	const methodName = "RequestPageBuild"
   476  	testBadOptions(t, methodName, func() (err error) {
   477  		_, _, err = client.Repositories.RequestPageBuild(ctx, "\n", "\n")
   478  		return err
   479  	})
   480  
   481  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   482  		got, resp, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
   483  		if got != nil {
   484  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   485  		}
   486  		return resp, err
   487  	})
   488  }
   489  
   490  func TestRepositoriesService_GetPageHealthCheck(t *testing.T) {
   491  	t.Parallel()
   492  	client, mux, _ := setup(t)
   493  
   494  	mux.HandleFunc("/repos/o/r/pages/health", func(w http.ResponseWriter, r *http.Request) {
   495  		testMethod(t, r, "GET")
   496  		fmt.Fprint(w, `{"domain":{"host":"example.com","uri":"http://example.com/","nameservers":"default","dns_resolves":true},"alt_domain":{"host":"www.example.com","uri":"http://www.example.com/","nameservers":"default","dns_resolves":true}}`)
   497  	})
   498  
   499  	ctx := context.Background()
   500  	healthCheckResponse, _, err := client.Repositories.GetPageHealthCheck(ctx, "o", "r")
   501  	if err != nil {
   502  		t.Errorf("Repositories.GetPageHealthCheck returned error: %v", err)
   503  	}
   504  
   505  	want := &PagesHealthCheckResponse{
   506  		Domain: &PagesDomain{
   507  			Host:        Ptr("example.com"),
   508  			URI:         Ptr("http://example.com/"),
   509  			Nameservers: Ptr("default"),
   510  			DNSResolves: Ptr(true),
   511  		},
   512  		AltDomain: &PagesDomain{
   513  			Host:        Ptr("www.example.com"),
   514  			URI:         Ptr("http://www.example.com/"),
   515  			Nameservers: Ptr("default"),
   516  			DNSResolves: Ptr(true),
   517  		},
   518  	}
   519  	if !cmp.Equal(healthCheckResponse, want) {
   520  		t.Errorf("Repositories.GetPageHealthCheck returned %+v, want %+v", healthCheckResponse, want)
   521  	}
   522  
   523  	const methodName = "GetPageHealthCheck"
   524  	testBadOptions(t, methodName, func() (err error) {
   525  		_, _, err = client.Repositories.GetPageHealthCheck(ctx, "\n", "\n")
   526  		return err
   527  	})
   528  
   529  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   530  		got, resp, err := client.Repositories.GetPageHealthCheck(ctx, "o", "r")
   531  		if got != nil {
   532  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   533  		}
   534  		return resp, err
   535  	})
   536  }
   537  
   538  func TestPagesSource_Marshal(t *testing.T) {
   539  	t.Parallel()
   540  	testJSONMarshal(t, &PagesSource{}, "{}")
   541  
   542  	u := &PagesSource{
   543  		Branch: Ptr("branch"),
   544  		Path:   Ptr("path"),
   545  	}
   546  
   547  	want := `{
   548  		"branch": "branch",
   549  		"path": "path"
   550  	}`
   551  
   552  	testJSONMarshal(t, u, want)
   553  }
   554  
   555  func TestPagesError_Marshal(t *testing.T) {
   556  	t.Parallel()
   557  	testJSONMarshal(t, &PagesError{}, "{}")
   558  
   559  	u := &PagesError{
   560  		Message: Ptr("message"),
   561  	}
   562  
   563  	want := `{
   564  		"message": "message"
   565  	}`
   566  
   567  	testJSONMarshal(t, u, want)
   568  }
   569  
   570  func TestPagesUpdate_Marshal(t *testing.T) {
   571  	t.Parallel()
   572  	testJSONMarshal(t, &PagesUpdate{}, "{}")
   573  
   574  	u := &PagesUpdate{
   575  		CNAME:  Ptr("cname"),
   576  		Source: &PagesSource{Path: Ptr("src")},
   577  	}
   578  
   579  	want := `{
   580  		"cname": "cname",
   581  		"source": { "path": "src" }
   582  	}`
   583  
   584  	testJSONMarshal(t, u, want)
   585  }
   586  
   587  func TestPages_Marshal(t *testing.T) {
   588  	t.Parallel()
   589  	testJSONMarshal(t, &Pages{}, "{}")
   590  
   591  	u := &Pages{
   592  		URL:       Ptr("url"),
   593  		Status:    Ptr("status"),
   594  		CNAME:     Ptr("cname"),
   595  		Custom404: Ptr(false),
   596  		HTMLURL:   Ptr("hurl"),
   597  		Source: &PagesSource{
   598  			Branch: Ptr("branch"),
   599  			Path:   Ptr("path"),
   600  		},
   601  	}
   602  
   603  	want := `{
   604  		"url": "url",
   605  		"status": "status",
   606  		"cname": "cname",
   607  		"custom_404": false,
   608  		"html_url": "hurl",
   609  		"source": {
   610  			"branch": "branch",
   611  			"path": "path"
   612  		}
   613  	}`
   614  
   615  	testJSONMarshal(t, u, want)
   616  }
   617  
   618  func TestPagesBuild_Marshal(t *testing.T) {
   619  	t.Parallel()
   620  	testJSONMarshal(t, &PagesBuild{}, "{}")
   621  
   622  	u := &PagesBuild{
   623  		URL:    Ptr("url"),
   624  		Status: Ptr("status"),
   625  		Error: &PagesError{
   626  			Message: Ptr("message"),
   627  		},
   628  		Pusher:    &User{ID: Ptr(int64(1))},
   629  		Commit:    Ptr("commit"),
   630  		Duration:  Ptr(1),
   631  		CreatedAt: &Timestamp{referenceTime},
   632  		UpdatedAt: &Timestamp{referenceTime},
   633  	}
   634  
   635  	want := `{
   636  		"url": "url",
   637  		"status": "status",
   638  		"error": {
   639  			"message": "message"
   640  		},
   641  		"pusher": {
   642  			"id": 1
   643  		},
   644  		"commit": "commit",
   645  		"duration": 1,
   646  		"created_at": ` + referenceTimeStr + `,
   647  		"updated_at": ` + referenceTimeStr + `
   648  	}`
   649  
   650  	testJSONMarshal(t, u, want)
   651  }
   652  
   653  func TestPagesHealthCheckResponse_Marshal(t *testing.T) {
   654  	t.Parallel()
   655  	testJSONMarshal(t, &PagesHealthCheckResponse{}, "{}")
   656  
   657  	u := &PagesHealthCheckResponse{
   658  		Domain: &PagesDomain{
   659  			Host:                          Ptr("example.com"),
   660  			URI:                           Ptr("http://example.com/"),
   661  			Nameservers:                   Ptr("default"),
   662  			DNSResolves:                   Ptr(true),
   663  			IsProxied:                     Ptr(false),
   664  			IsCloudflareIP:                Ptr(false),
   665  			IsFastlyIP:                    Ptr(false),
   666  			IsOldIPAddress:                Ptr(false),
   667  			IsARecord:                     Ptr(true),
   668  			HasCNAMERecord:                Ptr(false),
   669  			HasMXRecordsPresent:           Ptr(false),
   670  			IsValidDomain:                 Ptr(true),
   671  			IsApexDomain:                  Ptr(true),
   672  			ShouldBeARecord:               Ptr(true),
   673  			IsCNAMEToGithubUserDomain:     Ptr(false),
   674  			IsCNAMEToPagesDotGithubDotCom: Ptr(false),
   675  			IsCNAMEToFastly:               Ptr(false),
   676  			IsPointedToGithubPagesIP:      Ptr(true),
   677  			IsNonGithubPagesIPPresent:     Ptr(false),
   678  			IsPagesDomain:                 Ptr(false),
   679  			IsServedByPages:               Ptr(true),
   680  			IsValid:                       Ptr(true),
   681  			Reason:                        Ptr("some reason"),
   682  			RespondsToHTTPS:               Ptr(true),
   683  			EnforcesHTTPS:                 Ptr(true),
   684  			HTTPSError:                    Ptr("some error"),
   685  			IsHTTPSEligible:               Ptr(true),
   686  			CAAError:                      Ptr("some error"),
   687  		},
   688  		AltDomain: &PagesDomain{
   689  			Host:        Ptr("www.example.com"),
   690  			URI:         Ptr("http://www.example.com/"),
   691  			Nameservers: Ptr("default"),
   692  			DNSResolves: Ptr(true),
   693  		},
   694  	}
   695  
   696  	want := `{
   697  		"domain": {
   698  		  "host": "example.com",
   699  		  "uri": "http://example.com/",
   700  		  "nameservers": "default",
   701  		  "dns_resolves": true,
   702  		  "is_proxied": false,
   703  		  "is_cloudflare_ip": false,
   704  		  "is_fastly_ip": false,
   705  		  "is_old_ip_address": false,
   706  		  "is_a_record": true,
   707  		  "has_cname_record": false,
   708  		  "has_mx_records_present": false,
   709  		  "is_valid_domain": true,
   710  		  "is_apex_domain": true,
   711  		  "should_be_a_record": true,
   712  		  "is_cname_to_github_user_domain": false,
   713  		  "is_cname_to_pages_dot_github_dot_com": false,
   714  		  "is_cname_to_fastly": false,
   715  		  "is_pointed_to_github_pages_ip": true,
   716  		  "is_non_github_pages_ip_present": false,
   717  		  "is_pages_domain": false,
   718  		  "is_served_by_pages": true,
   719  		  "is_valid": true,
   720  		  "reason": "some reason",
   721  		  "responds_to_https": true,
   722  		  "enforces_https": true,
   723  		  "https_error": "some error",
   724  		  "is_https_eligible": true,
   725  		  "caa_error": "some error"
   726  		},
   727  		"alt_domain": {
   728  		  "host": "www.example.com",
   729  		  "uri": "http://www.example.com/",
   730  		  "nameservers": "default",
   731  		  "dns_resolves": true
   732  		}
   733  	  }`
   734  
   735  	testJSONMarshal(t, u, want)
   736  }
   737  
   738  func TestCreatePagesRequest_Marshal(t *testing.T) {
   739  	t.Parallel()
   740  	testJSONMarshal(t, &createPagesRequest{}, "{}")
   741  
   742  	u := &createPagesRequest{
   743  		Source: &PagesSource{
   744  			Branch: Ptr("branch"),
   745  			Path:   Ptr("path"),
   746  		},
   747  	}
   748  
   749  	want := `{
   750  		"source": {
   751  			"branch": "branch",
   752  			"path": "path"
   753  		}
   754  	}`
   755  
   756  	testJSONMarshal(t, u, want)
   757  }