github.com/google/go-github/v49@v49.1.0/github/issues_events_test.go (about) 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 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: &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 }