From e2b94468e88d433f7489f603b62be7f1546dca52 Mon Sep 17 00:00:00 2001 From: Will Norris Date: Thu, 30 May 2013 08:40:10 -0700 Subject: [PATCH] add last two team membership functions --- github/orgs.go | 30 ++++++++++++++ github/orgs_test.go | 97 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) diff --git a/github/orgs.go b/github/orgs.go index 641c223..2379d9a 100644 --- a/github/orgs.go +++ b/github/orgs.go @@ -277,6 +277,36 @@ func (s *OrganizationsService) DeleteTeam(team int) error { return err } +// ListTeamMembers lists all of the users who are members of the specified +// team. +// +// GitHub API docs: http://developer.github.com/v3/orgs/teams/#list-team-members +func (s *OrganizationsService) ListTeamMembers(team int) ([]User, error) { + url_ := fmt.Sprintf("teams/%v/members", team) + req, err := s.client.NewRequest("GET", url_, nil) + if err != nil { + return nil, err + } + + members := new([]User) + _, err = s.client.Do(req, members) + return *members, err +} + +// CheckTeamMembership checks if a user is a member of the specified team. +// +// GitHub API docs: http://developer.github.com/v3/orgs/teams/#get-team-member +func (s *OrganizationsService) CheckTeamMembership(team int, user string) (bool, error) { + url_ := fmt.Sprintf("teams/%v/members/%v", team, user) + req, err := s.client.NewRequest("GET", url_, nil) + if err != nil { + return false, err + } + + _, err = s.client.Do(req, nil) + return parseBoolResponse(err) +} + // AddTeamMember adds a user to a team. // // GitHub API docs: http://developer.github.com/v3/orgs/teams/#add-team-member diff --git a/github/orgs_test.go b/github/orgs_test.go index 425e512..7cbddb5 100644 --- a/github/orgs_test.go +++ b/github/orgs_test.go @@ -529,6 +529,103 @@ func TestOrganizationsService_DeleteTeam(t *testing.T) { } } +func TestOrganizationsService_ListTeamMembers(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/teams/1/members", func(w http.ResponseWriter, r *http.Request) { + if m := "GET"; m != r.Method { + t.Errorf("Request method = %v, want %v", r.Method, m) + } + fmt.Fprint(w, `[{"id":1}]`) + }) + + members, err := client.Organizations.ListTeamMembers(1) + if err != nil { + t.Errorf("Organizations.ListTeamMembers returned error: %v", err) + } + + want := []User{User{ID: 1}} + if !reflect.DeepEqual(members, want) { + t.Errorf("Organizations.ListTeamMembers returned %+v, want %+v", members, want) + } +} + +func TestOrganizationsService_CheckTeamMembership(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/teams/1/members/u", func(w http.ResponseWriter, r *http.Request) { + if m := "GET"; m != r.Method { + t.Errorf("Request method = %v, want %v", r.Method, m) + } + }) + + member, err := client.Organizations.CheckTeamMembership(1, "u") + if err != nil { + t.Errorf("Organizations.CheckTeamMembership returned error: %v", err) + } + want := true + if member != want { + t.Errorf("Organizations.CheckTeamMembership returned %+v, want %+v", member, want) + } +} + +// ensure that a 404 response is interpreted as "false" and not an error +func TestOrganizationsService_CheckTeamMembership_notMember(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/teams/1/members/u", func(w http.ResponseWriter, r *http.Request) { + if m := "GET"; m != r.Method { + t.Errorf("Request method = %v, want %v", r.Method, m) + } + w.WriteHeader(http.StatusNotFound) + }) + + member, err := client.Organizations.CheckTeamMembership(1, "u") + if err != nil { + t.Errorf("Organizations.CheckTeamMembership returned error: %+v", err) + } + want := false + if member != want { + t.Errorf("Organizations.CheckTeamMembership 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_CheckTeamMembership_error(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/teams/1/members/u", func(w http.ResponseWriter, r *http.Request) { + if m := "GET"; m != r.Method { + t.Errorf("Request method = %v, want %v", r.Method, m) + } + http.Error(w, "BadRequest", http.StatusBadRequest) + }) + + member, err := client.Organizations.CheckTeamMembership(1, "u") + if err == nil { + t.Errorf("Expected HTTP 400 response") + } + want := false + if member != want { + t.Errorf("Organizations.CheckTeamMembership returned %+v, want %+v", member, want) + } +} + +func TestOrganizationsService_CheckMembership_invalidUser(t *testing.T) { + _, err := client.Organizations.CheckTeamMembership(1, "%") + if err == nil { + t.Errorf("Expected error to be returned") + } + if err, ok := err.(*url.Error); !ok { + t.Errorf("Expected URL parse error, got %+v", err) + } +} + func TestOrganizationsService_AddTeamMember(t *testing.T) { setup() defer teardown()