github.com/google/go-github/v69@v69.2.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_UpdatePages_NullCNAME(t *testing.T) {
   204  	t.Parallel()
   205  	client, mux, _ := setup(t)
   206  
   207  	input := &PagesUpdate{
   208  		Source: &PagesSource{Branch: Ptr("gh-pages")},
   209  	}
   210  
   211  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   212  		got, err := io.ReadAll(r.Body)
   213  		if err != nil {
   214  			t.Fatalf("unable to read body: %v", err)
   215  		}
   216  
   217  		want := []byte(`{"cname":null,"source":{"branch":"gh-pages"}}` + "\n")
   218  		if !bytes.Equal(got, want) {
   219  			t.Errorf("Request body = %+v, want %+v", got, want)
   220  		}
   221  
   222  		fmt.Fprint(w, `{"cname":null,"source":{"branch":"gh-pages"}}`)
   223  	})
   224  
   225  	ctx := context.Background()
   226  	_, err := client.Repositories.UpdatePages(ctx, "o", "r", input)
   227  	if err != nil {
   228  		t.Errorf("Repositories.UpdatePages returned error: %v", err)
   229  	}
   230  }
   231  
   232  func TestRepositoriesService_DisablePages(t *testing.T) {
   233  	t.Parallel()
   234  	client, mux, _ := setup(t)
   235  
   236  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   237  		testMethod(t, r, "DELETE")
   238  		testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
   239  	})
   240  
   241  	ctx := context.Background()
   242  	_, err := client.Repositories.DisablePages(ctx, "o", "r")
   243  	if err != nil {
   244  		t.Errorf("Repositories.DisablePages returned error: %v", err)
   245  	}
   246  
   247  	const methodName = "DisablePages"
   248  	testBadOptions(t, methodName, func() (err error) {
   249  		_, err = client.Repositories.DisablePages(ctx, "\n", "\n")
   250  		return err
   251  	})
   252  
   253  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   254  		return client.Repositories.DisablePages(ctx, "o", "r")
   255  	})
   256  }
   257  
   258  func TestRepositoriesService_GetPagesInfo(t *testing.T) {
   259  	t.Parallel()
   260  	client, mux, _ := setup(t)
   261  
   262  	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
   263  		testMethod(t, r, "GET")
   264  		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}`)
   265  	})
   266  
   267  	ctx := context.Background()
   268  	page, _, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
   269  	if err != nil {
   270  		t.Errorf("Repositories.GetPagesInfo returned error: %v", err)
   271  	}
   272  
   273  	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)}
   274  	if !cmp.Equal(page, want) {
   275  		t.Errorf("Repositories.GetPagesInfo returned %+v, want %+v", page, want)
   276  	}
   277  
   278  	const methodName = "GetPagesInfo"
   279  	testBadOptions(t, methodName, func() (err error) {
   280  		_, _, err = client.Repositories.GetPagesInfo(ctx, "\n", "\n")
   281  		return err
   282  	})
   283  
   284  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   285  		got, resp, err := client.Repositories.GetPagesInfo(ctx, "o", "r")
   286  		if got != nil {
   287  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   288  		}
   289  		return resp, err
   290  	})
   291  }
   292  
   293  func TestRepositoriesService_ListPagesBuilds(t *testing.T) {
   294  	t.Parallel()
   295  	client, mux, _ := setup(t)
   296  
   297  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   298  		testMethod(t, r, "GET")
   299  		fmt.Fprint(w, `[{"url":"u","status":"s","commit":"c"}]`)
   300  	})
   301  
   302  	ctx := context.Background()
   303  	pages, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
   304  	if err != nil {
   305  		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
   306  	}
   307  
   308  	want := []*PagesBuild{{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}}
   309  	if !cmp.Equal(pages, want) {
   310  		t.Errorf("Repositories.ListPagesBuilds returned %+v, want %+v", pages, want)
   311  	}
   312  
   313  	const methodName = "ListPagesBuilds"
   314  	testBadOptions(t, methodName, func() (err error) {
   315  		_, _, err = client.Repositories.ListPagesBuilds(ctx, "\n", "\n", nil)
   316  		return err
   317  	})
   318  
   319  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   320  		got, resp, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", nil)
   321  		if got != nil {
   322  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   323  		}
   324  		return resp, err
   325  	})
   326  }
   327  
   328  func TestRepositoriesService_ListPagesBuilds_withOptions(t *testing.T) {
   329  	t.Parallel()
   330  	client, mux, _ := setup(t)
   331  
   332  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   333  		testMethod(t, r, "GET")
   334  		testFormValues(t, r, values{
   335  			"page": "2",
   336  		})
   337  		fmt.Fprint(w, `[]`)
   338  	})
   339  
   340  	ctx := context.Background()
   341  	_, _, err := client.Repositories.ListPagesBuilds(ctx, "o", "r", &ListOptions{Page: 2})
   342  	if err != nil {
   343  		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
   344  	}
   345  }
   346  
   347  func TestRepositoriesService_GetLatestPagesBuild(t *testing.T) {
   348  	t.Parallel()
   349  	client, mux, _ := setup(t)
   350  
   351  	mux.HandleFunc("/repos/o/r/pages/builds/latest", func(w http.ResponseWriter, r *http.Request) {
   352  		testMethod(t, r, "GET")
   353  		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
   354  	})
   355  
   356  	ctx := context.Background()
   357  	build, _, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
   358  	if err != nil {
   359  		t.Errorf("Repositories.GetLatestPagesBuild returned error: %v", err)
   360  	}
   361  
   362  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}
   363  	if !cmp.Equal(build, want) {
   364  		t.Errorf("Repositories.GetLatestPagesBuild returned %+v, want %+v", build, want)
   365  	}
   366  
   367  	const methodName = "GetLatestPagesBuild"
   368  	testBadOptions(t, methodName, func() (err error) {
   369  		_, _, err = client.Repositories.GetLatestPagesBuild(ctx, "\n", "\n")
   370  		return err
   371  	})
   372  
   373  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   374  		got, resp, err := client.Repositories.GetLatestPagesBuild(ctx, "o", "r")
   375  		if got != nil {
   376  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   377  		}
   378  		return resp, err
   379  	})
   380  }
   381  
   382  func TestRepositoriesService_GetPageBuild(t *testing.T) {
   383  	t.Parallel()
   384  	client, mux, _ := setup(t)
   385  
   386  	mux.HandleFunc("/repos/o/r/pages/builds/1", func(w http.ResponseWriter, r *http.Request) {
   387  		testMethod(t, r, "GET")
   388  		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
   389  	})
   390  
   391  	ctx := context.Background()
   392  	build, _, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
   393  	if err != nil {
   394  		t.Errorf("Repositories.GetPageBuild returned error: %v", err)
   395  	}
   396  
   397  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s"), Commit: Ptr("c")}
   398  	if !cmp.Equal(build, want) {
   399  		t.Errorf("Repositories.GetPageBuild returned %+v, want %+v", build, want)
   400  	}
   401  
   402  	const methodName = "GetPageBuild"
   403  	testBadOptions(t, methodName, func() (err error) {
   404  		_, _, err = client.Repositories.GetPageBuild(ctx, "\n", "\n", -1)
   405  		return err
   406  	})
   407  
   408  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   409  		got, resp, err := client.Repositories.GetPageBuild(ctx, "o", "r", 1)
   410  		if got != nil {
   411  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   412  		}
   413  		return resp, err
   414  	})
   415  }
   416  
   417  func TestRepositoriesService_RequestPageBuild(t *testing.T) {
   418  	t.Parallel()
   419  	client, mux, _ := setup(t)
   420  
   421  	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
   422  		testMethod(t, r, "POST")
   423  		fmt.Fprint(w, `{"url":"u","status":"s"}`)
   424  	})
   425  
   426  	ctx := context.Background()
   427  	build, _, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
   428  	if err != nil {
   429  		t.Errorf("Repositories.RequestPageBuild returned error: %v", err)
   430  	}
   431  
   432  	want := &PagesBuild{URL: Ptr("u"), Status: Ptr("s")}
   433  	if !cmp.Equal(build, want) {
   434  		t.Errorf("Repositories.RequestPageBuild returned %+v, want %+v", build, want)
   435  	}
   436  
   437  	const methodName = "RequestPageBuild"
   438  	testBadOptions(t, methodName, func() (err error) {
   439  		_, _, err = client.Repositories.RequestPageBuild(ctx, "\n", "\n")
   440  		return err
   441  	})
   442  
   443  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   444  		got, resp, err := client.Repositories.RequestPageBuild(ctx, "o", "r")
   445  		if got != nil {
   446  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   447  		}
   448  		return resp, err
   449  	})
   450  }
   451  
   452  func TestRepositoriesService_GetPageHealthCheck(t *testing.T) {
   453  	t.Parallel()
   454  	client, mux, _ := setup(t)
   455  
   456  	mux.HandleFunc("/repos/o/r/pages/health", func(w http.ResponseWriter, r *http.Request) {
   457  		testMethod(t, r, "GET")
   458  		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}}`)
   459  	})
   460  
   461  	ctx := context.Background()
   462  	healthCheckResponse, _, err := client.Repositories.GetPageHealthCheck(ctx, "o", "r")
   463  	if err != nil {
   464  		t.Errorf("Repositories.GetPageHealthCheck returned error: %v", err)
   465  	}
   466  
   467  	want := &PagesHealthCheckResponse{
   468  		Domain: &PagesDomain{
   469  			Host:        Ptr("example.com"),
   470  			URI:         Ptr("http://example.com/"),
   471  			Nameservers: Ptr("default"),
   472  			DNSResolves: Ptr(true),
   473  		},
   474  		AltDomain: &PagesDomain{
   475  			Host:        Ptr("www.example.com"),
   476  			URI:         Ptr("http://www.example.com/"),
   477  			Nameservers: Ptr("default"),
   478  			DNSResolves: Ptr(true),
   479  		},
   480  	}
   481  	if !cmp.Equal(healthCheckResponse, want) {
   482  		t.Errorf("Repositories.GetPageHealthCheck returned %+v, want %+v", healthCheckResponse, want)
   483  	}
   484  
   485  	const methodName = "GetPageHealthCheck"
   486  	testBadOptions(t, methodName, func() (err error) {
   487  		_, _, err = client.Repositories.GetPageHealthCheck(ctx, "\n", "\n")
   488  		return err
   489  	})
   490  
   491  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   492  		got, resp, err := client.Repositories.GetPageHealthCheck(ctx, "o", "r")
   493  		if got != nil {
   494  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   495  		}
   496  		return resp, err
   497  	})
   498  }
   499  
   500  func TestPagesSource_Marshal(t *testing.T) {
   501  	t.Parallel()
   502  	testJSONMarshal(t, &PagesSource{}, "{}")
   503  
   504  	u := &PagesSource{
   505  		Branch: Ptr("branch"),
   506  		Path:   Ptr("path"),
   507  	}
   508  
   509  	want := `{
   510  		"branch": "branch",
   511  		"path": "path"
   512  	}`
   513  
   514  	testJSONMarshal(t, u, want)
   515  }
   516  
   517  func TestPagesError_Marshal(t *testing.T) {
   518  	t.Parallel()
   519  	testJSONMarshal(t, &PagesError{}, "{}")
   520  
   521  	u := &PagesError{
   522  		Message: Ptr("message"),
   523  	}
   524  
   525  	want := `{
   526  		"message": "message"
   527  	}`
   528  
   529  	testJSONMarshal(t, u, want)
   530  }
   531  
   532  func TestPagesUpdate_Marshal(t *testing.T) {
   533  	t.Parallel()
   534  	testJSONMarshal(t, &PagesUpdate{}, "{}")
   535  
   536  	u := &PagesUpdate{
   537  		CNAME:  Ptr("cname"),
   538  		Source: &PagesSource{Path: Ptr("src")},
   539  	}
   540  
   541  	want := `{
   542  		"cname": "cname",
   543  		"source": { "path": "src" }
   544  	}`
   545  
   546  	testJSONMarshal(t, u, want)
   547  }
   548  
   549  func TestPages_Marshal(t *testing.T) {
   550  	t.Parallel()
   551  	testJSONMarshal(t, &Pages{}, "{}")
   552  
   553  	u := &Pages{
   554  		URL:       Ptr("url"),
   555  		Status:    Ptr("status"),
   556  		CNAME:     Ptr("cname"),
   557  		Custom404: Ptr(false),
   558  		HTMLURL:   Ptr("hurl"),
   559  		Source: &PagesSource{
   560  			Branch: Ptr("branch"),
   561  			Path:   Ptr("path"),
   562  		},
   563  	}
   564  
   565  	want := `{
   566  		"url": "url",
   567  		"status": "status",
   568  		"cname": "cname",
   569  		"custom_404": false,
   570  		"html_url": "hurl",
   571  		"source": {
   572  			"branch": "branch",
   573  			"path": "path"
   574  		}
   575  	}`
   576  
   577  	testJSONMarshal(t, u, want)
   578  }
   579  
   580  func TestPagesBuild_Marshal(t *testing.T) {
   581  	t.Parallel()
   582  	testJSONMarshal(t, &PagesBuild{}, "{}")
   583  
   584  	u := &PagesBuild{
   585  		URL:    Ptr("url"),
   586  		Status: Ptr("status"),
   587  		Error: &PagesError{
   588  			Message: Ptr("message"),
   589  		},
   590  		Pusher:    &User{ID: Ptr(int64(1))},
   591  		Commit:    Ptr("commit"),
   592  		Duration:  Ptr(1),
   593  		CreatedAt: &Timestamp{referenceTime},
   594  		UpdatedAt: &Timestamp{referenceTime},
   595  	}
   596  
   597  	want := `{
   598  		"url": "url",
   599  		"status": "status",
   600  		"error": {
   601  			"message": "message"
   602  		},
   603  		"pusher": {
   604  			"id": 1
   605  		},
   606  		"commit": "commit",
   607  		"duration": 1,
   608  		"created_at": ` + referenceTimeStr + `,
   609  		"updated_at": ` + referenceTimeStr + `
   610  	}`
   611  
   612  	testJSONMarshal(t, u, want)
   613  }
   614  
   615  func TestPagesHealthCheckResponse_Marshal(t *testing.T) {
   616  	t.Parallel()
   617  	testJSONMarshal(t, &PagesHealthCheckResponse{}, "{}")
   618  
   619  	u := &PagesHealthCheckResponse{
   620  		Domain: &PagesDomain{
   621  			Host:                          Ptr("example.com"),
   622  			URI:                           Ptr("http://example.com/"),
   623  			Nameservers:                   Ptr("default"),
   624  			DNSResolves:                   Ptr(true),
   625  			IsProxied:                     Ptr(false),
   626  			IsCloudflareIP:                Ptr(false),
   627  			IsFastlyIP:                    Ptr(false),
   628  			IsOldIPAddress:                Ptr(false),
   629  			IsARecord:                     Ptr(true),
   630  			HasCNAMERecord:                Ptr(false),
   631  			HasMXRecordsPresent:           Ptr(false),
   632  			IsValidDomain:                 Ptr(true),
   633  			IsApexDomain:                  Ptr(true),
   634  			ShouldBeARecord:               Ptr(true),
   635  			IsCNAMEToGithubUserDomain:     Ptr(false),
   636  			IsCNAMEToPagesDotGithubDotCom: Ptr(false),
   637  			IsCNAMEToFastly:               Ptr(false),
   638  			IsPointedToGithubPagesIP:      Ptr(true),
   639  			IsNonGithubPagesIPPresent:     Ptr(false),
   640  			IsPagesDomain:                 Ptr(false),
   641  			IsServedByPages:               Ptr(true),
   642  			IsValid:                       Ptr(true),
   643  			Reason:                        Ptr("some reason"),
   644  			RespondsToHTTPS:               Ptr(true),
   645  			EnforcesHTTPS:                 Ptr(true),
   646  			HTTPSError:                    Ptr("some error"),
   647  			IsHTTPSEligible:               Ptr(true),
   648  			CAAError:                      Ptr("some error"),
   649  		},
   650  		AltDomain: &PagesDomain{
   651  			Host:        Ptr("www.example.com"),
   652  			URI:         Ptr("http://www.example.com/"),
   653  			Nameservers: Ptr("default"),
   654  			DNSResolves: Ptr(true),
   655  		},
   656  	}
   657  
   658  	want := `{
   659  		"domain": {
   660  		  "host": "example.com",
   661  		  "uri": "http://example.com/",
   662  		  "nameservers": "default",
   663  		  "dns_resolves": true,
   664  		  "is_proxied": false,
   665  		  "is_cloudflare_ip": false,
   666  		  "is_fastly_ip": false,
   667  		  "is_old_ip_address": false,
   668  		  "is_a_record": true,
   669  		  "has_cname_record": false,
   670  		  "has_mx_records_present": false,
   671  		  "is_valid_domain": true,
   672  		  "is_apex_domain": true,
   673  		  "should_be_a_record": true,
   674  		  "is_cname_to_github_user_domain": false,
   675  		  "is_cname_to_pages_dot_github_dot_com": false,
   676  		  "is_cname_to_fastly": false,
   677  		  "is_pointed_to_github_pages_ip": true,
   678  		  "is_non_github_pages_ip_present": false,
   679  		  "is_pages_domain": false,
   680  		  "is_served_by_pages": true,
   681  		  "is_valid": true,
   682  		  "reason": "some reason",
   683  		  "responds_to_https": true,
   684  		  "enforces_https": true,
   685  		  "https_error": "some error",
   686  		  "is_https_eligible": true,
   687  		  "caa_error": "some error"
   688  		},
   689  		"alt_domain": {
   690  		  "host": "www.example.com",
   691  		  "uri": "http://www.example.com/",
   692  		  "nameservers": "default",
   693  		  "dns_resolves": true
   694  		}
   695  	  }`
   696  
   697  	testJSONMarshal(t, u, want)
   698  }
   699  
   700  func TestCreatePagesRequest_Marshal(t *testing.T) {
   701  	t.Parallel()
   702  	testJSONMarshal(t, &createPagesRequest{}, "{}")
   703  
   704  	u := &createPagesRequest{
   705  		Source: &PagesSource{
   706  			Branch: Ptr("branch"),
   707  			Path:   Ptr("path"),
   708  		},
   709  	}
   710  
   711  	want := `{
   712  		"source": {
   713  			"branch": "branch",
   714  			"path": "path"
   715  		}
   716  	}`
   717  
   718  	testJSONMarshal(t, u, want)
   719  }