github.com/google/go-github/v33@v33.0.0/github/teams_members_test.go (about) 1 // Copyright 2018 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 TestTeamsService__ListTeamMembersByID(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/organizations/1/team/2/members", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 testFormValues(t, r, values{"role": "member", "page": "2"}) 24 fmt.Fprint(w, `[{"id":1}]`) 25 }) 26 27 opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}} 28 members, _, err := client.Teams.ListTeamMembersByID(context.Background(), 1, 2, opt) 29 if err != nil { 30 t.Errorf("Teams.ListTeamMembersByID returned error: %v", err) 31 } 32 33 want := []*User{{ID: Int64(1)}} 34 if !reflect.DeepEqual(members, want) { 35 t.Errorf("Teams.ListTeamMembersByID returned %+v, want %+v", members, want) 36 } 37 } 38 39 func TestTeamsService__ListTeamMembersByID_notFound(t *testing.T) { 40 client, mux, _, teardown := setup() 41 defer teardown() 42 43 mux.HandleFunc("/organizations/1/team/2/members", func(w http.ResponseWriter, r *http.Request) { 44 testMethod(t, r, "GET") 45 testFormValues(t, r, values{"role": "member", "page": "2"}) 46 w.WriteHeader(http.StatusNotFound) 47 }) 48 49 opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}} 50 members, resp, err := client.Teams.ListTeamMembersByID(context.Background(), 1, 2, opt) 51 if err == nil { 52 t.Errorf("Expected HTTP 404 response") 53 } 54 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 55 t.Errorf("Teams.ListTeamMembersByID returned status %d, want %d", got, want) 56 } 57 if members != nil { 58 t.Errorf("Teams.ListTeamMembersByID returned %+v, want nil", members) 59 } 60 } 61 62 func TestTeamsService__ListTeamMembersBySlug(t *testing.T) { 63 client, mux, _, teardown := setup() 64 defer teardown() 65 66 mux.HandleFunc("/orgs/o/teams/s/members", func(w http.ResponseWriter, r *http.Request) { 67 testMethod(t, r, "GET") 68 testFormValues(t, r, values{"role": "member", "page": "2"}) 69 fmt.Fprint(w, `[{"id":1}]`) 70 }) 71 72 opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}} 73 members, _, err := client.Teams.ListTeamMembersBySlug(context.Background(), "o", "s", opt) 74 if err != nil { 75 t.Errorf("Teams.ListTeamMembersBySlug returned error: %v", err) 76 } 77 78 want := []*User{{ID: Int64(1)}} 79 if !reflect.DeepEqual(members, want) { 80 t.Errorf("Teams.ListTeamMembersBySlug returned %+v, want %+v", members, want) 81 } 82 } 83 84 func TestTeamsService__ListTeamMembersBySlug_notFound(t *testing.T) { 85 client, mux, _, teardown := setup() 86 defer teardown() 87 88 mux.HandleFunc("/orgs/o/teams/s/members", func(w http.ResponseWriter, r *http.Request) { 89 testMethod(t, r, "GET") 90 testFormValues(t, r, values{"role": "member", "page": "2"}) 91 w.WriteHeader(http.StatusNotFound) 92 }) 93 94 opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}} 95 members, resp, err := client.Teams.ListTeamMembersBySlug(context.Background(), "o", "s", opt) 96 if err == nil { 97 t.Errorf("Expected HTTP 404 response") 98 } 99 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 100 t.Errorf("Teams.ListTeamMembersBySlug returned status %d, want %d", got, want) 101 } 102 if members != nil { 103 t.Errorf("Teams.ListTeamMembersBySlug returned %+v, want nil", members) 104 } 105 } 106 107 func TestTeamsService__ListTeamMembersBySlug_invalidOrg(t *testing.T) { 108 client, _, _, teardown := setup() 109 defer teardown() 110 111 _, _, err := client.Teams.ListTeamMembersBySlug(context.Background(), "%", "s", nil) 112 testURLParseError(t, err) 113 } 114 115 func TestTeamsService__GetTeamMembershipByID(t *testing.T) { 116 client, mux, _, teardown := setup() 117 defer teardown() 118 119 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 120 testMethod(t, r, "GET") 121 fmt.Fprint(w, `{"url":"u", "state":"active"}`) 122 }) 123 124 membership, _, err := client.Teams.GetTeamMembershipByID(context.Background(), 1, 2, "u") 125 if err != nil { 126 t.Errorf("Teams.GetTeamMembershipByID returned error: %v", err) 127 } 128 129 want := &Membership{URL: String("u"), State: String("active")} 130 if !reflect.DeepEqual(membership, want) { 131 t.Errorf("Teams.GetTeamMembershipByID returned %+v, want %+v", membership, want) 132 } 133 } 134 135 func TestTeamsService__GetTeamMembershipByID_notFound(t *testing.T) { 136 client, mux, _, teardown := setup() 137 defer teardown() 138 139 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 140 testMethod(t, r, "GET") 141 w.WriteHeader(http.StatusNotFound) 142 }) 143 144 membership, resp, err := client.Teams.GetTeamMembershipByID(context.Background(), 1, 2, "u") 145 if err == nil { 146 t.Errorf("Expected HTTP 404 response") 147 } 148 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 149 t.Errorf("Teams.GetTeamMembershipByID returned status %d, want %d", got, want) 150 } 151 if membership != nil { 152 t.Errorf("Teams.GetTeamMembershipByID returned %+v, want nil", membership) 153 } 154 } 155 156 func TestTeamsService__GetTeamMembershipBySlug(t *testing.T) { 157 client, mux, _, teardown := setup() 158 defer teardown() 159 160 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 161 testMethod(t, r, "GET") 162 fmt.Fprint(w, `{"url":"u", "state":"active"}`) 163 }) 164 165 membership, _, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "o", "s", "u") 166 if err != nil { 167 t.Errorf("Teams.GetTeamMembershipBySlug returned error: %v", err) 168 } 169 170 want := &Membership{URL: String("u"), State: String("active")} 171 if !reflect.DeepEqual(membership, want) { 172 t.Errorf("Teams.GetTeamMembershipBySlug returned %+v, want %+v", membership, want) 173 } 174 } 175 176 func TestTeamsService__GetTeamMembershipBySlug_notFound(t *testing.T) { 177 client, mux, _, teardown := setup() 178 defer teardown() 179 180 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 181 testMethod(t, r, "GET") 182 w.WriteHeader(http.StatusNotFound) 183 }) 184 185 membership, resp, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "o", "s", "u") 186 if err == nil { 187 t.Errorf("Expected HTTP 404 response") 188 } 189 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 190 t.Errorf("Teams.GetTeamMembershipBySlug returned status %d, want %d", got, want) 191 } 192 if membership != nil { 193 t.Errorf("Teams.GetTeamMembershipBySlug returned %+v, want nil", membership) 194 } 195 } 196 197 func TestTeamsService__GetTeamMembershipBySlug_invalidOrg(t *testing.T) { 198 client, _, _, teardown := setup() 199 defer teardown() 200 201 _, _, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "%s", "s", "u") 202 testURLParseError(t, err) 203 } 204 205 func TestTeamsService__AddTeamMembershipByID(t *testing.T) { 206 client, mux, _, teardown := setup() 207 defer teardown() 208 209 opt := &TeamAddTeamMembershipOptions{Role: "maintainer"} 210 211 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 212 v := new(TeamAddTeamMembershipOptions) 213 json.NewDecoder(r.Body).Decode(v) 214 215 testMethod(t, r, "PUT") 216 if !reflect.DeepEqual(v, opt) { 217 t.Errorf("Request body = %+v, want %+v", v, opt) 218 } 219 220 fmt.Fprint(w, `{"url":"u", "state":"pending"}`) 221 }) 222 223 membership, _, err := client.Teams.AddTeamMembershipByID(context.Background(), 1, 2, "u", opt) 224 if err != nil { 225 t.Errorf("Teams.AddTeamMembershipByID returned error: %v", err) 226 } 227 228 want := &Membership{URL: String("u"), State: String("pending")} 229 if !reflect.DeepEqual(membership, want) { 230 t.Errorf("Teams.AddTeamMembershipByID returned %+v, want %+v", membership, want) 231 } 232 } 233 234 func TestTeamsService__AddTeamMembershipByID_notFound(t *testing.T) { 235 client, mux, _, teardown := setup() 236 defer teardown() 237 238 opt := &TeamAddTeamMembershipOptions{Role: "maintainer"} 239 240 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 241 v := new(TeamAddTeamMembershipOptions) 242 json.NewDecoder(r.Body).Decode(v) 243 244 testMethod(t, r, "PUT") 245 if !reflect.DeepEqual(v, opt) { 246 t.Errorf("Request body = %+v, want %+v", v, opt) 247 } 248 249 w.WriteHeader(http.StatusNotFound) 250 }) 251 252 membership, resp, err := client.Teams.AddTeamMembershipByID(context.Background(), 1, 2, "u", opt) 253 if err == nil { 254 t.Errorf("Expected HTTP 404 response") 255 } 256 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 257 t.Errorf("Teams.AddTeamMembershipByID returned status %d, want %d", got, want) 258 } 259 if membership != nil { 260 t.Errorf("Teams.AddTeamMembershipByID returned %+v, want nil", membership) 261 } 262 } 263 264 func TestTeamsService__AddTeamMembershipBySlug(t *testing.T) { 265 client, mux, _, teardown := setup() 266 defer teardown() 267 268 opt := &TeamAddTeamMembershipOptions{Role: "maintainer"} 269 270 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 271 v := new(TeamAddTeamMembershipOptions) 272 json.NewDecoder(r.Body).Decode(v) 273 274 testMethod(t, r, "PUT") 275 if !reflect.DeepEqual(v, opt) { 276 t.Errorf("Request body = %+v, want %+v", v, opt) 277 } 278 279 fmt.Fprint(w, `{"url":"u", "state":"pending"}`) 280 }) 281 282 membership, _, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "o", "s", "u", opt) 283 if err != nil { 284 t.Errorf("Teams.AddTeamMembershipBySlug returned error: %v", err) 285 } 286 287 want := &Membership{URL: String("u"), State: String("pending")} 288 if !reflect.DeepEqual(membership, want) { 289 t.Errorf("Teams.AddTeamMembershipBySlug returned %+v, want %+v", membership, want) 290 } 291 } 292 293 func TestTeamsService__AddTeamMembershipBySlug_notFound(t *testing.T) { 294 client, mux, _, teardown := setup() 295 defer teardown() 296 297 opt := &TeamAddTeamMembershipOptions{Role: "maintainer"} 298 299 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 300 v := new(TeamAddTeamMembershipOptions) 301 json.NewDecoder(r.Body).Decode(v) 302 303 testMethod(t, r, "PUT") 304 if !reflect.DeepEqual(v, opt) { 305 t.Errorf("Request body = %+v, want %+v", v, opt) 306 } 307 308 w.WriteHeader(http.StatusNotFound) 309 }) 310 311 membership, resp, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "o", "s", "u", opt) 312 if err == nil { 313 t.Errorf("Expected HTTP 404 response") 314 } 315 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 316 t.Errorf("Teams.AddTeamMembershipBySlug returned status %d, want %d", got, want) 317 } 318 if membership != nil { 319 t.Errorf("Teams.AddTeamMembershipBySlug returned %+v, want nil", membership) 320 } 321 } 322 323 func TestTeamsService__AddTeamMembershipBySlug_invalidOrg(t *testing.T) { 324 client, _, _, teardown := setup() 325 defer teardown() 326 327 _, _, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "%", "s", "u", nil) 328 testURLParseError(t, err) 329 } 330 331 func TestTeamsService__RemoveTeamMembershipByID(t *testing.T) { 332 client, mux, _, teardown := setup() 333 defer teardown() 334 335 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 336 testMethod(t, r, "DELETE") 337 w.WriteHeader(http.StatusNoContent) 338 }) 339 340 _, err := client.Teams.RemoveTeamMembershipByID(context.Background(), 1, 2, "u") 341 if err != nil { 342 t.Errorf("Teams.RemoveTeamMembershipByID returned error: %v", err) 343 } 344 } 345 346 func TestTeamsService__RemoveTeamMembershipByID_notFound(t *testing.T) { 347 client, mux, _, teardown := setup() 348 defer teardown() 349 350 mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) { 351 testMethod(t, r, "DELETE") 352 w.WriteHeader(http.StatusNotFound) 353 }) 354 355 resp, err := client.Teams.RemoveTeamMembershipByID(context.Background(), 1, 2, "u") 356 if err == nil { 357 t.Errorf("Expected HTTP 404 response") 358 } 359 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 360 t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want) 361 } 362 } 363 364 func TestTeamsService__RemoveTeamMembershipBySlug(t *testing.T) { 365 client, mux, _, teardown := setup() 366 defer teardown() 367 368 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 369 testMethod(t, r, "DELETE") 370 w.WriteHeader(http.StatusNoContent) 371 }) 372 373 _, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "o", "s", "u") 374 if err != nil { 375 t.Errorf("Teams.RemoveTeamMembershipBySlug returned error: %v", err) 376 } 377 } 378 379 func TestTeamsService__RemoveTeamMembershipBySlug_notFound(t *testing.T) { 380 client, mux, _, teardown := setup() 381 defer teardown() 382 383 mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) { 384 testMethod(t, r, "DELETE") 385 w.WriteHeader(http.StatusNotFound) 386 }) 387 388 resp, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "o", "s", "u") 389 if err == nil { 390 t.Errorf("Expected HTTP 404 response") 391 } 392 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 393 t.Errorf("Teams.RemoveTeamMembershipBySlug returned status %d, want %d", got, want) 394 } 395 } 396 397 func TestTeamsService__RemoveTeamMembershipBySlug_invalidOrg(t *testing.T) { 398 client, _, _, teardown := setup() 399 defer teardown() 400 401 _, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "%", "s", "u") 402 testURLParseError(t, err) 403 } 404 405 func TestTeamsService__ListPendingTeamInvitationsByID(t *testing.T) { 406 client, mux, _, teardown := setup() 407 defer teardown() 408 409 mux.HandleFunc("/organizations/1/team/2/invitations", func(w http.ResponseWriter, r *http.Request) { 410 testMethod(t, r, "GET") 411 testFormValues(t, r, values{"page": "2"}) 412 fmt.Fprint(w, `[{"id":1}]`) 413 }) 414 415 opt := &ListOptions{Page: 2} 416 invitations, _, err := client.Teams.ListPendingTeamInvitationsByID(context.Background(), 1, 2, opt) 417 if err != nil { 418 t.Errorf("Teams.ListPendingTeamInvitationsByID returned error: %v", err) 419 } 420 421 want := []*Invitation{{ID: Int64(1)}} 422 if !reflect.DeepEqual(invitations, want) { 423 t.Errorf("Teams.ListPendingTeamInvitationsByID returned %+v, want %+v", invitations, want) 424 } 425 } 426 427 func TestTeamsService__ListPendingTeamInvitationsByID_notFound(t *testing.T) { 428 client, mux, _, teardown := setup() 429 defer teardown() 430 431 mux.HandleFunc("/organizations/1/team/2/invitations", func(w http.ResponseWriter, r *http.Request) { 432 testMethod(t, r, "GET") 433 testFormValues(t, r, values{"page": "2"}) 434 w.WriteHeader(http.StatusNotFound) 435 }) 436 437 opt := &ListOptions{Page: 2} 438 invitations, resp, err := client.Teams.ListPendingTeamInvitationsByID(context.Background(), 1, 2, opt) 439 if err == nil { 440 t.Errorf("Expected HTTP 404 response") 441 } 442 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 443 t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want) 444 } 445 if invitations != nil { 446 t.Errorf("Teams.RemoveTeamMembershipByID returned %+v, want nil", invitations) 447 } 448 } 449 450 func TestTeamsService__ListPendingTeamInvitationsBySlug(t *testing.T) { 451 client, mux, _, teardown := setup() 452 defer teardown() 453 454 mux.HandleFunc("/orgs/o/teams/s/invitations", func(w http.ResponseWriter, r *http.Request) { 455 testMethod(t, r, "GET") 456 testFormValues(t, r, values{"page": "2"}) 457 fmt.Fprint(w, `[{"id":1}]`) 458 }) 459 460 opt := &ListOptions{Page: 2} 461 invitations, _, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "o", "s", opt) 462 if err != nil { 463 t.Errorf("Teams.ListPendingTeamInvitationsByID returned error: %v", err) 464 } 465 466 want := []*Invitation{{ID: Int64(1)}} 467 if !reflect.DeepEqual(invitations, want) { 468 t.Errorf("Teams.ListPendingTeamInvitationsByID returned %+v, want %+v", invitations, want) 469 } 470 } 471 472 func TestTeamsService__ListPendingTeamInvitationsBySlug_notFound(t *testing.T) { 473 client, mux, _, teardown := setup() 474 defer teardown() 475 476 mux.HandleFunc("/orgs/o/teams/s/invitations", func(w http.ResponseWriter, r *http.Request) { 477 testMethod(t, r, "GET") 478 testFormValues(t, r, values{"page": "2"}) 479 w.WriteHeader(http.StatusNotFound) 480 }) 481 482 opt := &ListOptions{Page: 2} 483 invitations, resp, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "o", "s", opt) 484 if err == nil { 485 t.Errorf("Expected HTTP 404 response") 486 } 487 if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want { 488 t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want) 489 } 490 if invitations != nil { 491 t.Errorf("Teams.RemoveTeamMembershipByID returned %+v, want nil", invitations) 492 } 493 } 494 495 func TestTeamsService__ListPendingTeamInvitationsBySlug_invalidOrg(t *testing.T) { 496 client, _, _, teardown := setup() 497 defer teardown() 498 499 _, _, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "%", "s", nil) 500 testURLParseError(t, err) 501 }