github.com/google/go-github/v60@v60.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 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 RequestedTeam: &Team{ 274 ID: Int64(1), 275 NodeID: String("n"), 276 Name: String("n"), 277 Description: String("d"), 278 URL: String("u"), 279 Slug: String("s"), 280 Permission: String("p"), 281 Privacy: String("p"), 282 MembersCount: Int(1), 283 ReposCount: Int(1), 284 MembersURL: String("m"), 285 RepositoriesURL: String("r"), 286 Organization: &Organization{ 287 Login: String("l"), 288 ID: Int64(1), 289 NodeID: String("n"), 290 AvatarURL: String("a"), 291 HTMLURL: String("h"), 292 Name: String("n"), 293 Company: String("c"), 294 Blog: String("b"), 295 Location: String("l"), 296 Email: String("e"), 297 }, 298 Parent: &Team{ 299 ID: Int64(1), 300 NodeID: String("n"), 301 Name: String("n"), 302 Description: String("d"), 303 URL: String("u"), 304 Slug: String("s"), 305 Permission: String("p"), 306 Privacy: String("p"), 307 MembersCount: Int(1), 308 ReposCount: Int(1), 309 }, 310 LDAPDN: String("l"), 311 }, 312 PerformedViaGithubApp: &App{ 313 ID: Int64(1), 314 NodeID: String("n"), 315 Owner: &User{ 316 Login: String("l"), 317 ID: Int64(1), 318 NodeID: String("n"), 319 URL: String("u"), 320 ReposURL: String("r"), 321 EventsURL: String("e"), 322 AvatarURL: String("a"), 323 }, 324 Name: String("n"), 325 Description: String("d"), 326 HTMLURL: String("h"), 327 ExternalURL: String("u"), 328 }, 329 ReviewRequester: &User{ 330 Login: String("l"), 331 ID: Int64(1), 332 URL: String("u"), 333 AvatarURL: String("a"), 334 GravatarID: String("g"), 335 Name: String("n"), 336 Company: String("c"), 337 Blog: String("b"), 338 Location: String("l"), 339 Email: String("e"), 340 Hireable: Bool(true), 341 Bio: String("b"), 342 TwitterUsername: String("t"), 343 PublicRepos: Int(1), 344 Followers: Int(1), 345 Following: Int(1), 346 CreatedAt: &Timestamp{referenceTime}, 347 SuspendedAt: &Timestamp{referenceTime}, 348 }, 349 } 350 351 want := `{ 352 "id": 1, 353 "url": "url", 354 "actor": { 355 "login": "l", 356 "id": 1, 357 "avatar_url": "a", 358 "gravatar_id": "g", 359 "name": "n", 360 "company": "c", 361 "blog": "b", 362 "location": "l", 363 "email": "e", 364 "hireable": true, 365 "bio": "b", 366 "twitter_username": "t", 367 "public_repos": 1, 368 "followers": 1, 369 "following": 1, 370 "created_at": ` + referenceTimeStr + `, 371 "suspended_at": ` + referenceTimeStr + `, 372 "url": "u" 373 }, 374 "event": "event", 375 "created_at": ` + referenceTimeStr + `, 376 "issue": { 377 "id": 1 378 }, 379 "assignee": { 380 "login": "l", 381 "id": 1, 382 "avatar_url": "a", 383 "gravatar_id": "g", 384 "name": "n", 385 "company": "c", 386 "blog": "b", 387 "location": "l", 388 "email": "e", 389 "hireable": true, 390 "bio": "b", 391 "twitter_username": "t", 392 "public_repos": 1, 393 "followers": 1, 394 "following": 1, 395 "created_at": ` + referenceTimeStr + `, 396 "suspended_at": ` + referenceTimeStr + `, 397 "url": "u" 398 }, 399 "assigner": { 400 "login": "l", 401 "id": 1, 402 "avatar_url": "a", 403 "gravatar_id": "g", 404 "name": "n", 405 "company": "c", 406 "blog": "b", 407 "location": "l", 408 "email": "e", 409 "hireable": true, 410 "bio": "b", 411 "twitter_username": "t", 412 "public_repos": 1, 413 "followers": 1, 414 "following": 1, 415 "created_at": ` + referenceTimeStr + `, 416 "suspended_at": ` + referenceTimeStr + `, 417 "url": "u" 418 }, 419 "commit_id": "cid", 420 "milestone": { 421 "id": 1 422 }, 423 "label": { 424 "id": 1 425 }, 426 "rename": { 427 "from": "from", 428 "to": "to" 429 }, 430 "lock_reason": "lr", 431 "project_card": { 432 "id": 1 433 }, 434 "dismissed_review": { 435 "state": "state", 436 "review_id": 1, 437 "dismissal_message": "dm", 438 "dismissal_commit_id": "dcid" 439 }, 440 "requested_reviewer": { 441 "login": "l", 442 "id": 1, 443 "avatar_url": "a", 444 "gravatar_id": "g", 445 "name": "n", 446 "company": "c", 447 "blog": "b", 448 "location": "l", 449 "email": "e", 450 "hireable": true, 451 "bio": "b", 452 "twitter_username": "t", 453 "public_repos": 1, 454 "followers": 1, 455 "following": 1, 456 "created_at": ` + referenceTimeStr + `, 457 "suspended_at": ` + referenceTimeStr + `, 458 "url": "u" 459 }, 460 "requested_team": { 461 "id": 1, 462 "node_id": "n", 463 "name": "n", 464 "description": "d", 465 "url": "u", 466 "slug": "s", 467 "permission": "p", 468 "privacy": "p", 469 "members_count": 1, 470 "repos_count": 1, 471 "members_url": "m", 472 "repositories_url": "r", 473 "organization": { 474 "login": "l", 475 "id": 1, 476 "node_id": "n", 477 "avatar_url": "a", 478 "html_url": "h", 479 "name": "n", 480 "company": "c", 481 "blog": "b", 482 "location": "l", 483 "email": "e" 484 }, 485 "parent": { 486 "id": 1, 487 "node_id": "n", 488 "name": "n", 489 "description": "d", 490 "url": "u", 491 "slug": "s", 492 "permission": "p", 493 "privacy": "p", 494 "members_count": 1, 495 "repos_count": 1 496 }, 497 "ldap_dn": "l" 498 }, 499 "performed_via_github_app": { 500 "id": 1, 501 "node_id": "n", 502 "owner": { 503 "login": "l", 504 "id": 1, 505 "node_id": "n", 506 "url": "u", 507 "repos_url": "r", 508 "events_url": "e", 509 "avatar_url": "a" 510 }, 511 "name": "n", 512 "description": "d", 513 "html_url": "h", 514 "external_url": "u" 515 }, 516 "review_requester": { 517 "login": "l", 518 "id": 1, 519 "avatar_url": "a", 520 "gravatar_id": "g", 521 "name": "n", 522 "company": "c", 523 "blog": "b", 524 "location": "l", 525 "email": "e", 526 "hireable": true, 527 "bio": "b", 528 "twitter_username": "t", 529 "public_repos": 1, 530 "followers": 1, 531 "following": 1, 532 "created_at": ` + referenceTimeStr + `, 533 "suspended_at": ` + referenceTimeStr + `, 534 "url": "u" 535 } 536 }` 537 538 testJSONMarshal(t, u, want) 539 }