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	"context"
10	"fmt"
11	"net/http"
12	"reflect"
13	"strings"
14	"testing"
15)
16
17func TestRepositoriesService_EnablePages(t *testing.T) {
18	client, mux, _, teardown := setup()
19	defer teardown()
20
21	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
22		testMethod(t, r, "POST")
23		wantAcceptHeaders := []string{mediaTypeEnablePagesAPIPreview, mediaTypePagesPreview}
24		testHeader(t, r, "Accept", strings.Join(wantAcceptHeaders, ", "))
25		fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h", "source": {"branch":"master", "path":"/"}}`)
26	})
27
28	page, _, err := client.Repositories.EnablePages(context.Background(), "o", "r")
29	if err != nil {
30		t.Errorf("Repositories.EnablePages returned error: %v", err)
31	}
32
33	want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h"), Source: &PagesSource{Branch: String("master"), Path: String("/")}}
34
35	if !reflect.DeepEqual(page, want) {
36		t.Errorf("Repositories.EnablePages returned %v, want %v", page, want)
37	}
38}
39
40func TestRepositoriesService_DisablePages(t *testing.T) {
41	client, mux, _, teardown := setup()
42	defer teardown()
43
44	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
45		testMethod(t, r, "DELETE")
46		testHeader(t, r, "Accept", mediaTypeEnablePagesAPIPreview)
47	})
48
49	_, err := client.Repositories.DisablePages(context.Background(), "o", "r")
50	if err != nil {
51		t.Errorf("Repositories.DisablePages returned error: %v", err)
52	}
53}
54
55func TestRepositoriesService_GetPagesInfo(t *testing.T) {
56	client, mux, _, teardown := setup()
57	defer teardown()
58
59	mux.HandleFunc("/repos/o/r/pages", func(w http.ResponseWriter, r *http.Request) {
60		testMethod(t, r, "GET")
61		testHeader(t, r, "Accept", mediaTypePagesPreview)
62		fmt.Fprint(w, `{"url":"u","status":"s","cname":"c","custom_404":false,"html_url":"h"}`)
63	})
64
65	page, _, err := client.Repositories.GetPagesInfo(context.Background(), "o", "r")
66	if err != nil {
67		t.Errorf("Repositories.GetPagesInfo returned error: %v", err)
68	}
69
70	want := &Pages{URL: String("u"), Status: String("s"), CNAME: String("c"), Custom404: Bool(false), HTMLURL: String("h")}
71	if !reflect.DeepEqual(page, want) {
72		t.Errorf("Repositories.GetPagesInfo returned %+v, want %+v", page, want)
73	}
74}
75
76func TestRepositoriesService_ListPagesBuilds(t *testing.T) {
77	client, mux, _, teardown := setup()
78	defer teardown()
79
80	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
81		testMethod(t, r, "GET")
82		fmt.Fprint(w, `[{"url":"u","status":"s","commit":"c"}]`)
83	})
84
85	pages, _, err := client.Repositories.ListPagesBuilds(context.Background(), "o", "r", nil)
86	if err != nil {
87		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
88	}
89
90	want := []*PagesBuild{{URL: String("u"), Status: String("s"), Commit: String("c")}}
91	if !reflect.DeepEqual(pages, want) {
92		t.Errorf("Repositories.ListPagesBuilds returned %+v, want %+v", pages, want)
93	}
94}
95
96func TestRepositoriesService_ListPagesBuilds_withOptions(t *testing.T) {
97	client, mux, _, teardown := setup()
98	defer teardown()
99
100	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
101		testMethod(t, r, "GET")
102		testFormValues(t, r, values{
103			"page": "2",
104		})
105		fmt.Fprint(w, `[]`)
106	})
107
108	_, _, err := client.Repositories.ListPagesBuilds(context.Background(), "o", "r", &ListOptions{Page: 2})
109	if err != nil {
110		t.Errorf("Repositories.ListPagesBuilds returned error: %v", err)
111	}
112}
113
114func TestRepositoriesService_GetLatestPagesBuild(t *testing.T) {
115	client, mux, _, teardown := setup()
116	defer teardown()
117
118	mux.HandleFunc("/repos/o/r/pages/builds/latest", func(w http.ResponseWriter, r *http.Request) {
119		testMethod(t, r, "GET")
120		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
121	})
122
123	build, _, err := client.Repositories.GetLatestPagesBuild(context.Background(), "o", "r")
124	if err != nil {
125		t.Errorf("Repositories.GetLatestPagesBuild returned error: %v", err)
126	}
127
128	want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")}
129	if !reflect.DeepEqual(build, want) {
130		t.Errorf("Repositories.GetLatestPagesBuild returned %+v, want %+v", build, want)
131	}
132}
133
134func TestRepositoriesService_GetPageBuild(t *testing.T) {
135	client, mux, _, teardown := setup()
136	defer teardown()
137
138	mux.HandleFunc("/repos/o/r/pages/builds/1", func(w http.ResponseWriter, r *http.Request) {
139		testMethod(t, r, "GET")
140		fmt.Fprint(w, `{"url":"u","status":"s","commit":"c"}`)
141	})
142
143	build, _, err := client.Repositories.GetPageBuild(context.Background(), "o", "r", 1)
144	if err != nil {
145		t.Errorf("Repositories.GetPageBuild returned error: %v", err)
146	}
147
148	want := &PagesBuild{URL: String("u"), Status: String("s"), Commit: String("c")}
149	if !reflect.DeepEqual(build, want) {
150		t.Errorf("Repositories.GetPageBuild returned %+v, want %+v", build, want)
151	}
152}
153
154func TestRepositoriesService_RequestPageBuild(t *testing.T) {
155	client, mux, _, teardown := setup()
156	defer teardown()
157
158	mux.HandleFunc("/repos/o/r/pages/builds", func(w http.ResponseWriter, r *http.Request) {
159		testMethod(t, r, "POST")
160		testHeader(t, r, "Accept", mediaTypePagesPreview)
161		fmt.Fprint(w, `{"url":"u","status":"s"}`)
162	})
163
164	build, _, err := client.Repositories.RequestPageBuild(context.Background(), "o", "r")
165	if err != nil {
166		t.Errorf("Repositories.RequestPageBuild returned error: %v", err)
167	}
168
169	want := &PagesBuild{URL: String("u"), Status: String("s")}
170	if !reflect.DeepEqual(build, want) {
171		t.Errorf("Repositories.RequestPageBuild returned %+v, want %+v", build, want)
172	}
173}
174