github.com/google/go-github/v33@v33.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 "reflect" 14 "testing" 15 ) 16 17 func TestActivityService_ListEvents(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 testFormValues(t, r, values{ 24 "page": "2", 25 }) 26 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 27 }) 28 29 opt := &ListOptions{Page: 2} 30 events, _, err := client.Activity.ListEvents(context.Background(), opt) 31 if err != nil { 32 t.Errorf("Activities.ListEvents returned error: %v", err) 33 } 34 35 want := []*Event{{ID: String("1")}, {ID: String("2")}} 36 if !reflect.DeepEqual(events, want) { 37 t.Errorf("Activities.ListEvents returned %+v, want %+v", events, want) 38 } 39 } 40 41 func TestActivityService_ListRepositoryEvents(t *testing.T) { 42 client, mux, _, teardown := setup() 43 defer teardown() 44 45 mux.HandleFunc("/repos/o/r/events", func(w http.ResponseWriter, r *http.Request) { 46 testMethod(t, r, "GET") 47 testFormValues(t, r, values{ 48 "page": "2", 49 }) 50 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 51 }) 52 53 opt := &ListOptions{Page: 2} 54 events, _, err := client.Activity.ListRepositoryEvents(context.Background(), "o", "r", opt) 55 if err != nil { 56 t.Errorf("Activities.ListRepositoryEvents returned error: %v", err) 57 } 58 59 want := []*Event{{ID: String("1")}, {ID: String("2")}} 60 if !reflect.DeepEqual(events, want) { 61 t.Errorf("Activities.ListRepositoryEvents returned %+v, want %+v", events, want) 62 } 63 } 64 65 func TestActivityService_ListRepositoryEvents_invalidOwner(t *testing.T) { 66 client, _, _, teardown := setup() 67 defer teardown() 68 69 _, _, err := client.Activity.ListRepositoryEvents(context.Background(), "%", "%", nil) 70 testURLParseError(t, err) 71 } 72 73 func TestActivityService_ListIssueEventsForRepository(t *testing.T) { 74 client, mux, _, teardown := setup() 75 defer teardown() 76 77 mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) { 78 testMethod(t, r, "GET") 79 testFormValues(t, r, values{ 80 "page": "2", 81 }) 82 fmt.Fprint(w, `[{"id":1},{"id":2}]`) 83 }) 84 85 opt := &ListOptions{Page: 2} 86 events, _, err := client.Activity.ListIssueEventsForRepository(context.Background(), "o", "r", opt) 87 if err != nil { 88 t.Errorf("Activities.ListIssueEventsForRepository returned error: %v", err) 89 } 90 91 want := []*IssueEvent{{ID: Int64(1)}, {ID: Int64(2)}} 92 if !reflect.DeepEqual(events, want) { 93 t.Errorf("Activities.ListIssueEventsForRepository returned %+v, want %+v", events, want) 94 } 95 } 96 97 func TestActivityService_ListIssueEventsForRepository_invalidOwner(t *testing.T) { 98 client, _, _, teardown := setup() 99 defer teardown() 100 101 _, _, err := client.Activity.ListIssueEventsForRepository(context.Background(), "%", "%", nil) 102 testURLParseError(t, err) 103 } 104 105 func TestActivityService_ListEventsForRepoNetwork(t *testing.T) { 106 client, mux, _, teardown := setup() 107 defer teardown() 108 109 mux.HandleFunc("/networks/o/r/events", func(w http.ResponseWriter, r *http.Request) { 110 testMethod(t, r, "GET") 111 testFormValues(t, r, values{ 112 "page": "2", 113 }) 114 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 115 }) 116 117 opt := &ListOptions{Page: 2} 118 events, _, err := client.Activity.ListEventsForRepoNetwork(context.Background(), "o", "r", opt) 119 if err != nil { 120 t.Errorf("Activities.ListEventsForRepoNetwork returned error: %v", err) 121 } 122 123 want := []*Event{{ID: String("1")}, {ID: String("2")}} 124 if !reflect.DeepEqual(events, want) { 125 t.Errorf("Activities.ListEventsForRepoNetwork returned %+v, want %+v", events, want) 126 } 127 } 128 129 func TestActivityService_ListEventsForRepoNetwork_invalidOwner(t *testing.T) { 130 client, _, _, teardown := setup() 131 defer teardown() 132 133 _, _, err := client.Activity.ListEventsForRepoNetwork(context.Background(), "%", "%", nil) 134 testURLParseError(t, err) 135 } 136 137 func TestActivityService_ListEventsForOrganization(t *testing.T) { 138 client, mux, _, teardown := setup() 139 defer teardown() 140 141 mux.HandleFunc("/orgs/o/events", func(w http.ResponseWriter, r *http.Request) { 142 testMethod(t, r, "GET") 143 testFormValues(t, r, values{ 144 "page": "2", 145 }) 146 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 147 }) 148 149 opt := &ListOptions{Page: 2} 150 events, _, err := client.Activity.ListEventsForOrganization(context.Background(), "o", opt) 151 if err != nil { 152 t.Errorf("Activities.ListEventsForOrganization returned error: %v", err) 153 } 154 155 want := []*Event{{ID: String("1")}, {ID: String("2")}} 156 if !reflect.DeepEqual(events, want) { 157 t.Errorf("Activities.ListEventsForOrganization returned %+v, want %+v", events, want) 158 } 159 } 160 161 func TestActivityService_ListEventsForOrganization_invalidOrg(t *testing.T) { 162 client, _, _, teardown := setup() 163 defer teardown() 164 165 _, _, err := client.Activity.ListEventsForOrganization(context.Background(), "%", nil) 166 testURLParseError(t, err) 167 } 168 169 func TestActivityService_ListEventsPerformedByUser_all(t *testing.T) { 170 client, mux, _, teardown := setup() 171 defer teardown() 172 173 mux.HandleFunc("/users/u/events", func(w http.ResponseWriter, r *http.Request) { 174 testMethod(t, r, "GET") 175 testFormValues(t, r, values{ 176 "page": "2", 177 }) 178 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 179 }) 180 181 opt := &ListOptions{Page: 2} 182 events, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "u", false, opt) 183 if err != nil { 184 t.Errorf("Events.ListPerformedByUser returned error: %v", err) 185 } 186 187 want := []*Event{{ID: String("1")}, {ID: String("2")}} 188 if !reflect.DeepEqual(events, want) { 189 t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want) 190 } 191 } 192 193 func TestActivityService_ListEventsPerformedByUser_publicOnly(t *testing.T) { 194 client, mux, _, teardown := setup() 195 defer teardown() 196 197 mux.HandleFunc("/users/u/events/public", func(w http.ResponseWriter, r *http.Request) { 198 testMethod(t, r, "GET") 199 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 200 }) 201 202 events, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "u", true, nil) 203 if err != nil { 204 t.Errorf("Events.ListPerformedByUser returned error: %v", err) 205 } 206 207 want := []*Event{{ID: String("1")}, {ID: String("2")}} 208 if !reflect.DeepEqual(events, want) { 209 t.Errorf("Events.ListPerformedByUser returned %+v, want %+v", events, want) 210 } 211 } 212 213 func TestActivityService_ListEventsPerformedByUser_invalidUser(t *testing.T) { 214 client, _, _, teardown := setup() 215 defer teardown() 216 217 _, _, err := client.Activity.ListEventsPerformedByUser(context.Background(), "%", false, nil) 218 testURLParseError(t, err) 219 } 220 221 func TestActivityService_ListEventsReceivedByUser_all(t *testing.T) { 222 client, mux, _, teardown := setup() 223 defer teardown() 224 225 mux.HandleFunc("/users/u/received_events", func(w http.ResponseWriter, r *http.Request) { 226 testMethod(t, r, "GET") 227 testFormValues(t, r, values{ 228 "page": "2", 229 }) 230 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 231 }) 232 233 opt := &ListOptions{Page: 2} 234 events, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "u", false, opt) 235 if err != nil { 236 t.Errorf("Events.ListReceivedByUser returned error: %v", err) 237 } 238 239 want := []*Event{{ID: String("1")}, {ID: String("2")}} 240 if !reflect.DeepEqual(events, want) { 241 t.Errorf("Events.ListReceivedUser returned %+v, want %+v", events, want) 242 } 243 } 244 245 func TestActivityService_ListEventsReceivedByUser_publicOnly(t *testing.T) { 246 client, mux, _, teardown := setup() 247 defer teardown() 248 249 mux.HandleFunc("/users/u/received_events/public", func(w http.ResponseWriter, r *http.Request) { 250 testMethod(t, r, "GET") 251 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 252 }) 253 254 events, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "u", true, nil) 255 if err != nil { 256 t.Errorf("Events.ListReceivedByUser returned error: %v", err) 257 } 258 259 want := []*Event{{ID: String("1")}, {ID: String("2")}} 260 if !reflect.DeepEqual(events, want) { 261 t.Errorf("Events.ListReceivedByUser returned %+v, want %+v", events, want) 262 } 263 } 264 265 func TestActivityService_ListEventsReceivedByUser_invalidUser(t *testing.T) { 266 client, _, _, teardown := setup() 267 defer teardown() 268 269 _, _, err := client.Activity.ListEventsReceivedByUser(context.Background(), "%", false, nil) 270 testURLParseError(t, err) 271 } 272 273 func TestActivityService_ListUserEventsForOrganization(t *testing.T) { 274 client, mux, _, teardown := setup() 275 defer teardown() 276 277 mux.HandleFunc("/users/u/events/orgs/o", func(w http.ResponseWriter, r *http.Request) { 278 testMethod(t, r, "GET") 279 testFormValues(t, r, values{ 280 "page": "2", 281 }) 282 fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) 283 }) 284 285 opt := &ListOptions{Page: 2} 286 events, _, err := client.Activity.ListUserEventsForOrganization(context.Background(), "o", "u", opt) 287 if err != nil { 288 t.Errorf("Activities.ListUserEventsForOrganization returned error: %v", err) 289 } 290 291 want := []*Event{{ID: String("1")}, {ID: String("2")}} 292 if !reflect.DeepEqual(events, want) { 293 t.Errorf("Activities.ListUserEventsForOrganization returned %+v, want %+v", events, want) 294 } 295 } 296 297 func TestActivityService_EventParsePayload_typed(t *testing.T) { 298 raw := []byte(`{"type": "PushEvent","payload":{"push_id": 1}}`) 299 var event *Event 300 if err := json.Unmarshal(raw, &event); err != nil { 301 t.Fatalf("Unmarshal Event returned error: %v", err) 302 } 303 304 want := &PushEvent{PushID: Int64(1)} 305 got, err := event.ParsePayload() 306 if err != nil { 307 t.Fatalf("ParsePayload returned unexpected error: %v", err) 308 } 309 if !reflect.DeepEqual(got, want) { 310 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 311 } 312 } 313 314 // TestEvent_Payload_untyped checks that unrecognized events are parsed to an 315 // interface{} value (instead of being discarded or throwing an error), for 316 // forward compatibility with new event types. 317 func TestActivityService_EventParsePayload_untyped(t *testing.T) { 318 raw := []byte(`{"type": "UnrecognizedEvent","payload":{"field": "val"}}`) 319 var event *Event 320 if err := json.Unmarshal(raw, &event); err != nil { 321 t.Fatalf("Unmarshal Event returned error: %v", err) 322 } 323 324 want := map[string]interface{}{"field": "val"} 325 got, err := event.ParsePayload() 326 if err != nil { 327 t.Fatalf("ParsePayload returned unexpected error: %v", err) 328 } 329 if !reflect.DeepEqual(got, want) { 330 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 331 } 332 } 333 334 func TestActivityService_EventParsePayload_installation(t *testing.T) { 335 raw := []byte(`{"type": "PullRequestEvent","payload":{"installation":{"id":1}}}`) 336 var event *Event 337 if err := json.Unmarshal(raw, &event); err != nil { 338 t.Fatalf("Unmarshal Event returned error: %v", err) 339 } 340 341 want := &PullRequestEvent{Installation: &Installation{ID: Int64(1)}} 342 got, err := event.ParsePayload() 343 if err != nil { 344 t.Fatalf("ParsePayload returned unexpected error: %v", err) 345 } 346 if !reflect.DeepEqual(got, want) { 347 t.Errorf("Event.ParsePayload returned %+v, want %+v", got, want) 348 } 349 }