github.com/google/go-github/v68@v68.0.0/github/activity_events_test.go (about) 1 // Copyright 2013 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 "encoding/json" 11 "fmt" 12 "net/http" 13 "testing" 14 15 "github.com/google/go-cmp/cmp" 16 ) 17 18 func TestActivityService_ListEvents(t *testing.T) { 19 t.Parallel() 20 client, mux, _ := setup(t) 21 22 mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) { 23 testMethod(t, r, "GET") 24 testFormValues(t, r, values{ 25 "page": "2", 26 }) 27 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 28 }) 29 30 opt := &ListOptions{Page: 2} 31 ctx := context.Background() 32 events, _, err := client.Activity.ListEvents(ctx, opt) 33 if err != nil { 34 t.Errorf("Activities.ListEvents returned error: %v", err) 35 } 36 37 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 38 if !cmp.Equal(events, want) { 39 t.Errorf("Activities.ListEvents returned %+v, want %+v", events, want) 40 } 41 42 const methodName = "ListEvents" 43 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 44 got, resp, err := client.Activity.ListEvents(ctx, opt) 45 if got != nil { 46 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 47 } 48 return resp, err 49 }) 50 } 51 52 func TestActivityService_ListRepositoryEvents(t *testing.T) { 53 t.Parallel() 54 client, mux, _ := setup(t) 55 56 mux.HandleFunc("/repos/o/r/events", func(w http.ResponseWriter, r *http.Request) { 57 testMethod(t, r, "GET") 58 testFormValues(t, r, values{ 59 "page": "2", 60 }) 61 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 62 }) 63 64 opt := &ListOptions{Page: 2} 65 ctx := context.Background() 66 events, _, err := client.Activity.ListRepositoryEvents(ctx, "o", "r", opt) 67 if err != nil { 68 t.Errorf("Activities.ListRepositoryEvents returned error: %v", err) 69 } 70 71 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 72 if !cmp.Equal(events, want) { 73 t.Errorf("Activities.ListRepositoryEvents returned %+v, want %+v", events, want) 74 } 75 76 const methodName = "ListRepositoryEvents" 77 testBadOptions(t, methodName, func() (err error) { 78 _, _, err = client.Activity.ListRepositoryEvents(ctx, "\n", "\n", opt) 79 return err 80 }) 81 82 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 83 got, resp, err := client.Activity.ListRepositoryEvents(ctx, "o", "r", opt) 84 if got != nil { 85 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 86 } 87 return resp, err 88 }) 89 } 90 91 func TestActivityService_ListRepositoryEvents_invalidOwner(t *testing.T) { 92 t.Parallel() 93 client, _, _ := setup(t) 94 95 ctx := context.Background() 96 _, _, err := client.Activity.ListRepositoryEvents(ctx, "%", "%", nil) 97 testURLParseError(t, err) 98 } 99 100 func TestActivityService_ListIssueEventsForRepository(t *testing.T) { 101 t.Parallel() 102 client, mux, _ := setup(t) 103 104 mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) { 105 testMethod(t, r, "GET") 106 testFormValues(t, r, values{ 107 "page": "2", 108 }) 109 fmt.Fprint(w, `[{"id":1},{"id":2}]`) 110 }) 111 112 opt := &ListOptions{Page: 2} 113 ctx := context.Background() 114 events, _, err := client.Activity.ListIssueEventsForRepository(ctx, "o", "r", opt) 115 if err != nil { 116 t.Errorf("Activities.ListIssueEventsForRepository returned error: %v", err) 117 } 118 119 want := []*IssueEvent{{ID: Ptr(int64(1))}, {ID: Ptr(int64(2))}} 120 if !cmp.Equal(events, want) { 121 t.Errorf("Activities.ListIssueEventsForRepository returned %+v, want %+v", events, want) 122 } 123 124 const methodName = "ListIssueEventsForRepository" 125 testBadOptions(t, methodName, func() (err error) { 126 _, _, err = client.Activity.ListIssueEventsForRepository(ctx, "\n", "\n", opt) 127 return err 128 }) 129 130 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 131 got, resp, err := client.Activity.ListIssueEventsForRepository(ctx, "o", "r", opt) 132 if got != nil { 133 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 134 } 135 return resp, err 136 }) 137 } 138 139 func TestActivityService_ListIssueEventsForRepository_invalidOwner(t *testing.T) { 140 t.Parallel() 141 client, _, _ := setup(t) 142 143 ctx := context.Background() 144 _, _, err := client.Activity.ListIssueEventsForRepository(ctx, "%", "%", nil) 145 testURLParseError(t, err) 146 } 147 148 func TestActivityService_ListEventsForRepoNetwork(t *testing.T) { 149 t.Parallel() 150 client, mux, _ := setup(t) 151 152 mux.HandleFunc("/networks/o/r/events", func(w http.ResponseWriter, r *http.Request) { 153 testMethod(t, r, "GET") 154 testFormValues(t, r, values{ 155 "page": "2", 156 }) 157 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 158 }) 159 160 opt := &ListOptions{Page: 2} 161 ctx := context.Background() 162 events, _, err := client.Activity.ListEventsForRepoNetwork(ctx, "o", "r", opt) 163 if err != nil { 164 t.Errorf("Activities.ListEventsForRepoNetwork returned error: %v", err) 165 } 166 167 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 168 if !cmp.Equal(events, want) { 169 t.Errorf("Activities.ListEventsForRepoNetwork returned %+v, want %+v", events, want) 170 } 171 172 const methodName = "ListEventsForRepoNetwork" 173 testBadOptions(t, methodName, func() (err error) { 174 _, _, err = client.Activity.ListEventsForRepoNetwork(ctx, "\n", "\n", opt) 175 return err 176 }) 177 178 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 179 got, resp, err := client.Activity.ListEventsForRepoNetwork(ctx, "o", "r", opt) 180 if got != nil { 181 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 182 } 183 return resp, err 184 }) 185 } 186 187 func TestActivityService_ListEventsForRepoNetwork_invalidOwner(t *testing.T) { 188 t.Parallel() 189 client, _, _ := setup(t) 190 191 ctx := context.Background() 192 _, _, err := client.Activity.ListEventsForRepoNetwork(ctx, "%", "%", nil) 193 testURLParseError(t, err) 194 } 195 196 func TestActivityService_ListEventsForOrganization(t *testing.T) { 197 t.Parallel() 198 client, mux, _ := setup(t) 199 200 mux.HandleFunc("/orgs/o/events", func(w http.ResponseWriter, r *http.Request) { 201 testMethod(t, r, "GET") 202 testFormValues(t, r, values{ 203 "page": "2", 204 }) 205 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 206 }) 207 208 opt := &ListOptions{Page: 2} 209 ctx := context.Background() 210 events, _, err := client.Activity.ListEventsForOrganization(ctx, "o", opt) 211 if err != nil { 212 t.Errorf("Activities.ListEventsForOrganization returned error: %v", err) 213 } 214 215 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 216 if !cmp.Equal(events, want) { 217 t.Errorf("Activities.ListEventsForOrganization returned %+v, want %+v", events, want) 218 } 219 220 const methodName = "ListEventsForOrganization" 221 testBadOptions(t, methodName, func() (err error) { 222 _, _, err = client.Activity.ListEventsForOrganization(ctx, "\n", opt) 223 return err 224 }) 225 226 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 227 got, resp, err := client.Activity.ListEventsForOrganization(ctx, "o", opt) 228 if got != nil { 229 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 230 } 231 return resp, err 232 }) 233 } 234 235 func TestActivityService_ListEventsForOrganization_invalidOrg(t *testing.T) { 236 t.Parallel() 237 client, _, _ := setup(t) 238 239 ctx := context.Background() 240 _, _, err := client.Activity.ListEventsForOrganization(ctx, "%", nil) 241 testURLParseError(t, err) 242 } 243 244 func TestActivityService_ListEventsPerformedByUser_all(t *testing.T) { 245 t.Parallel() 246 client, mux, _ := setup(t) 247 248 mux.HandleFunc("/users/u/events", func(w http.ResponseWriter, r *http.Request) { 249 testMethod(t, r, "GET") 250 testFormValues(t, r, values{ 251 "page": "2", 252 }) 253 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 254 }) 255 256 opt := &ListOptions{Page: 2} 257 ctx := context.Background() 258 events, _, err := client.Activity.ListEventsPerformedByUser(ctx, "u", false, opt) 259 if err != nil { 260 t.Errorf("Events.ListPerformedByUser returned error: %v", err) 261 } 262 263 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 264 if !cmp.Equal(events, want) { 265 t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want) 266 } 267 268 const methodName = "ListEventsPerformedByUser" 269 testBadOptions(t, methodName, func() (err error) { 270 _, _, err = client.Activity.ListEventsPerformedByUser(ctx, "\n", false, opt) 271 return err 272 }) 273 274 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 275 got, resp, err := client.Activity.ListEventsPerformedByUser(ctx, "u", false, opt) 276 if got != nil { 277 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 278 } 279 return resp, err 280 }) 281 } 282 283 func TestActivityService_ListEventsPerformedByUser_publicOnly(t *testing.T) { 284 t.Parallel() 285 client, mux, _ := setup(t) 286 287 mux.HandleFunc("/users/u/events/public", func(w http.ResponseWriter, r *http.Request) { 288 testMethod(t, r, "GET") 289 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 290 }) 291 292 ctx := context.Background() 293 events, _, err := client.Activity.ListEventsPerformedByUser(ctx, "u", true, nil) 294 if err != nil { 295 t.Errorf("Events.ListPerformedByUser returned error: %v", err) 296 } 297 298 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 299 if !cmp.Equal(events, want) { 300 t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want) 301 } 302 } 303 304 func TestActivityService_ListEventsPerformedByUser_invalidUser(t *testing.T) { 305 t.Parallel() 306 client, _, _ := setup(t) 307 308 ctx := context.Background() 309 _, _, err := client.Activity.ListEventsPerformedByUser(ctx, "%", false, nil) 310 testURLParseError(t, err) 311 } 312 313 func TestActivityService_ListEventsReceivedByUser_all(t *testing.T) { 314 t.Parallel() 315 client, mux, _ := setup(t) 316 317 mux.HandleFunc("/users/u/received_events", func(w http.ResponseWriter, r *http.Request) { 318 testMethod(t, r, "GET") 319 testFormValues(t, r, values{ 320 "page": "2", 321 }) 322 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 323 }) 324 325 opt := &ListOptions{Page: 2} 326 ctx := context.Background() 327 events, _, err := client.Activity.ListEventsReceivedByUser(ctx, "u", false, opt) 328 if err != nil { 329 t.Errorf("Events.ListReceivedByUser returned error: %v", err) 330 } 331 332 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 333 if !cmp.Equal(events, want) { 334 t.Errorf("Events.ListReceivedUser returned %+v, want %+v", events, want) 335 } 336 337 const methodName = "ListEventsReceivedByUser" 338 testBadOptions(t, methodName, func() (err error) { 339 _, _, err = client.Activity.ListEventsReceivedByUser(ctx, "\n", false, opt) 340 return err 341 }) 342 343 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 344 got, resp, err := client.Activity.ListEventsReceivedByUser(ctx, "u", false, opt) 345 if got != nil { 346 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 347 } 348 return resp, err 349 }) 350 } 351 352 func TestActivityService_ListEventsReceivedByUser_publicOnly(t *testing.T) { 353 t.Parallel() 354 client, mux, _ := setup(t) 355 356 mux.HandleFunc("/users/u/received_events/public", func(w http.ResponseWriter, r *http.Request) { 357 testMethod(t, r, "GET") 358 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 359 }) 360 361 ctx := context.Background() 362 events, _, err := client.Activity.ListEventsReceivedByUser(ctx, "u", true, nil) 363 if err != nil { 364 t.Errorf("Events.ListReceivedByUser returned error: %v", err) 365 } 366 367 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 368 if !cmp.Equal(events, want) { 369 t.Errorf("Events.ListReceivedByUser returned %+v, want %+v", events, want) 370 } 371 } 372 373 func TestActivityService_ListEventsReceivedByUser_invalidUser(t *testing.T) { 374 t.Parallel() 375 client, _, _ := setup(t) 376 377 ctx := context.Background() 378 _, _, err := client.Activity.ListEventsReceivedByUser(ctx, "%", false, nil) 379 testURLParseError(t, err) 380 } 381 382 func TestActivityService_ListUserEventsForOrganization(t *testing.T) { 383 t.Parallel() 384 client, mux, _ := setup(t) 385 386 mux.HandleFunc("/users/u/events/orgs/o", func(w http.ResponseWriter, r *http.Request) { 387 testMethod(t, r, "GET") 388 testFormValues(t, r, values{ 389 "page": "2", 390 }) 391 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 392 }) 393 394 opt := &ListOptions{Page: 2} 395 ctx := context.Background() 396 events, _, err := client.Activity.ListUserEventsForOrganization(ctx, "o", "u", opt) 397 if err != nil { 398 t.Errorf("Activities.ListUserEventsForOrganization returned error: %v", err) 399 } 400 401 want := []*Event{{ID: Ptr("1")}, {ID: Ptr("2")}} 402 if !cmp.Equal(events, want) { 403 t.Errorf("Activities.ListUserEventsForOrganization returned %+v, want %+v", events, want) 404 } 405 406 const methodName = "ListUserEventsForOrganization" 407 testBadOptions(t, methodName, func() (err error) { 408 _, _, err = client.Activity.ListUserEventsForOrganization(ctx, "\n", "\n", opt) 409 return err 410 }) 411 412 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 413 got, resp, err := client.Activity.ListUserEventsForOrganization(ctx, "o", "u", opt) 414 if got != nil { 415 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 416 } 417 return resp, err 418 }) 419 } 420 421 func TestActivityService_EventParsePayload_typed(t *testing.T) { 422 t.Parallel() 423 raw := []byte(`{"type": "PushEvent","payload":{"push_id": 1}}`) 424 var event *Event 425 if err := json.Unmarshal(raw, &event); err != nil { 426 t.Fatalf("Unmarshal Event returned error: %v", err) 427 } 428 429 want := &PushEvent{PushID: Ptr(int64(1))} 430 got, err := event.ParsePayload() 431 if err != nil { 432 t.Fatalf("ParsePayload returned unexpected error: %v", err) 433 } 434 if !cmp.Equal(got, want) { 435 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 436 } 437 } 438 439 // TestEvent_Payload_untyped checks that unrecognized events are parsed to an 440 // interface{} value (instead of being discarded or throwing an error), for 441 // forward compatibility with new event types. 442 func TestActivityService_EventParsePayload_untyped(t *testing.T) { 443 t.Parallel() 444 raw := []byte(`{"type": "UnrecognizedEvent","payload":{"field": "val"}}`) 445 var event *Event 446 if err := json.Unmarshal(raw, &event); err != nil { 447 t.Fatalf("Unmarshal Event returned error: %v", err) 448 } 449 450 want := map[string]interface{}{"field": "val"} 451 got, err := event.ParsePayload() 452 if err != nil { 453 t.Fatalf("ParsePayload returned unexpected error: %v", err) 454 } 455 if !cmp.Equal(got, want) { 456 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 457 } 458 } 459 460 func TestActivityService_EventParsePayload_installation(t *testing.T) { 461 t.Parallel() 462 raw := []byte(`{"type": "PullRequestEvent","payload":{"installation":{"id":1}}}`) 463 var event *Event 464 if err := json.Unmarshal(raw, &event); err != nil { 465 t.Fatalf("Unmarshal Event returned error: %v", err) 466 } 467 468 want := &PullRequestEvent{Installation: &Installation{ID: Ptr(int64(1))}} 469 got, err := event.ParsePayload() 470 if err != nil { 471 t.Fatalf("ParsePayload returned unexpected error: %v", err) 472 } 473 if !cmp.Equal(got, want) { 474 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 475 } 476 }