1// Copyright 2013 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	"encoding/json"
11	"fmt"
12	"net/http"
13	"reflect"
14	"testing"
15)
16
17func TestRepositoriesService_CreateHook(t *testing.T) {
18	client, mux, _, teardown := setup()
19	defer teardown()
20
21	input := &Hook{CreatedAt: &referenceTime}
22
23	mux.HandleFunc("/repos/o/r/hooks", func(w http.ResponseWriter, r *http.Request) {
24		v := new(createHookRequest)
25		json.NewDecoder(r.Body).Decode(v)
26
27		testMethod(t, r, "POST")
28		want := &createHookRequest{Name: "web"}
29		if !reflect.DeepEqual(v, want) {
30			t.Errorf("Request body = %+v, want %+v", v, want)
31		}
32
33		fmt.Fprint(w, `{"id":1}`)
34	})
35
36	hook, _, err := client.Repositories.CreateHook(context.Background(), "o", "r", input)
37	if err != nil {
38		t.Errorf("Repositories.CreateHook returned error: %v", err)
39	}
40
41	want := &Hook{ID: Int64(1)}
42	if !reflect.DeepEqual(hook, want) {
43		t.Errorf("Repositories.CreateHook returned %+v, want %+v", hook, want)
44	}
45}
46
47func TestRepositoriesService_ListHooks(t *testing.T) {
48	client, mux, _, teardown := setup()
49	defer teardown()
50
51	mux.HandleFunc("/repos/o/r/hooks", func(w http.ResponseWriter, r *http.Request) {
52		testMethod(t, r, "GET")
53		testFormValues(t, r, values{"page": "2"})
54		fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
55	})
56
57	opt := &ListOptions{Page: 2}
58
59	hooks, _, err := client.Repositories.ListHooks(context.Background(), "o", "r", opt)
60	if err != nil {
61		t.Errorf("Repositories.ListHooks returned error: %v", err)
62	}
63
64	want := []*Hook{{ID: Int64(1)}, {ID: Int64(2)}}
65	if !reflect.DeepEqual(hooks, want) {
66		t.Errorf("Repositories.ListHooks returned %+v, want %+v", hooks, want)
67	}
68}
69
70func TestRepositoriesService_ListHooks_invalidOwner(t *testing.T) {
71	client, _, _, teardown := setup()
72	defer teardown()
73
74	_, _, err := client.Repositories.ListHooks(context.Background(), "%", "%", nil)
75	testURLParseError(t, err)
76}
77
78func TestRepositoriesService_GetHook(t *testing.T) {
79	client, mux, _, teardown := setup()
80	defer teardown()
81
82	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
83		testMethod(t, r, "GET")
84		fmt.Fprint(w, `{"id":1}`)
85	})
86
87	hook, _, err := client.Repositories.GetHook(context.Background(), "o", "r", 1)
88	if err != nil {
89		t.Errorf("Repositories.GetHook returned error: %v", err)
90	}
91
92	want := &Hook{ID: Int64(1)}
93	if !reflect.DeepEqual(hook, want) {
94		t.Errorf("Repositories.GetHook returned %+v, want %+v", hook, want)
95	}
96}
97
98func TestRepositoriesService_GetHook_invalidOwner(t *testing.T) {
99	client, _, _, teardown := setup()
100	defer teardown()
101
102	_, _, err := client.Repositories.GetHook(context.Background(), "%", "%", 1)
103	testURLParseError(t, err)
104}
105
106func TestRepositoriesService_EditHook(t *testing.T) {
107	client, mux, _, teardown := setup()
108	defer teardown()
109
110	input := &Hook{}
111
112	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
113		v := new(Hook)
114		json.NewDecoder(r.Body).Decode(v)
115
116		testMethod(t, r, "PATCH")
117		if !reflect.DeepEqual(v, input) {
118			t.Errorf("Request body = %+v, want %+v", v, input)
119		}
120
121		fmt.Fprint(w, `{"id":1}`)
122	})
123
124	hook, _, err := client.Repositories.EditHook(context.Background(), "o", "r", 1, input)
125	if err != nil {
126		t.Errorf("Repositories.EditHook returned error: %v", err)
127	}
128
129	want := &Hook{ID: Int64(1)}
130	if !reflect.DeepEqual(hook, want) {
131		t.Errorf("Repositories.EditHook returned %+v, want %+v", hook, want)
132	}
133}
134
135func TestRepositoriesService_EditHook_invalidOwner(t *testing.T) {
136	client, _, _, teardown := setup()
137	defer teardown()
138
139	_, _, err := client.Repositories.EditHook(context.Background(), "%", "%", 1, nil)
140	testURLParseError(t, err)
141}
142
143func TestRepositoriesService_DeleteHook(t *testing.T) {
144	client, mux, _, teardown := setup()
145	defer teardown()
146
147	mux.HandleFunc("/repos/o/r/hooks/1", func(w http.ResponseWriter, r *http.Request) {
148		testMethod(t, r, "DELETE")
149	})
150
151	_, err := client.Repositories.DeleteHook(context.Background(), "o", "r", 1)
152	if err != nil {
153		t.Errorf("Repositories.DeleteHook returned error: %v", err)
154	}
155}
156
157func TestRepositoriesService_DeleteHook_invalidOwner(t *testing.T) {
158	client, _, _, teardown := setup()
159	defer teardown()
160
161	_, err := client.Repositories.DeleteHook(context.Background(), "%", "%", 1)
162	testURLParseError(t, err)
163}
164
165func TestRepositoriesService_PingHook(t *testing.T) {
166	client, mux, _, teardown := setup()
167	defer teardown()
168
169	mux.HandleFunc("/repos/o/r/hooks/1/pings", func(w http.ResponseWriter, r *http.Request) {
170		testMethod(t, r, "POST")
171	})
172
173	_, err := client.Repositories.PingHook(context.Background(), "o", "r", 1)
174	if err != nil {
175		t.Errorf("Repositories.PingHook returned error: %v", err)
176	}
177}
178
179func TestRepositoriesService_TestHook(t *testing.T) {
180	client, mux, _, teardown := setup()
181	defer teardown()
182
183	mux.HandleFunc("/repos/o/r/hooks/1/tests", func(w http.ResponseWriter, r *http.Request) {
184		testMethod(t, r, "POST")
185	})
186
187	_, err := client.Repositories.TestHook(context.Background(), "o", "r", 1)
188	if err != nil {
189		t.Errorf("Repositories.TestHook returned error: %v", err)
190	}
191}
192
193func TestRepositoriesService_TestHook_invalidOwner(t *testing.T) {
194	client, _, _, teardown := setup()
195	defer teardown()
196
197	_, err := client.Repositories.TestHook(context.Background(), "%", "%", 1)
198	testURLParseError(t, err)
199}
200