1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "encoding/json"
11 "fmt"
12 "net/http"
13 "testing"
14
15 "github.com/google/go-cmp/cmp"
16 )
17
18 func TestIssuesService_ListAssignees(t *testing.T) {
19 client, mux, _, teardown := setup()
20 defer teardown()
21
22 mux.HandleFunc("/repos/o/r/assignees", func(w http.ResponseWriter, r *http.Request) {
23 testMethod(t, r, "GET")
24 testFormValues(t, r, values{"page": "2"})
25 fmt.Fprint(w, `[{"id":1}]`)
26 })
27
28 opt := &ListOptions{Page: 2}
29 ctx := context.Background()
30 assignees, _, err := client.Issues.ListAssignees(ctx, "o", "r", opt)
31 if err != nil {
32 t.Errorf("Issues.ListAssignees returned error: %v", err)
33 }
34
35 want := []*User{{ID: Int64(1)}}
36 if !cmp.Equal(assignees, want) {
37 t.Errorf("Issues.ListAssignees returned %+v, want %+v", assignees, want)
38 }
39
40 const methodName = "ListAssignees"
41 testBadOptions(t, methodName, func() (err error) {
42 _, _, err = client.Issues.ListAssignees(ctx, "\n", "\n", opt)
43 return err
44 })
45
46 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
47 got, resp, err := client.Issues.ListAssignees(ctx, "o", "r", opt)
48 if got != nil {
49 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
50 }
51 return resp, err
52 })
53 }
54
55 func TestIssuesService_ListAssignees_invalidOwner(t *testing.T) {
56 client, _, _, teardown := setup()
57 defer teardown()
58
59 ctx := context.Background()
60 _, _, err := client.Issues.ListAssignees(ctx, "%", "r", nil)
61 testURLParseError(t, err)
62 }
63
64 func TestIssuesService_IsAssignee_true(t *testing.T) {
65 client, mux, _, teardown := setup()
66 defer teardown()
67
68 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
69 testMethod(t, r, "GET")
70 })
71
72 ctx := context.Background()
73 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
74 if err != nil {
75 t.Errorf("Issues.IsAssignee returned error: %v", err)
76 }
77 if want := true; assignee != want {
78 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
79 }
80
81 const methodName = "IsAssignee"
82 testBadOptions(t, methodName, func() (err error) {
83 _, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n")
84 return err
85 })
86
87 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
88 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
89 if got {
90 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
91 }
92 return resp, err
93 })
94 }
95
96 func TestIssuesService_IsAssignee_false(t *testing.T) {
97 client, mux, _, teardown := setup()
98 defer teardown()
99
100 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
101 testMethod(t, r, "GET")
102 w.WriteHeader(http.StatusNotFound)
103 })
104
105 ctx := context.Background()
106 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
107 if err != nil {
108 t.Errorf("Issues.IsAssignee returned error: %v", err)
109 }
110 if want := false; assignee != want {
111 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
112 }
113
114 const methodName = "IsAssignee"
115 testBadOptions(t, methodName, func() (err error) {
116 _, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n")
117 return err
118 })
119
120 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
121 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
122 if got {
123 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
124 }
125 return resp, err
126 })
127 }
128
129 func TestIssuesService_IsAssignee_error(t *testing.T) {
130 client, mux, _, teardown := setup()
131 defer teardown()
132
133 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
134 testMethod(t, r, "GET")
135 http.Error(w, "BadRequest", http.StatusBadRequest)
136 })
137
138 ctx := context.Background()
139 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
140 if err == nil {
141 t.Errorf("Expected HTTP 400 response")
142 }
143 if want := false; assignee != want {
144 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
145 }
146
147 const methodName = "IsAssignee"
148 testBadOptions(t, methodName, func() (err error) {
149 _, _, err = client.Issues.IsAssignee(ctx, "o", "r", "u")
150 return err
151 })
152
153 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
154 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
155 if got {
156 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
157 }
158 return resp, err
159 })
160 }
161
162 func TestIssuesService_IsAssignee_invalidOwner(t *testing.T) {
163 client, _, _, teardown := setup()
164 defer teardown()
165
166 ctx := context.Background()
167 _, _, err := client.Issues.IsAssignee(ctx, "%", "r", "u")
168 testURLParseError(t, err)
169 }
170
171 func TestIssuesService_AddAssignees(t *testing.T) {
172 client, mux, _, teardown := setup()
173 defer teardown()
174
175 mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) {
176 var assignees struct {
177 Assignees []string `json:"assignees,omitempty"`
178 }
179 json.NewDecoder(r.Body).Decode(&assignees)
180
181 testMethod(t, r, "POST")
182 want := []string{"user1", "user2"}
183 if !cmp.Equal(assignees.Assignees, want) {
184 t.Errorf("assignees = %+v, want %+v", assignees, want)
185 }
186 fmt.Fprint(w, `{"number":1,"assignees":[{"login":"user1"},{"login":"user2"}]}`)
187 })
188
189 ctx := context.Background()
190 got, _, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
191 if err != nil {
192 t.Errorf("Issues.AddAssignees returned error: %v", err)
193 }
194
195 want := &Issue{Number: Int(1), Assignees: []*User{{Login: String("user1")}, {Login: String("user2")}}}
196 if !cmp.Equal(got, want) {
197 t.Errorf("Issues.AddAssignees = %+v, want %+v", got, want)
198 }
199
200 const methodName = "AddAssignees"
201 testBadOptions(t, methodName, func() (err error) {
202 _, _, err = client.Issues.AddAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"})
203 return err
204 })
205
206 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
207 got, resp, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
208 if got != nil {
209 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
210 }
211 return resp, err
212 })
213 }
214
215 func TestIssuesService_RemoveAssignees(t *testing.T) {
216 client, mux, _, teardown := setup()
217 defer teardown()
218
219 mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) {
220 var assignees struct {
221 Assignees []string `json:"assignees,omitempty"`
222 }
223 json.NewDecoder(r.Body).Decode(&assignees)
224
225 testMethod(t, r, "DELETE")
226 want := []string{"user1", "user2"}
227 if !cmp.Equal(assignees.Assignees, want) {
228 t.Errorf("assignees = %+v, want %+v", assignees, want)
229 }
230 fmt.Fprint(w, `{"number":1,"assignees":[]}`)
231 })
232
233 ctx := context.Background()
234 got, _, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
235 if err != nil {
236 t.Errorf("Issues.RemoveAssignees returned error: %v", err)
237 }
238
239 want := &Issue{Number: Int(1), Assignees: []*User{}}
240 if !cmp.Equal(got, want) {
241 t.Errorf("Issues.RemoveAssignees = %+v, want %+v", got, want)
242 }
243
244 const methodName = "RemoveAssignees"
245 testBadOptions(t, methodName, func() (err error) {
246 _, _, err = client.Issues.RemoveAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"})
247 return err
248 })
249
250 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
251 got, resp, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
252 if got != nil {
253 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
254 }
255 return resp, err
256 })
257 }
258
View as plain text