1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "fmt"
11 "net/http"
12 "testing"
13
14 "github.com/google/go-cmp/cmp"
15 )
16
17 func TestIssuesService_ListIssueEvents(t *testing.T) {
18 client, mux, _, teardown := setup()
19 defer teardown()
20
21 mux.HandleFunc("/repos/o/r/issues/1/events", func(w http.ResponseWriter, r *http.Request) {
22 testMethod(t, r, "GET")
23 testHeader(t, r, "Accept", mediaTypeProjectCardDetailsPreview)
24 testFormValues(t, r, values{
25 "page": "1",
26 "per_page": "2",
27 })
28 fmt.Fprint(w, `[{"id":1}]`)
29 })
30
31 opt := &ListOptions{Page: 1, PerPage: 2}
32 ctx := context.Background()
33 events, _, err := client.Issues.ListIssueEvents(ctx, "o", "r", 1, opt)
34 if err != nil {
35 t.Errorf("Issues.ListIssueEvents returned error: %v", err)
36 }
37
38 want := []*IssueEvent{{ID: Int64(1)}}
39 if !cmp.Equal(events, want) {
40 t.Errorf("Issues.ListIssueEvents returned %+v, want %+v", events, want)
41 }
42
43 const methodName = "ListIssueEvents"
44 testBadOptions(t, methodName, func() (err error) {
45 _, _, err = client.Issues.ListIssueEvents(ctx, "\n", "\n", -1, &ListOptions{})
46 return err
47 })
48
49 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
50 got, resp, err := client.Issues.ListIssueEvents(ctx, "o", "r", 1, nil)
51 if got != nil {
52 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
53 }
54 return resp, err
55 })
56 }
57
58 func TestIssuesService_ListRepositoryEvents(t *testing.T) {
59 client, mux, _, teardown := setup()
60 defer teardown()
61
62 mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) {
63 testMethod(t, r, "GET")
64 testFormValues(t, r, values{
65 "page": "1",
66 "per_page": "2",
67 })
68 fmt.Fprint(w, `[{"id":1}]`)
69 })
70
71 opt := &ListOptions{Page: 1, PerPage: 2}
72 ctx := context.Background()
73 events, _, err := client.Issues.ListRepositoryEvents(ctx, "o", "r", opt)
74 if err != nil {
75 t.Errorf("Issues.ListRepositoryEvents returned error: %v", err)
76 }
77
78 want := []*IssueEvent{{ID: Int64(1)}}
79 if !cmp.Equal(events, want) {
80 t.Errorf("Issues.ListRepositoryEvents returned %+v, want %+v", events, want)
81 }
82
83 const methodName = "ListRepositoryEvents"
84 testBadOptions(t, methodName, func() (err error) {
85 _, _, err = client.Issues.ListRepositoryEvents(ctx, "\n", "\n", &ListOptions{})
86 return err
87 })
88
89 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
90 got, resp, err := client.Issues.ListRepositoryEvents(ctx, "o", "r", nil)
91 if got != nil {
92 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
93 }
94 return resp, err
95 })
96 }
97
98 func TestIssuesService_GetEvent(t *testing.T) {
99 client, mux, _, teardown := setup()
100 defer teardown()
101
102 mux.HandleFunc("/repos/o/r/issues/events/1", func(w http.ResponseWriter, r *http.Request) {
103 testMethod(t, r, "GET")
104 fmt.Fprint(w, `{"id":1}`)
105 })
106
107 ctx := context.Background()
108 event, _, err := client.Issues.GetEvent(ctx, "o", "r", 1)
109 if err != nil {
110 t.Errorf("Issues.GetEvent returned error: %v", err)
111 }
112
113 want := &IssueEvent{ID: Int64(1)}
114 if !cmp.Equal(event, want) {
115 t.Errorf("Issues.GetEvent returned %+v, want %+v", event, want)
116 }
117
118 const methodName = "GetEvent"
119 testBadOptions(t, methodName, func() (err error) {
120 _, _, err = client.Issues.GetEvent(ctx, "\n", "\n", -1)
121 return err
122 })
123
124 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
125 got, resp, err := client.Issues.GetEvent(ctx, "o", "r", 1)
126 if got != nil {
127 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
128 }
129 return resp, err
130 })
131 }
132
133 func TestRename_Marshal(t *testing.T) {
134 testJSONMarshal(t, &Rename{}, "{}")
135
136 u := &Rename{
137 From: String("from"),
138 To: String("to"),
139 }
140
141 want := `{
142 "from": "from",
143 "to": "to"
144 }`
145
146 testJSONMarshal(t, u, want)
147 }
148
149 func TestDismissedReview_Marshal(t *testing.T) {
150 testJSONMarshal(t, &DismissedReview{}, "{}")
151
152 u := &DismissedReview{
153 State: String("state"),
154 ReviewID: Int64(1),
155 DismissalMessage: String("dm"),
156 DismissalCommitID: String("dcid"),
157 }
158
159 want := `{
160 "state": "state",
161 "review_id": 1,
162 "dismissal_message": "dm",
163 "dismissal_commit_id": "dcid"
164 }`
165
166 testJSONMarshal(t, u, want)
167 }
168
169 func TestIssueEvent_Marshal(t *testing.T) {
170 testJSONMarshal(t, &IssueEvent{}, "{}")
171
172 u := &IssueEvent{
173 ID: Int64(1),
174 URL: String("url"),
175 Actor: &User{
176 Login: String("l"),
177 ID: Int64(1),
178 URL: String("u"),
179 AvatarURL: String("a"),
180 GravatarID: String("g"),
181 Name: String("n"),
182 Company: String("c"),
183 Blog: String("b"),
184 Location: String("l"),
185 Email: String("e"),
186 Hireable: Bool(true),
187 Bio: String("b"),
188 TwitterUsername: String("t"),
189 PublicRepos: Int(1),
190 Followers: Int(1),
191 Following: Int(1),
192 CreatedAt: &Timestamp{referenceTime},
193 SuspendedAt: &Timestamp{referenceTime},
194 },
195 Event: String("event"),
196 CreatedAt: &Timestamp{referenceTime},
197 Issue: &Issue{ID: Int64(1)},
198 Assignee: &User{
199 Login: String("l"),
200 ID: Int64(1),
201 URL: String("u"),
202 AvatarURL: String("a"),
203 GravatarID: String("g"),
204 Name: String("n"),
205 Company: String("c"),
206 Blog: String("b"),
207 Location: String("l"),
208 Email: String("e"),
209 Hireable: Bool(true),
210 Bio: String("b"),
211 TwitterUsername: String("t"),
212 PublicRepos: Int(1),
213 Followers: Int(1),
214 Following: Int(1),
215 CreatedAt: &Timestamp{referenceTime},
216 SuspendedAt: &Timestamp{referenceTime},
217 },
218 Assigner: &User{
219 Login: String("l"),
220 ID: Int64(1),
221 URL: String("u"),
222 AvatarURL: String("a"),
223 GravatarID: String("g"),
224 Name: String("n"),
225 Company: String("c"),
226 Blog: String("b"),
227 Location: String("l"),
228 Email: String("e"),
229 Hireable: Bool(true),
230 Bio: String("b"),
231 TwitterUsername: String("t"),
232 PublicRepos: Int(1),
233 Followers: Int(1),
234 Following: Int(1),
235 CreatedAt: &Timestamp{referenceTime},
236 SuspendedAt: &Timestamp{referenceTime},
237 },
238 CommitID: String("cid"),
239 Milestone: &Milestone{ID: Int64(1)},
240 Label: &Label{ID: Int64(1)},
241 Rename: &Rename{
242 From: String("from"),
243 To: String("to"),
244 },
245 LockReason: String("lr"),
246 ProjectCard: &ProjectCard{ID: Int64(1)},
247 DismissedReview: &DismissedReview{
248 State: String("state"),
249 ReviewID: Int64(1),
250 DismissalMessage: String("dm"),
251 DismissalCommitID: String("dcid"),
252 },
253 RequestedReviewer: &User{
254 Login: String("l"),
255 ID: Int64(1),
256 URL: String("u"),
257 AvatarURL: String("a"),
258 GravatarID: String("g"),
259 Name: String("n"),
260 Company: String("c"),
261 Blog: String("b"),
262 Location: String("l"),
263 Email: String("e"),
264 Hireable: Bool(true),
265 Bio: String("b"),
266 TwitterUsername: String("t"),
267 PublicRepos: Int(1),
268 Followers: Int(1),
269 Following: Int(1),
270 CreatedAt: &Timestamp{referenceTime},
271 SuspendedAt: &Timestamp{referenceTime},
272 },
273 ReviewRequester: &User{
274 Login: String("l"),
275 ID: Int64(1),
276 URL: String("u"),
277 AvatarURL: String("a"),
278 GravatarID: String("g"),
279 Name: String("n"),
280 Company: String("c"),
281 Blog: String("b"),
282 Location: String("l"),
283 Email: String("e"),
284 Hireable: Bool(true),
285 Bio: String("b"),
286 TwitterUsername: String("t"),
287 PublicRepos: Int(1),
288 Followers: Int(1),
289 Following: Int(1),
290 CreatedAt: &Timestamp{referenceTime},
291 SuspendedAt: &Timestamp{referenceTime},
292 },
293 }
294
295 want := `{
296 "id": 1,
297 "url": "url",
298 "actor": {
299 "login": "l",
300 "id": 1,
301 "avatar_url": "a",
302 "gravatar_id": "g",
303 "name": "n",
304 "company": "c",
305 "blog": "b",
306 "location": "l",
307 "email": "e",
308 "hireable": true,
309 "bio": "b",
310 "twitter_username": "t",
311 "public_repos": 1,
312 "followers": 1,
313 "following": 1,
314 "created_at": ` + referenceTimeStr + `,
315 "suspended_at": ` + referenceTimeStr + `,
316 "url": "u"
317 },
318 "event": "event",
319 "created_at": ` + referenceTimeStr + `,
320 "issue": {
321 "id": 1
322 },
323 "assignee": {
324 "login": "l",
325 "id": 1,
326 "avatar_url": "a",
327 "gravatar_id": "g",
328 "name": "n",
329 "company": "c",
330 "blog": "b",
331 "location": "l",
332 "email": "e",
333 "hireable": true,
334 "bio": "b",
335 "twitter_username": "t",
336 "public_repos": 1,
337 "followers": 1,
338 "following": 1,
339 "created_at": ` + referenceTimeStr + `,
340 "suspended_at": ` + referenceTimeStr + `,
341 "url": "u"
342 },
343 "assigner": {
344 "login": "l",
345 "id": 1,
346 "avatar_url": "a",
347 "gravatar_id": "g",
348 "name": "n",
349 "company": "c",
350 "blog": "b",
351 "location": "l",
352 "email": "e",
353 "hireable": true,
354 "bio": "b",
355 "twitter_username": "t",
356 "public_repos": 1,
357 "followers": 1,
358 "following": 1,
359 "created_at": ` + referenceTimeStr + `,
360 "suspended_at": ` + referenceTimeStr + `,
361 "url": "u"
362 },
363 "commit_id": "cid",
364 "milestone": {
365 "id": 1
366 },
367 "label": {
368 "id": 1
369 },
370 "rename": {
371 "from": "from",
372 "to": "to"
373 },
374 "lock_reason": "lr",
375 "project_card": {
376 "id": 1
377 },
378 "dismissed_review": {
379 "state": "state",
380 "review_id": 1,
381 "dismissal_message": "dm",
382 "dismissal_commit_id": "dcid"
383 },
384 "requested_reviewer": {
385 "login": "l",
386 "id": 1,
387 "avatar_url": "a",
388 "gravatar_id": "g",
389 "name": "n",
390 "company": "c",
391 "blog": "b",
392 "location": "l",
393 "email": "e",
394 "hireable": true,
395 "bio": "b",
396 "twitter_username": "t",
397 "public_repos": 1,
398 "followers": 1,
399 "following": 1,
400 "created_at": ` + referenceTimeStr + `,
401 "suspended_at": ` + referenceTimeStr + `,
402 "url": "u"
403 },
404 "review_requester": {
405 "login": "l",
406 "id": 1,
407 "avatar_url": "a",
408 "gravatar_id": "g",
409 "name": "n",
410 "company": "c",
411 "blog": "b",
412 "location": "l",
413 "email": "e",
414 "hireable": true,
415 "bio": "b",
416 "twitter_username": "t",
417 "public_repos": 1,
418 "followers": 1,
419 "following": 1,
420 "created_at": ` + referenceTimeStr + `,
421 "suspended_at": ` + referenceTimeStr + `,
422 "url": "u"
423 }
424 }`
425
426 testJSONMarshal(t, u, want)
427 }
428
View as plain text