github.com/google/go-github/v70@v70.0.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 t.Parallel() 19 client, mux, _ := setup(t) 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: Ptr(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 t.Parallel() 60 client, mux, _ := setup(t) 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: Ptr(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 t.Parallel() 100 client, mux, _ := setup(t) 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: Ptr(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 t.Parallel() 135 testJSONMarshal(t, &Rename{}, "{}") 136 137 u := &Rename{ 138 From: Ptr("from"), 139 To: Ptr("to"), 140 } 141 142 want := `{ 143 "from": "from", 144 "to": "to" 145 }` 146 147 testJSONMarshal(t, u, want) 148 } 149 150 func TestDismissedReview_Marshal(t *testing.T) { 151 t.Parallel() 152 testJSONMarshal(t, &DismissedReview{}, "{}") 153 154 u := &DismissedReview{ 155 State: Ptr("state"), 156 ReviewID: Ptr(int64(1)), 157 DismissalMessage: Ptr("dm"), 158 DismissalCommitID: Ptr("dcid"), 159 } 160 161 want := `{ 162 "state": "state", 163 "review_id": 1, 164 "dismissal_message": "dm", 165 "dismissal_commit_id": "dcid" 166 }` 167 168 testJSONMarshal(t, u, want) 169 } 170 171 func TestIssueEvent_Marshal(t *testing.T) { 172 t.Parallel() 173 testJSONMarshal(t, &IssueEvent{}, "{}") 174 175 u := &IssueEvent{ 176 ID: Ptr(int64(1)), 177 URL: Ptr("url"), 178 Actor: &User{ 179 Login: Ptr("l"), 180 ID: Ptr(int64(1)), 181 URL: Ptr("u"), 182 AvatarURL: Ptr("a"), 183 GravatarID: Ptr("g"), 184 Name: Ptr("n"), 185 Company: Ptr("c"), 186 Blog: Ptr("b"), 187 Location: Ptr("l"), 188 Email: Ptr("e"), 189 Hireable: Ptr(true), 190 Bio: Ptr("b"), 191 TwitterUsername: Ptr("t"), 192 PublicRepos: Ptr(1), 193 Followers: Ptr(1), 194 Following: Ptr(1), 195 CreatedAt: &Timestamp{referenceTime}, 196 SuspendedAt: &Timestamp{referenceTime}, 197 }, 198 Event: Ptr("event"), 199 CreatedAt: &Timestamp{referenceTime}, 200 Issue: &Issue{ID: Ptr(int64(1))}, 201 Assignee: &User{ 202 Login: Ptr("l"), 203 ID: Ptr(int64(1)), 204 URL: Ptr("u"), 205 AvatarURL: Ptr("a"), 206 GravatarID: Ptr("g"), 207 Name: Ptr("n"), 208 Company: Ptr("c"), 209 Blog: Ptr("b"), 210 Location: Ptr("l"), 211 Email: Ptr("e"), 212 Hireable: Ptr(true), 213 Bio: Ptr("b"), 214 TwitterUsername: Ptr("t"), 215 PublicRepos: Ptr(1), 216 Followers: Ptr(1), 217 Following: Ptr(1), 218 CreatedAt: &Timestamp{referenceTime}, 219 SuspendedAt: &Timestamp{referenceTime}, 220 }, 221 Assigner: &User{ 222 Login: Ptr("l"), 223 ID: Ptr(int64(1)), 224 URL: Ptr("u"), 225 AvatarURL: Ptr("a"), 226 GravatarID: Ptr("g"), 227 Name: Ptr("n"), 228 Company: Ptr("c"), 229 Blog: Ptr("b"), 230 Location: Ptr("l"), 231 Email: Ptr("e"), 232 Hireable: Ptr(true), 233 Bio: Ptr("b"), 234 TwitterUsername: Ptr("t"), 235 PublicRepos: Ptr(1), 236 Followers: Ptr(1), 237 Following: Ptr(1), 238 CreatedAt: &Timestamp{referenceTime}, 239 SuspendedAt: &Timestamp{referenceTime}, 240 }, 241 CommitID: Ptr("cid"), 242 Milestone: &Milestone{ID: Ptr(int64(1))}, 243 Label: &Label{ID: Ptr(int64(1))}, 244 Rename: &Rename{ 245 From: Ptr("from"), 246 To: Ptr("to"), 247 }, 248 LockReason: Ptr("lr"), 249 DismissedReview: &DismissedReview{ 250 State: Ptr("state"), 251 ReviewID: Ptr(int64(1)), 252 DismissalMessage: Ptr("dm"), 253 DismissalCommitID: Ptr("dcid"), 254 }, 255 RequestedReviewer: &User{ 256 Login: Ptr("l"), 257 ID: Ptr(int64(1)), 258 URL: Ptr("u"), 259 AvatarURL: Ptr("a"), 260 GravatarID: Ptr("g"), 261 Name: Ptr("n"), 262 Company: Ptr("c"), 263 Blog: Ptr("b"), 264 Location: Ptr("l"), 265 Email: Ptr("e"), 266 Hireable: Ptr(true), 267 Bio: Ptr("b"), 268 TwitterUsername: Ptr("t"), 269 PublicRepos: Ptr(1), 270 Followers: Ptr(1), 271 Following: Ptr(1), 272 CreatedAt: &Timestamp{referenceTime}, 273 SuspendedAt: &Timestamp{referenceTime}, 274 }, 275 RequestedTeam: &Team{ 276 ID: Ptr(int64(1)), 277 NodeID: Ptr("n"), 278 Name: Ptr("n"), 279 Description: Ptr("d"), 280 URL: Ptr("u"), 281 Slug: Ptr("s"), 282 Permission: Ptr("p"), 283 Privacy: Ptr("p"), 284 MembersCount: Ptr(1), 285 ReposCount: Ptr(1), 286 MembersURL: Ptr("m"), 287 RepositoriesURL: Ptr("r"), 288 Organization: &Organization{ 289 Login: Ptr("l"), 290 ID: Ptr(int64(1)), 291 NodeID: Ptr("n"), 292 AvatarURL: Ptr("a"), 293 HTMLURL: Ptr("h"), 294 Name: Ptr("n"), 295 Company: Ptr("c"), 296 Blog: Ptr("b"), 297 Location: Ptr("l"), 298 Email: Ptr("e"), 299 }, 300 Parent: &Team{ 301 ID: Ptr(int64(1)), 302 NodeID: Ptr("n"), 303 Name: Ptr("n"), 304 Description: Ptr("d"), 305 URL: Ptr("u"), 306 Slug: Ptr("s"), 307 Permission: Ptr("p"), 308 Privacy: Ptr("p"), 309 MembersCount: Ptr(1), 310 ReposCount: Ptr(1), 311 }, 312 LDAPDN: Ptr("l"), 313 }, 314 PerformedViaGithubApp: &App{ 315 ID: Ptr(int64(1)), 316 NodeID: Ptr("n"), 317 Owner: &User{ 318 Login: Ptr("l"), 319 ID: Ptr(int64(1)), 320 NodeID: Ptr("n"), 321 URL: Ptr("u"), 322 ReposURL: Ptr("r"), 323 EventsURL: Ptr("e"), 324 AvatarURL: Ptr("a"), 325 }, 326 Name: Ptr("n"), 327 Description: Ptr("d"), 328 HTMLURL: Ptr("h"), 329 ExternalURL: Ptr("u"), 330 }, 331 ReviewRequester: &User{ 332 Login: Ptr("l"), 333 ID: Ptr(int64(1)), 334 URL: Ptr("u"), 335 AvatarURL: Ptr("a"), 336 GravatarID: Ptr("g"), 337 Name: Ptr("n"), 338 Company: Ptr("c"), 339 Blog: Ptr("b"), 340 Location: Ptr("l"), 341 Email: Ptr("e"), 342 Hireable: Ptr(true), 343 Bio: Ptr("b"), 344 TwitterUsername: Ptr("t"), 345 PublicRepos: Ptr(1), 346 Followers: Ptr(1), 347 Following: Ptr(1), 348 CreatedAt: &Timestamp{referenceTime}, 349 SuspendedAt: &Timestamp{referenceTime}, 350 }, 351 } 352 353 want := `{ 354 "id": 1, 355 "url": "url", 356 "actor": { 357 "login": "l", 358 "id": 1, 359 "avatar_url": "a", 360 "gravatar_id": "g", 361 "name": "n", 362 "company": "c", 363 "blog": "b", 364 "location": "l", 365 "email": "e", 366 "hireable": true, 367 "bio": "b", 368 "twitter_username": "t", 369 "public_repos": 1, 370 "followers": 1, 371 "following": 1, 372 "created_at": ` + referenceTimeStr + `, 373 "suspended_at": ` + referenceTimeStr + `, 374 "url": "u" 375 }, 376 "event": "event", 377 "created_at": ` + referenceTimeStr + `, 378 "issue": { 379 "id": 1 380 }, 381 "assignee": { 382 "login": "l", 383 "id": 1, 384 "avatar_url": "a", 385 "gravatar_id": "g", 386 "name": "n", 387 "company": "c", 388 "blog": "b", 389 "location": "l", 390 "email": "e", 391 "hireable": true, 392 "bio": "b", 393 "twitter_username": "t", 394 "public_repos": 1, 395 "followers": 1, 396 "following": 1, 397 "created_at": ` + referenceTimeStr + `, 398 "suspended_at": ` + referenceTimeStr + `, 399 "url": "u" 400 }, 401 "assigner": { 402 "login": "l", 403 "id": 1, 404 "avatar_url": "a", 405 "gravatar_id": "g", 406 "name": "n", 407 "company": "c", 408 "blog": "b", 409 "location": "l", 410 "email": "e", 411 "hireable": true, 412 "bio": "b", 413 "twitter_username": "t", 414 "public_repos": 1, 415 "followers": 1, 416 "following": 1, 417 "created_at": ` + referenceTimeStr + `, 418 "suspended_at": ` + referenceTimeStr + `, 419 "url": "u" 420 }, 421 "commit_id": "cid", 422 "milestone": { 423 "id": 1 424 }, 425 "label": { 426 "id": 1 427 }, 428 "rename": { 429 "from": "from", 430 "to": "to" 431 }, 432 "lock_reason": "lr", 433 "project_card": { 434 "id": 1 435 }, 436 "dismissed_review": { 437 "state": "state", 438 "review_id": 1, 439 "dismissal_message": "dm", 440 "dismissal_commit_id": "dcid" 441 }, 442 "requested_reviewer": { 443 "login": "l", 444 "id": 1, 445 "avatar_url": "a", 446 "gravatar_id": "g", 447 "name": "n", 448 "company": "c", 449 "blog": "b", 450 "location": "l", 451 "email": "e", 452 "hireable": true, 453 "bio": "b", 454 "twitter_username": "t", 455 "public_repos": 1, 456 "followers": 1, 457 "following": 1, 458 "created_at": ` + referenceTimeStr + `, 459 "suspended_at": ` + referenceTimeStr + `, 460 "url": "u" 461 }, 462 "requested_team": { 463 "id": 1, 464 "node_id": "n", 465 "name": "n", 466 "description": "d", 467 "url": "u", 468 "slug": "s", 469 "permission": "p", 470 "privacy": "p", 471 "members_count": 1, 472 "repos_count": 1, 473 "members_url": "m", 474 "repositories_url": "r", 475 "organization": { 476 "login": "l", 477 "id": 1, 478 "node_id": "n", 479 "avatar_url": "a", 480 "html_url": "h", 481 "name": "n", 482 "company": "c", 483 "blog": "b", 484 "location": "l", 485 "email": "e" 486 }, 487 "parent": { 488 "id": 1, 489 "node_id": "n", 490 "name": "n", 491 "description": "d", 492 "url": "u", 493 "slug": "s", 494 "permission": "p", 495 "privacy": "p", 496 "members_count": 1, 497 "repos_count": 1 498 }, 499 "ldap_dn": "l" 500 }, 501 "performed_via_github_app": { 502 "id": 1, 503 "node_id": "n", 504 "owner": { 505 "login": "l", 506 "id": 1, 507 "node_id": "n", 508 "url": "u", 509 "repos_url": "r", 510 "events_url": "e", 511 "avatar_url": "a" 512 }, 513 "name": "n", 514 "description": "d", 515 "html_url": "h", 516 "external_url": "u" 517 }, 518 "review_requester": { 519 "login": "l", 520 "id": 1, 521 "avatar_url": "a", 522 "gravatar_id": "g", 523 "name": "n", 524 "company": "c", 525 "blog": "b", 526 "location": "l", 527 "email": "e", 528 "hireable": true, 529 "bio": "b", 530 "twitter_username": "t", 531 "public_repos": 1, 532 "followers": 1, 533 "following": 1, 534 "created_at": ` + referenceTimeStr + `, 535 "suspended_at": ` + referenceTimeStr + `, 536 "url": "u" 537 } 538 }` 539 540 testJSONMarshal(t, u, want) 541 }