Browse Source

add additional team related methods

add methods to get, create, edit, and delete org teams
Will Norris 13 years ago
parent
commit
c7c9260f07
2 changed files with 164 additions and 3 deletions
  1. +54
    -3
      github/orgs.go
  2. +110
    -0
      github/orgs_test.go

+ 54
- 3
github/orgs.go View File

@ -86,9 +86,9 @@ func (s *OrganizationsService) Edit(name string, org *Organization) (*Organizati
return nil, err
}
updatedOrg := new(Organization)
_, err = s.client.Do(req, updatedOrg)
return updatedOrg, err
o := new(Organization)
_, err = s.client.Do(req, o)
return o, err
}
// List the members for an organization. If the authenticated user is an owner
@ -214,6 +214,57 @@ func (s *OrganizationsService) ListTeams(org string) ([]Team, error) {
return *teams, err
}
// GetTeam fetches a team by ID.
func (s *OrganizationsService) GetTeam(team int) (*Team, error) {
url_ := fmt.Sprintf("teams/%v", team)
req, err := s.client.NewRequest("GET", url_, nil)
if err != nil {
return nil, err
}
t := new(Team)
_, err = s.client.Do(req, t)
return t, err
}
// CreateTeam creates a new team.
func (s *OrganizationsService) CreateTeam(org string, team *Team) (*Team, error) {
url_ := fmt.Sprintf("orgs/%v/teams", org)
req, err := s.client.NewRequest("POST", url_, team)
if err != nil {
return nil, err
}
t := new(Team)
_, err = s.client.Do(req, t)
return t, err
}
// EditTeam edits a team.
func (s *OrganizationsService) EditTeam(id int, team *Team) (*Team, error) {
url_ := fmt.Sprintf("teams/%v", id)
req, err := s.client.NewRequest("PATCH", url_, team)
if err != nil {
return nil, err
}
t := new(Team)
_, err = s.client.Do(req, t)
return t, err
}
// DeleteTeam deletes a team.
func (s *OrganizationsService) DeleteTeam(team int) error {
url_ := fmt.Sprintf("teams/%v", team)
req, err := s.client.NewRequest("DELETE", url_, nil)
if err != nil {
return err
}
_, err = s.client.Do(req, nil)
return err
}
// Add a user to a team.
func (s *OrganizationsService) AddTeamMember(team int, user string) error {
url_ := fmt.Sprintf("teams/%v/members/%v", team, user)


+ 110
- 0
github/orgs_test.go View File

@ -419,6 +419,116 @@ func TestOrganizationsService_ListTeams_invalidOrg(t *testing.T) {
}
}
func TestOrganizationsService_GetTeam(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
t.Errorf("Request method = %v, want %v", r.Method, "GET")
}
fmt.Fprint(w, `{"id":1, "name":"n", "url":"u", "slug": "s", "permission":"p"}`)
})
team, err := client.Organizations.GetTeam(1)
if err != nil {
t.Errorf("Organizations.GetTeam returned error: %v", err)
}
want := &Team{ID: 1, Name: "n", URL: "u", Slug: "s", Permission: "p"}
if !reflect.DeepEqual(team, want) {
t.Errorf("Organizations.GetTeam returned %+v, want %+v", team, want)
}
}
func TestOrganizationsService_CreateTeam(t *testing.T) {
setup()
defer teardown()
input := &Team{Name: "n"}
mux.HandleFunc("/orgs/o/teams", func(w http.ResponseWriter, r *http.Request) {
v := new(Team)
json.NewDecoder(r.Body).Decode(v)
if r.Method != "POST" {
t.Errorf("Request method = %v, want %v", r.Method, "POST")
}
if !reflect.DeepEqual(v, input) {
t.Errorf("Request body = %+v, want %+v", v, input)
}
fmt.Fprint(w, `{"id":1}`)
})
team, err := client.Organizations.CreateTeam("o", input)
if err != nil {
t.Errorf("Organizations.CreateTeam returned error: %v", err)
}
want := &Team{ID: 1}
if !reflect.DeepEqual(team, want) {
t.Errorf("Organizations.CreateTeam returned %+v, want %+v", team, want)
}
}
func TestOrganizationsService_CreateTeam_invalidOrg(t *testing.T) {
_, err := client.Organizations.CreateTeam("%", nil)
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_EditTeam(t *testing.T) {
setup()
defer teardown()
input := &Team{Name: "n"}
mux.HandleFunc("/teams/1", func(w http.ResponseWriter, r *http.Request) {
v := new(Team)
json.NewDecoder(r.Body).Decode(v)
if r.Method != "PATCH" {
t.Errorf("Request method = %v, want %v", r.Method, "PATCH")
}
if !reflect.DeepEqual(v, input) {
t.Errorf("Request body = %+v, want %+v", v, input)
}
fmt.Fprint(w, `{"id":1}`)
})
team, err := client.Organizations.EditTeam(1, input)
if err != nil {
t.Errorf("Organizations.EditTeam returned error: %v", err)
}
want := &Team{ID: 1}
if !reflect.DeepEqual(team, want) {
t.Errorf("Organizations.EditTeam returned %+v, want %+v", team, want)
}
}
func TestOrganizationsService_DeleteTeam(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "DELETE" {
t.Errorf("Request method = %v, want %v", r.Method, "DELETE")
}
})
err := client.Organizations.DeleteTeam(1)
if err != nil {
t.Errorf("Organizations.DeleteTeam returned error: %v", err)
}
}
func TestOrganizationsService_AddTeamMember(t *testing.T) {
setup()
defer teardown()


Loading…
Cancel
Save