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 TestRepositoriesService_ListComments(t *testing.T) {
19 client, mux, _, teardown := setup()
20 defer teardown()
21
22 mux.HandleFunc("/repos/o/r/comments", func(w http.ResponseWriter, r *http.Request) {
23 testMethod(t, r, "GET")
24 testHeader(t, r, "Accept", mediaTypeReactionsPreview)
25 testFormValues(t, r, values{"page": "2"})
26 fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
27 })
28
29 opt := &ListOptions{Page: 2}
30 ctx := context.Background()
31 comments, _, err := client.Repositories.ListComments(ctx, "o", "r", opt)
32 if err != nil {
33 t.Errorf("Repositories.ListComments returned error: %v", err)
34 }
35
36 want := []*RepositoryComment{{ID: Int64(1)}, {ID: Int64(2)}}
37 if !cmp.Equal(comments, want) {
38 t.Errorf("Repositories.ListComments returned %+v, want %+v", comments, want)
39 }
40
41 const methodName = "ListComments"
42 testBadOptions(t, methodName, func() (err error) {
43 _, _, err = client.Repositories.ListComments(ctx, "\n", "\n", opt)
44 return err
45 })
46
47 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
48 got, resp, err := client.Repositories.ListComments(ctx, "o", "r", opt)
49 if got != nil {
50 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
51 }
52 return resp, err
53 })
54 }
55
56 func TestRepositoriesService_ListComments_invalidOwner(t *testing.T) {
57 client, _, _, teardown := setup()
58 defer teardown()
59
60 ctx := context.Background()
61 _, _, err := client.Repositories.ListComments(ctx, "%", "%", nil)
62 testURLParseError(t, err)
63 }
64
65 func TestRepositoriesService_ListCommitComments(t *testing.T) {
66 client, mux, _, teardown := setup()
67 defer teardown()
68
69 mux.HandleFunc("/repos/o/r/commits/s/comments", func(w http.ResponseWriter, r *http.Request) {
70 testMethod(t, r, "GET")
71 testHeader(t, r, "Accept", mediaTypeReactionsPreview)
72 testFormValues(t, r, values{"page": "2"})
73 fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
74 })
75
76 opt := &ListOptions{Page: 2}
77 ctx := context.Background()
78 comments, _, err := client.Repositories.ListCommitComments(ctx, "o", "r", "s", opt)
79 if err != nil {
80 t.Errorf("Repositories.ListCommitComments returned error: %v", err)
81 }
82
83 want := []*RepositoryComment{{ID: Int64(1)}, {ID: Int64(2)}}
84 if !cmp.Equal(comments, want) {
85 t.Errorf("Repositories.ListCommitComments returned %+v, want %+v", comments, want)
86 }
87
88 const methodName = "ListCommitComments"
89 testBadOptions(t, methodName, func() (err error) {
90 _, _, err = client.Repositories.ListCommitComments(ctx, "\n", "\n", "\n", opt)
91 return err
92 })
93
94 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
95 got, resp, err := client.Repositories.ListCommitComments(ctx, "o", "r", "s", opt)
96 if got != nil {
97 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
98 }
99 return resp, err
100 })
101 }
102
103 func TestRepositoriesService_ListCommitComments_invalidOwner(t *testing.T) {
104 client, _, _, teardown := setup()
105 defer teardown()
106
107 ctx := context.Background()
108 _, _, err := client.Repositories.ListCommitComments(ctx, "%", "%", "%", nil)
109 testURLParseError(t, err)
110 }
111
112 func TestRepositoriesService_CreateComment(t *testing.T) {
113 client, mux, _, teardown := setup()
114 defer teardown()
115
116 input := &RepositoryComment{Body: String("b")}
117
118 mux.HandleFunc("/repos/o/r/commits/s/comments", func(w http.ResponseWriter, r *http.Request) {
119 v := new(RepositoryComment)
120 json.NewDecoder(r.Body).Decode(v)
121
122 testMethod(t, r, "POST")
123 if !cmp.Equal(v, input) {
124 t.Errorf("Request body = %+v, want %+v", v, input)
125 }
126
127 fmt.Fprint(w, `{"id":1}`)
128 })
129
130 ctx := context.Background()
131 comment, _, err := client.Repositories.CreateComment(ctx, "o", "r", "s", input)
132 if err != nil {
133 t.Errorf("Repositories.CreateComment returned error: %v", err)
134 }
135
136 want := &RepositoryComment{ID: Int64(1)}
137 if !cmp.Equal(comment, want) {
138 t.Errorf("Repositories.CreateComment returned %+v, want %+v", comment, want)
139 }
140
141 const methodName = "CreateComment"
142 testBadOptions(t, methodName, func() (err error) {
143 _, _, err = client.Repositories.CreateComment(ctx, "\n", "\n", "\n", input)
144 return err
145 })
146
147 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
148 got, resp, err := client.Repositories.CreateComment(ctx, "o", "r", "s", input)
149 if got != nil {
150 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
151 }
152 return resp, err
153 })
154 }
155
156 func TestRepositoriesService_CreateComment_invalidOwner(t *testing.T) {
157 client, _, _, teardown := setup()
158 defer teardown()
159
160 ctx := context.Background()
161 _, _, err := client.Repositories.CreateComment(ctx, "%", "%", "%", nil)
162 testURLParseError(t, err)
163 }
164
165 func TestRepositoriesService_GetComment(t *testing.T) {
166 client, mux, _, teardown := setup()
167 defer teardown()
168
169 mux.HandleFunc("/repos/o/r/comments/1", func(w http.ResponseWriter, r *http.Request) {
170 testMethod(t, r, "GET")
171 testHeader(t, r, "Accept", mediaTypeReactionsPreview)
172 fmt.Fprint(w, `{"id":1}`)
173 })
174
175 ctx := context.Background()
176 comment, _, err := client.Repositories.GetComment(ctx, "o", "r", 1)
177 if err != nil {
178 t.Errorf("Repositories.GetComment returned error: %v", err)
179 }
180
181 want := &RepositoryComment{ID: Int64(1)}
182 if !cmp.Equal(comment, want) {
183 t.Errorf("Repositories.GetComment returned %+v, want %+v", comment, want)
184 }
185
186 const methodName = "GetComment"
187 testBadOptions(t, methodName, func() (err error) {
188 _, _, err = client.Repositories.GetComment(ctx, "\n", "\n", -1)
189 return err
190 })
191
192 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
193 got, resp, err := client.Repositories.GetComment(ctx, "o", "r", 1)
194 if got != nil {
195 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
196 }
197 return resp, err
198 })
199 }
200
201 func TestRepositoriesService_GetComment_invalidOwner(t *testing.T) {
202 client, _, _, teardown := setup()
203 defer teardown()
204
205 ctx := context.Background()
206 _, _, err := client.Repositories.GetComment(ctx, "%", "%", 1)
207 testURLParseError(t, err)
208 }
209
210 func TestRepositoriesService_UpdateComment(t *testing.T) {
211 client, mux, _, teardown := setup()
212 defer teardown()
213
214 input := &RepositoryComment{Body: String("b")}
215
216 mux.HandleFunc("/repos/o/r/comments/1", func(w http.ResponseWriter, r *http.Request) {
217 v := new(RepositoryComment)
218 json.NewDecoder(r.Body).Decode(v)
219
220 testMethod(t, r, "PATCH")
221 if !cmp.Equal(v, input) {
222 t.Errorf("Request body = %+v, want %+v", v, input)
223 }
224
225 fmt.Fprint(w, `{"id":1}`)
226 })
227
228 ctx := context.Background()
229 comment, _, err := client.Repositories.UpdateComment(ctx, "o", "r", 1, input)
230 if err != nil {
231 t.Errorf("Repositories.UpdateComment returned error: %v", err)
232 }
233
234 want := &RepositoryComment{ID: Int64(1)}
235 if !cmp.Equal(comment, want) {
236 t.Errorf("Repositories.UpdateComment returned %+v, want %+v", comment, want)
237 }
238
239 const methodName = "UpdateComment"
240 testBadOptions(t, methodName, func() (err error) {
241 _, _, err = client.Repositories.UpdateComment(ctx, "\n", "\n", -1, input)
242 return err
243 })
244
245 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
246 got, resp, err := client.Repositories.UpdateComment(ctx, "o", "r", 1, input)
247 if got != nil {
248 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
249 }
250 return resp, err
251 })
252 }
253
254 func TestRepositoriesService_UpdateComment_invalidOwner(t *testing.T) {
255 client, _, _, teardown := setup()
256 defer teardown()
257
258 ctx := context.Background()
259 _, _, err := client.Repositories.UpdateComment(ctx, "%", "%", 1, nil)
260 testURLParseError(t, err)
261 }
262
263 func TestRepositoriesService_DeleteComment(t *testing.T) {
264 client, mux, _, teardown := setup()
265 defer teardown()
266
267 mux.HandleFunc("/repos/o/r/comments/1", func(w http.ResponseWriter, r *http.Request) {
268 testMethod(t, r, "DELETE")
269 })
270
271 ctx := context.Background()
272 _, err := client.Repositories.DeleteComment(ctx, "o", "r", 1)
273 if err != nil {
274 t.Errorf("Repositories.DeleteComment returned error: %v", err)
275 }
276
277 const methodName = "DeleteComment"
278 testBadOptions(t, methodName, func() (err error) {
279 _, err = client.Repositories.DeleteComment(ctx, "\n", "\n", 1)
280 return err
281 })
282
283 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
284 return client.Repositories.DeleteComment(ctx, "o", "r", 1)
285 })
286 }
287
288 func TestRepositoriesService_DeleteComment_invalidOwner(t *testing.T) {
289 client, _, _, teardown := setup()
290 defer teardown()
291
292 ctx := context.Background()
293 _, err := client.Repositories.DeleteComment(ctx, "%", "%", 1)
294 testURLParseError(t, err)
295 }
296
297 func TestRepositoryComment_Marshal(t *testing.T) {
298 testJSONMarshal(t, &RepositoryComment{}, "{}")
299
300 r := &RepositoryComment{
301 HTMLURL: String("hurl"),
302 URL: String("url"),
303 ID: Int64(1),
304 NodeID: String("nid"),
305 CommitID: String("cid"),
306 User: &User{
307 Login: String("l"),
308 ID: Int64(1),
309 URL: String("u"),
310 AvatarURL: String("a"),
311 GravatarID: String("g"),
312 Name: String("n"),
313 Company: String("c"),
314 Blog: String("b"),
315 Location: String("l"),
316 Email: String("e"),
317 Hireable: Bool(true),
318 Bio: String("b"),
319 TwitterUsername: String("t"),
320 PublicRepos: Int(1),
321 Followers: Int(1),
322 Following: Int(1),
323 CreatedAt: &Timestamp{referenceTime},
324 SuspendedAt: &Timestamp{referenceTime},
325 },
326 Reactions: &Reactions{
327 TotalCount: Int(1),
328 PlusOne: Int(1),
329 MinusOne: Int(1),
330 Laugh: Int(1),
331 Confused: Int(1),
332 Heart: Int(1),
333 Hooray: Int(1),
334 Rocket: Int(1),
335 Eyes: Int(1),
336 URL: String("u"),
337 },
338 CreatedAt: &Timestamp{referenceTime},
339 UpdatedAt: &Timestamp{referenceTime},
340 Body: String("body"),
341 Path: String("path"),
342 Position: Int(1),
343 }
344
345 want := `{
346 "html_url": "hurl",
347 "url": "url",
348 "id": 1,
349 "node_id": "nid",
350 "commit_id": "cid",
351 "user": {
352 "login": "l",
353 "id": 1,
354 "avatar_url": "a",
355 "gravatar_id": "g",
356 "name": "n",
357 "company": "c",
358 "blog": "b",
359 "location": "l",
360 "email": "e",
361 "hireable": true,
362 "bio": "b",
363 "twitter_username": "t",
364 "public_repos": 1,
365 "followers": 1,
366 "following": 1,
367 "created_at": ` + referenceTimeStr + `,
368 "suspended_at": ` + referenceTimeStr + `,
369 "url": "u"
370 },
371 "reactions": {
372 "total_count": 1,
373 "+1": 1,
374 "-1": 1,
375 "laugh": 1,
376 "confused": 1,
377 "heart": 1,
378 "hooray": 1,
379 "rocket": 1,
380 "eyes": 1,
381 "url": "u"
382 },
383 "created_at": ` + referenceTimeStr + `,
384 "updated_at": ` + referenceTimeStr + `,
385 "body": "body",
386 "path": "path",
387 "position": 1
388 }`
389
390 testJSONMarshal(t, r, want)
391 }
392
View as plain text