...

Source file src/github.com/google/go-github/v45/github/repos_pages_test.go

Documentation: github.com/google/go-github/v45/github

     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/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"), // 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: 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