github.com/google/go-github/v49@v49.1.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 client, mux, _, teardown := setup() 20 defer teardown() 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: String("1")}, {ID: String("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 client, mux, _, teardown := setup() 54 defer teardown() 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: String("1")}, {ID: String("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 client, _, _, teardown := setup() 93 defer teardown() 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 client, mux, _, teardown := setup() 102 defer teardown() 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: Int64(1)}, {ID: 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 client, _, _, teardown := setup() 141 defer teardown() 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 client, mux, _, teardown := setup() 150 defer teardown() 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: String("1")}, {ID: String("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 client, _, _, teardown := setup() 189 defer teardown() 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 client, mux, _, teardown := setup() 198 defer teardown() 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: String("1")}, {ID: String("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 client, _, _, teardown := setup() 237 defer teardown() 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 client, mux, _, teardown := setup() 246 defer teardown() 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: String("1")}, {ID: String("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 client, mux, _, teardown := setup() 285 defer teardown() 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: String("1")}, {ID: String("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 client, _, _, teardown := setup() 306 defer teardown() 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 client, mux, _, teardown := setup() 315 defer teardown() 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: String("1")}, {ID: String("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 client, mux, _, teardown := setup() 354 defer teardown() 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: String("1")}, {ID: String("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 client, _, _, teardown := setup() 375 defer teardown() 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 client, mux, _, teardown := setup() 384 defer teardown() 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: String("1")}, {ID: String("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 raw := []byte(`{"type": "PushEvent","payload":{"push_id": 1}}`) 423 var event *Event 424 if err := json.Unmarshal(raw, &event); err != nil { 425 t.Fatalf("Unmarshal Event returned error: %v", err) 426 } 427 428 want := &PushEvent{PushID: Int64(1)} 429 got, err := event.ParsePayload() 430 if err != nil { 431 t.Fatalf("ParsePayload returned unexpected error: %v", err) 432 } 433 if !cmp.Equal(got, want) { 434 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 435 } 436 } 437 438 // TestEvent_Payload_untyped checks that unrecognized events are parsed to an 439 // interface{} value (instead of being discarded or throwing an error), for 440 // forward compatibility with new event types. 441 func TestActivityService_EventParsePayload_untyped(t *testing.T) { 442 raw := []byte(`{"type": "UnrecognizedEvent","payload":{"field": "val"}}`) 443 var event *Event 444 if err := json.Unmarshal(raw, &event); err != nil { 445 t.Fatalf("Unmarshal Event returned error: %v", err) 446 } 447 448 want := map[string]interface{}{"field": "val"} 449 got, err := event.ParsePayload() 450 if err != nil { 451 t.Fatalf("ParsePayload returned unexpected error: %v", err) 452 } 453 if !cmp.Equal(got, want) { 454 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 455 } 456 } 457 458 func TestActivityService_EventParsePayload_installation(t *testing.T) { 459 raw := []byte(`{"type": "PullRequestEvent","payload":{"installation":{"id":1}}}`) 460 var event *Event 461 if err := json.Unmarshal(raw, &event); err != nil { 462 t.Fatalf("Unmarshal Event returned error: %v", err) 463 } 464 465 want := &PullRequestEvent{Installation: &Installation{ID: Int64(1)}} 466 got, err := event.ParsePayload() 467 if err != nil { 468 t.Fatalf("ParsePayload returned unexpected error: %v", err) 469 } 470 if !cmp.Equal(got, want) { 471 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 472 } 473 }