Files
go-github/github/orgs_members_test.go
James Maguire 28862d1ab8 refactor!: Pass org invitation requests by value (#4551)
BREAKING CHANGE: `OrganizationsService.CreateOrgInvitation` now takes `CreateOrgInvitationRequest` (by value); `CreateOrgInvitationRequest.TeamID` is now `TeamIDs`.
2026-09-16 07:34:07 -04:00

857 lines
27 KiB
Go

// Copyright 2013 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package github
import (
"fmt"
"net/http"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestOrganizationsService_ListMembers(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/members", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{
"filter": "2fa_disabled",
"role": "admin",
"page": "2",
})
fmt.Fprint(w, `[{"id":1}]`)
})
opt := &ListMembersOptions{
PublicOnly: false,
Filter: "2fa_disabled",
Role: "admin",
ListOptions: ListOptions{Page: 2},
}
ctx := t.Context()
members, _, err := client.Organizations.ListMembers(ctx, "o", opt)
if err != nil {
t.Errorf("Organizations.ListMembers returned error: %v", err)
}
want := []*User{{ID: new(int64(1))}}
if !cmp.Equal(members, want) {
t.Errorf("Organizations.ListMembers returned %+v, want %+v", members, want)
}
const methodName = "ListMembers"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.ListMembers(ctx, "\n", opt)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.ListMembers(ctx, "o", opt)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_ListMembers_invalidOrg(t *testing.T) {
t.Parallel()
client, _, _ := setup(t)
ctx := t.Context()
_, _, err := client.Organizations.ListMembers(ctx, "%", nil)
testURLParseError(t, err)
}
func TestOrganizationsService_ListMembers_public(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `[{"id":1}]`)
})
opt := &ListMembersOptions{PublicOnly: true}
ctx := t.Context()
members, _, err := client.Organizations.ListMembers(ctx, "o", opt)
if err != nil {
t.Errorf("Organizations.ListMembers returned error: %v", err)
}
want := []*User{{ID: new(int64(1))}}
if !cmp.Equal(members, want) {
t.Errorf("Organizations.ListMembers returned %+v, want %+v", members, want)
}
}
func TestOrganizationsService_IsMember(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
member, _, err := client.Organizations.IsMember(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.IsMember returned error: %v", err)
}
if want := true; member != want {
t.Errorf("Organizations.IsMember returned %+v, want %+v", member, want)
}
const methodName = "IsMember"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.IsMember(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.IsMember(ctx, "o", "u")
if got {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
// Ensure that a 404 response is interpreted as "false" and not an error.
func TestOrganizationsService_IsMember_notMember(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
w.WriteHeader(http.StatusNotFound)
})
ctx := t.Context()
member, _, err := client.Organizations.IsMember(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.IsMember returned error: %+v", err)
}
if want := false; member != want {
t.Errorf("Organizations.IsMember returned %+v, want %+v", member, want)
}
}
// Ensure that a 400 response is interpreted as an actual error, and not simply
// as "false" like the above case of a 404.
func TestOrganizationsService_IsMember_error(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
http.Error(w, "BadRequest", http.StatusBadRequest)
})
ctx := t.Context()
member, _, err := client.Organizations.IsMember(ctx, "o", "u")
if err == nil {
t.Error("Expected HTTP 400 response")
}
if want := false; member != want {
t.Errorf("Organizations.IsMember returned %+v, want %+v", member, want)
}
}
func TestOrganizationsService_IsMember_invalidOrg(t *testing.T) {
t.Parallel()
client, _, _ := setup(t)
ctx := t.Context()
_, _, err := client.Organizations.IsMember(ctx, "%", "u")
testURLParseError(t, err)
}
func TestOrganizationsService_IsPublicMember(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
member, _, err := client.Organizations.IsPublicMember(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.IsPublicMember returned error: %v", err)
}
if want := true; member != want {
t.Errorf("Organizations.IsPublicMember returned %+v, want %+v", member, want)
}
const methodName = "IsPublicMember"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.IsPublicMember(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.IsPublicMember(ctx, "o", "u")
if got {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
// Ensure that a 404 response is interpreted as "false" and not an error.
func TestOrganizationsService_IsPublicMember_notMember(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
w.WriteHeader(http.StatusNotFound)
})
ctx := t.Context()
member, _, err := client.Organizations.IsPublicMember(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.IsPublicMember returned error: %v", err)
}
if want := false; member != want {
t.Errorf("Organizations.IsPublicMember returned %+v, want %+v", member, want)
}
}
// Ensure that a 400 response is interpreted as an actual error, and not simply
// as "false" like the above case of a 404.
func TestOrganizationsService_IsPublicMember_error(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
http.Error(w, "BadRequest", http.StatusBadRequest)
})
ctx := t.Context()
member, _, err := client.Organizations.IsPublicMember(ctx, "o", "u")
if err == nil {
t.Error("Expected HTTP 400 response")
}
if want := false; member != want {
t.Errorf("Organizations.IsPublicMember returned %+v, want %+v", member, want)
}
}
func TestOrganizationsService_IsPublicMember_invalidOrg(t *testing.T) {
t.Parallel()
client, _, _ := setup(t)
ctx := t.Context()
_, _, err := client.Organizations.IsPublicMember(ctx, "%", "u")
testURLParseError(t, err)
}
func TestOrganizationsService_RemoveMember(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/members/u", func(_ http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
})
ctx := t.Context()
_, err := client.Organizations.RemoveMember(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.RemoveMember returned error: %v", err)
}
const methodName = "RemoveMember"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Organizations.RemoveMember(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Organizations.RemoveMember(ctx, "o", "u")
})
}
func TestOrganizationsService_CancelInvite(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/invitations/1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Organizations.CancelInvite(ctx, "o", 1)
if err != nil {
t.Errorf("Organizations.CancelInvite returned error: %v", err)
}
const methodName = "CancelInvite"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Organizations.CancelInvite(ctx, "\n", 1)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Organizations.CancelInvite(ctx, "o", 1)
})
}
func TestOrganizationsService_RemoveMember_invalidOrg(t *testing.T) {
t.Parallel()
client, _, _ := setup(t)
ctx := t.Context()
_, err := client.Organizations.RemoveMember(ctx, "%", "u")
testURLParseError(t, err)
}
func TestOrganizationsService_PublicizeMembership(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members/u", func(_ http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
})
ctx := t.Context()
_, err := client.Organizations.PublicizeMembership(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.PublicizeMembership returned error: %v", err)
}
const methodName = "PublicizeMembership"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Organizations.PublicizeMembership(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Organizations.PublicizeMembership(ctx, "o", "u")
})
}
func TestOrganizationsService_ConcealMembership(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/public_members/u", func(_ http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
})
ctx := t.Context()
_, err := client.Organizations.ConcealMembership(ctx, "o", "u")
if err != nil {
t.Errorf("Organizations.ConcealMembership returned error: %v", err)
}
const methodName = "ConcealMembership"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Organizations.ConcealMembership(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Organizations.ConcealMembership(ctx, "o", "u")
})
}
func TestOrganizationsService_ListOrgMemberships(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/user/memberships/orgs", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{
"state": "active",
"page": "2",
})
fmt.Fprint(w, `[{"url":"u"}]`)
})
opt := &ListOrgMembershipsOptions{
State: "active",
ListOptions: ListOptions{Page: 2},
}
ctx := t.Context()
memberships, _, err := client.Organizations.ListOrgMemberships(ctx, opt)
if err != nil {
t.Errorf("Organizations.ListOrgMemberships returned error: %v", err)
}
want := []*Membership{{URL: new("u")}}
if !cmp.Equal(memberships, want) {
t.Errorf("Organizations.ListOrgMemberships returned %+v, want %+v", memberships, want)
}
const methodName = "ListOrgMemberships"
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.ListOrgMemberships(ctx, opt)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_GetOrgMembership_AuthenticatedUser(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/user/memberships/orgs/o", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"url":"u"}`)
})
ctx := t.Context()
membership, _, err := client.Organizations.GetOrgMembership(ctx, "", "o")
if err != nil {
t.Errorf("Organizations.GetOrgMembership returned error: %v", err)
}
want := &Membership{URL: new("u")}
if !cmp.Equal(membership, want) {
t.Errorf("Organizations.GetOrgMembership returned %+v, want %+v", membership, want)
}
const methodName = "GetOrgMembership"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.GetOrgMembership(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.GetOrgMembership(ctx, "", "o")
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_GetOrgMembership_SpecifiedUser(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/memberships/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"url":"u"}`)
})
ctx := t.Context()
membership, _, err := client.Organizations.GetOrgMembership(ctx, "u", "o")
if err != nil {
t.Errorf("Organizations.GetOrgMembership returned error: %v", err)
}
want := &Membership{URL: new("u")}
if !cmp.Equal(membership, want) {
t.Errorf("Organizations.GetOrgMembership returned %+v, want %+v", membership, want)
}
}
func TestOrganizationsService_EditOrgMembership_AuthenticatedUser(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := &Membership{State: new("active")}
mux.HandleFunc("/user/memberships/orgs/o", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PATCH")
testJSONBody(t, r, input)
fmt.Fprint(w, `{"url":"u"}`)
})
ctx := t.Context()
membership, _, err := client.Organizations.EditOrgMembership(ctx, "", "o", input)
if err != nil {
t.Errorf("Organizations.EditOrgMembership returned error: %v", err)
}
want := &Membership{URL: new("u")}
if !cmp.Equal(membership, want) {
t.Errorf("Organizations.EditOrgMembership returned %+v, want %+v", membership, want)
}
const methodName = "EditOrgMembership"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.EditOrgMembership(ctx, "\n", "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.EditOrgMembership(ctx, "", "o", input)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_EditOrgMembership_SpecifiedUser(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := &Membership{State: new("active")}
mux.HandleFunc("/orgs/o/memberships/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
testJSONBody(t, r, input)
fmt.Fprint(w, `{"url":"u"}`)
})
ctx := t.Context()
membership, _, err := client.Organizations.EditOrgMembership(ctx, "u", "o", input)
if err != nil {
t.Errorf("Organizations.EditOrgMembership returned error: %v", err)
}
want := &Membership{URL: new("u")}
if !cmp.Equal(membership, want) {
t.Errorf("Organizations.EditOrgMembership returned %+v, want %+v", membership, want)
}
}
func TestOrganizationsService_RemoveOrgMembership(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/memberships/u", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Organizations.RemoveOrgMembership(ctx, "u", "o")
if err != nil {
t.Errorf("Organizations.RemoveOrgMembership returned error: %v", err)
}
const methodName = "RemoveOrgMembership"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Organizations.RemoveOrgMembership(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Organizations.RemoveOrgMembership(ctx, "u", "o")
})
}
func TestOrganizationsService_ListPendingOrgInvitations(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/invitations", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{"page": "1"})
fmt.Fprint(w, `[
{
"id": 1,
"login": "monalisa",
"email": "octocat@github.com",
"role": "direct_member",
"created_at": `+referenceTimeStr+`,
"inviter": {
"login": "other_user",
"id": 1,
"avatar_url": "https://github.com/images/error/other_user_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/other_user",
"html_url": "https://github.com/other_user",
"followers_url": "https://api.github.com/users/other_user/followers",
"following_url": "https://api.github.com/users/other_user/following/other_user",
"gists_url": "https://api.github.com/users/other_user/gists/gist_id",
"starred_url": "https://api.github.com/users/other_user/starred/owner/repo",
"subscriptions_url": "https://api.github.com/users/other_user/subscriptions",
"organizations_url": "https://api.github.com/users/other_user/orgs",
"repos_url": "https://api.github.com/users/other_user/repos",
"events_url": "https://api.github.com/users/other_user/events/privacy",
"received_events_url": "https://api.github.com/users/other_user/received_events/privacy",
"type": "User",
"site_admin": false
},
"team_count": 2,
"invitation_team_url": "https://api.github.com/organizations/2/invitations/1/teams"
}
]`)
})
opt := &ListOptions{Page: 1}
ctx := t.Context()
invitations, _, err := client.Organizations.ListPendingOrgInvitations(ctx, "o", opt)
if err != nil {
t.Errorf("Organizations.ListPendingOrgInvitations returned error: %v", err)
}
want := []*Invitation{
{
ID: new(int64(1)),
Login: new("monalisa"),
Email: new("octocat@github.com"),
Role: new("direct_member"),
CreatedAt: &referenceTimestamp,
Inviter: &User{
Login: new("other_user"),
ID: new(int64(1)),
AvatarURL: new("https://github.com/images/error/other_user_happy.gif"),
GravatarID: new(""),
URL: new("https://api.github.com/users/other_user"),
HTMLURL: new("https://github.com/other_user"),
FollowersURL: new("https://api.github.com/users/other_user/followers"),
FollowingURL: new("https://api.github.com/users/other_user/following/other_user"),
GistsURL: new("https://api.github.com/users/other_user/gists/gist_id"),
StarredURL: new("https://api.github.com/users/other_user/starred/owner/repo"),
SubscriptionsURL: new("https://api.github.com/users/other_user/subscriptions"),
OrganizationsURL: new("https://api.github.com/users/other_user/orgs"),
ReposURL: new("https://api.github.com/users/other_user/repos"),
EventsURL: new("https://api.github.com/users/other_user/events/privacy"),
ReceivedEventsURL: new("https://api.github.com/users/other_user/received_events/privacy"),
Type: new("User"),
SiteAdmin: new(false),
},
TeamCount: new(2),
InvitationTeamURL: new("https://api.github.com/organizations/2/invitations/1/teams"),
},
}
if !cmp.Equal(invitations, want) {
t.Errorf("Organizations.ListPendingOrgInvitations returned %+v, want %+v", invitations, want)
}
const methodName = "ListPendingOrgInvitations"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.ListPendingOrgInvitations(ctx, "\n", opt)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.ListPendingOrgInvitations(ctx, "o", opt)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_CreateOrgInvitation(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := CreateOrgInvitationRequest{
Email: new("octocat@github.com"),
Role: new("direct_member"),
TeamIDs: []int64{
12,
26,
},
}
mux.HandleFunc("/orgs/o/invitations", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
testJSONBody(t, r, input)
fmt.Fprintln(w, `{"email": "octocat@github.com"}`)
})
ctx := t.Context()
invitations, _, err := client.Organizations.CreateOrgInvitation(ctx, "o", input)
if err != nil {
t.Errorf("Organizations.CreateOrgInvitation returned error: %v", err)
}
want := &Invitation{Email: new("octocat@github.com")}
if !cmp.Equal(invitations, want) {
t.Errorf("Organizations.CreateOrgInvitation returned %+v, want %+v", invitations, want)
}
const methodName = "CreateOrgInvitation"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.CreateOrgInvitation(ctx, "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.CreateOrgInvitation(ctx, "o", input)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_ListOrgInvitationTeams(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/invitations/22/teams", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{"page": "1"})
fmt.Fprint(w, `[
{
"id": 1,
"url": "https://api.github.com/teams/1",
"name": "Justice League",
"slug": "justice-league",
"description": "A great team.",
"privacy": "closed",
"permission": "admin",
"members_url": "https://api.github.com/teams/1/members{/member}",
"repositories_url": "https://api.github.com/teams/1/repos"
}
]`)
})
opt := &ListOptions{Page: 1}
ctx := t.Context()
invitations, _, err := client.Organizations.ListOrgInvitationTeams(ctx, "o", "22", opt)
if err != nil {
t.Errorf("Organizations.ListOrgInvitationTeams returned error: %v", err)
}
want := []*Team{
{
ID: new(int64(1)),
URL: new("https://api.github.com/teams/1"),
Name: new("Justice League"),
Slug: new("justice-league"),
Description: new("A great team."),
Privacy: new("closed"),
Permission: new("admin"),
MembersURL: new("https://api.github.com/teams/1/members{/member}"),
RepositoriesURL: new("https://api.github.com/teams/1/repos"),
},
}
if !cmp.Equal(invitations, want) {
t.Errorf("Organizations.ListOrgInvitationTeams returned %+v, want %+v", invitations, want)
}
const methodName = "ListOrgInvitationTeams"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Organizations.ListOrgInvitationTeams(ctx, "\n", "\n", opt)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.ListOrgInvitationTeams(ctx, "o", "22", opt)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestOrganizationsService_ListFailedOrgInvitations(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/failed_invitations", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{"page": "2", "per_page": "1"})
fmt.Fprint(w, `[
{
"id":1,
"login":"monalisa",
"node_id":"MDQ6VXNlcjE=",
"email":"octocat@github.com",
"role":"direct_member",
"created_at":`+refTimeStr(1136178000)+`,
"failed_at":`+refTimeStr(1136178001)+`,
"failed_reason":"the reason",
"inviter":{
"login":"other_user",
"id":1,
"node_id":"MDQ6VXNlcjE=",
"avatar_url":"https://github.com/images/error/other_user_happy.gif",
"gravatar_id":"",
"url":"https://api.github.com/users/other_user",
"html_url":"https://github.com/other_user",
"followers_url":"https://api.github.com/users/other_user/followers",
"following_url":"https://api.github.com/users/other_user/following{/other_user}",
"gists_url":"https://api.github.com/users/other_user/gists{/gist_id}",
"starred_url":"https://api.github.com/users/other_user/starred{/owner}{/repo}",
"subscriptions_url":"https://api.github.com/users/other_user/subscriptions",
"organizations_url":"https://api.github.com/users/other_user/orgs",
"repos_url":"https://api.github.com/users/other_user/repos",
"events_url":"https://api.github.com/users/other_user/events{/privacy}",
"received_events_url":"https://api.github.com/users/other_user/received_events",
"type":"User",
"site_admin":false
},
"team_count":2,
"invitation_team_url":"https://api.github.com/organizations/2/invitations/1/teams"
}
]`)
})
opts := &ListOptions{Page: 2, PerPage: 1}
ctx := t.Context()
failedInvitations, _, err := client.Organizations.ListFailedOrgInvitations(ctx, "o", opts)
if err != nil {
t.Errorf("Organizations.ListFailedOrgInvitations returned error: %v", err)
}
want := []*Invitation{
{
ID: new(int64(1)),
Login: new("monalisa"),
NodeID: new("MDQ6VXNlcjE="),
Email: new("octocat@github.com"),
Role: new("direct_member"),
CreatedAt: refTimestamp(1136178000),
FailedAt: refTimestamp(1136178001),
FailedReason: new("the reason"),
Inviter: &User{
Login: new("other_user"),
ID: new(int64(1)),
NodeID: new("MDQ6VXNlcjE="),
AvatarURL: new("https://github.com/images/error/other_user_happy.gif"),
GravatarID: new(""),
URL: new("https://api.github.com/users/other_user"),
HTMLURL: new("https://github.com/other_user"),
FollowersURL: new("https://api.github.com/users/other_user/followers"),
FollowingURL: new("https://api.github.com/users/other_user/following{/other_user}"),
GistsURL: new("https://api.github.com/users/other_user/gists{/gist_id}"),
StarredURL: new("https://api.github.com/users/other_user/starred{/owner}{/repo}"),
SubscriptionsURL: new("https://api.github.com/users/other_user/subscriptions"),
OrganizationsURL: new("https://api.github.com/users/other_user/orgs"),
ReposURL: new("https://api.github.com/users/other_user/repos"),
EventsURL: new("https://api.github.com/users/other_user/events{/privacy}"),
ReceivedEventsURL: new("https://api.github.com/users/other_user/received_events"),
Type: new("User"),
SiteAdmin: new(false),
},
TeamCount: new(2),
InvitationTeamURL: new("https://api.github.com/organizations/2/invitations/1/teams"),
},
}
if !cmp.Equal(failedInvitations, want) {
t.Errorf("Organizations.ListFailedOrgInvitations returned %+v, want %+v", failedInvitations, want)
}
const methodName = "ListFailedOrgInvitations"
testBadOptions(t, methodName, func() error {
_, _, err := client.Organizations.ListFailedOrgInvitations(ctx, "\n", opts)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Organizations.ListFailedOrgInvitations(ctx, "o", opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}