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 6package github 7 8import ( 9 "bytes" 10 "context" 11 "encoding/json" 12 "fmt" 13 "io/ioutil" 14 "net/http" 15 "reflect" 16 "testing" 17) 18 19func TestRepositoriesService_EnablePages(t *testing.T) { 20 client, mux, _, teardown := setup() 21 defer teardown() 22 23 input := &Pages{ 24 Source: &PagesSource{ 25 Branch: String("master"), 26 Path: String("/"), 27 }, 28 CNAME: String("www.my-domain.com"), // not passed along. 29 } 30 31 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 32 v := new(createPagesRequest) 33 json.NewDecoder(r.Body).Decode(v) 34 35 testMethod(t, r, "POST") 36 testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview) 37 want := &createPagesRequest{Source: &PagesSource{Branch: String("master"), Path: String("/")}} 38 if !reflect.DeepEqual(v, want) { 39 t.Errorf("Request body = %+v, want %+v", v, want) 40 } 41 42 fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h", "source": {"branch":"master", "path":"/"}}`) 43 }) 44 45 page, _, err := client.Repositories.EnablePages(context.Background(), "o", "r", input) 46 if err != nil { 47 t.Errorf("Repositories.EnablePages returned error: %v", err) 48 } 49 50 want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h"), Source: &PagesSource{Branch: String("master"), Path: String("/")}} 51 52 if !reflect.DeepEqual(page, want) { 53 t.Errorf("Repositories.EnablePages returned %v, want %v", page, want) 54 } 55} 56 57func TestRepositoriesService_UpdatePages(t *testing.T) { 58 client, mux, _, teardown := setup() 59 defer teardown() 60 61 input := &PagesUpdate{ 62 CNAME: String("www.my-domain.com"), 63 Source: String("gh-pages"), 64 } 65 66 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 67 v := new(PagesUpdate) 68 json.NewDecoder(r.Body).Decode(v) 69 70 testMethod(t, r, "PUT") 71 want := &PagesUpdate{CNAME: String("www.my-domain.com"), Source: String("gh-pages")} 72 if !reflect.DeepEqual(v, want) { 73 t.Errorf("Request body = %+v, want %+v", v, want) 74 } 75 76 fmt.Fprint(w, `{"cname":"www.my-domain.com","source":"gh-pages"}`) 77 }) 78 79 _, err := client.Repositories.UpdatePages(context.Background(), "o", "r", input) 80 if err != nil { 81 t.Errorf("Repositories.UpdatePages returned error: %v", err) 82 } 83} 84 85func TestRepositoriesService_UpdatePages_NullCNAME(t *testing.T) { 86 client, mux, _, teardown := setup() 87 defer teardown() 88 89 input := &PagesUpdate{ 90 Source: String("gh-pages"), 91 } 92 93 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 94 got, err := ioutil.ReadAll(r.Body) 95 if err != nil { 96 t.Fatalf("unable to read body: %v", err) 97 } 98 99 want := []byte(`{"cname":null,"source":"gh-pages"}` + "\n") 100 if !bytes.Equal(got, want) { 101 t.Errorf("Request body = %+v, want %+v", got, want) 102 } 103 104 fmt.Fprint(w, `{"cname":null,"source":"gh-pages"}`) 105 }) 106 107 _, err := client.Repositories.UpdatePages(context.Background(), "o", "r", input) 108 if err != nil { 109 t.Errorf("Repositories.UpdatePages returned error: %v", err) 110 } 111} 112 113func TestRepositoriesService_DisablePages(t *testing.T) { 114 client, mux, _, teardown := setup() 115 defer teardown() 116 117 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 118 testMethod(t, r, "DELETE") 119 testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview) 120 }) 121 122 _, err := client.Repositories.DisablePages(context.Background(), "o", "r") 123 if err != nil { 124 t.Errorf("Repositories.DisablePages returned error: %v", err) 125 } 126} 127 128func TestRepositoriesService_GetPagesInfo(t *testing.T) { 129 client, mux, _, teardown := setup() 130 defer teardown() 131 132 mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) { 133 testMethod(t, r, "GET") 134 fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h"}`) 135 }) 136 137 page, _, err := client.Repositories.GetPagesInfo(context.Background(), "o", "r") 138 if err != nil { 139 t.Errorf("Repositories.GetPagesInfo returned error: %v", err) 140 } 141 142 want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h")} 143 if !reflect.DeepEqual(page, want) { 144 t.Errorf("Repositories.GetPagesInfo returned %+v, want %+v", page, want) 145 } 146} 147 148func TestRepositoriesService_ListPagesBuilds(t *testing.T) { 149 client, mux, _, teardown := setup() 150 defer teardown() 151 152 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) { 153 testMethod(t, r, "GET") 154 fmt.Fprint(w, `[{"url":"u","status":"s","commit":"c"}]`) 155 }) 156 157 pages, _, err := client.Repositories.ListPagesBuilds(context.Background(), "o", "r", nil) 158 if err != nil { 159 t.Errorf("Repositories.ListPagesBuilds returned error: %v", err) 160 } 161 162 want := []*PagesBuild{{URL: String("u"), Status: String("s"), Commit: String("c")}} 163 if !reflect.DeepEqual(pages, want) { 164 t.Errorf("Repositories.ListPagesBuilds returned %+v, want %+v", pages, want) 165 } 166} 167 168func TestRepositoriesService_ListPagesBuilds_withOptions(t *testing.T) { 169 client, mux, _, teardown := setup() 170 defer teardown() 171 172 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) { 173 testMethod(t, r, "GET") 174 testFormValues(t, r, values{ 175 "page": "2", 176 }) 177 fmt.Fprint(w, `[]`) 178 }) 179 180 _, _, err := client.Repositories.ListPagesBuilds(context.Background(), "o", "r", &ListOptions{Page: 2}) 181 if err != nil { 182 t.Errorf("Repositories.ListPagesBuilds returned error: %v", err) 183 } 184} 185 186func TestRepositoriesService_GetLatestPagesBuild(t *testing.T) { 187 client, mux, _, teardown := setup() 188 defer teardown() 189 190 mux.HandleFunc("/repos/o/r/pages/builds/latest", func(w http.ResponseWriter, r *http.Request) { 191 testMethod(t, r, "GET") 192 fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`) 193 }) 194 195 build, _, err := client.Repositories.GetLatestPagesBuild(context.Background(), "o", "r") 196 if err != nil { 197 t.Errorf("Repositories.GetLatestPagesBuild returned error: %v", err) 198 } 199 200 want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")} 201 if !reflect.DeepEqual(build, want) { 202 t.Errorf("Repositories.GetLatestPagesBuild returned %+v, want %+v", build, want) 203 } 204} 205 206func TestRepositoriesService_GetPageBuild(t *testing.T) { 207 client, mux, _, teardown := setup() 208 defer teardown() 209 210 mux.HandleFunc("/repos/o/r/pages/builds/1", func(w http.ResponseWriter, r *http.Request) { 211 testMethod(t, r, "GET") 212 fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`) 213 }) 214 215 build, _, err := client.Repositories.GetPageBuild(context.Background(), "o", "r", 1) 216 if err != nil { 217 t.Errorf("Repositories.GetPageBuild returned error: %v", err) 218 } 219 220 want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")} 221 if !reflect.DeepEqual(build, want) { 222 t.Errorf("Repositories.GetPageBuild returned %+v, want %+v", build, want) 223 } 224} 225 226func TestRepositoriesService_RequestPageBuild(t *testing.T) { 227 client, mux, _, teardown := setup() 228 defer teardown() 229 230 mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) { 231 testMethod(t, r, "POST") 232 fmt.Fprint(w, `{"url":"u","status":"s"}`) 233 }) 234 235 build, _, err := client.Repositories.RequestPageBuild(context.Background(), "o", "r") 236 if err != nil { 237 t.Errorf("Repositories.RequestPageBuild returned error: %v", err) 238 } 239 240 want := &PagesBuild{URL: String("u"), Status: String("s")} 241 if !reflect.DeepEqual(build, want) { 242 t.Errorf("Repositories.RequestPageBuild returned %+v, want %+v", build, want) 243 } 244} 245