Browse Source

add functions for managing a team's repositories

Will Norris 13 years ago
parent
commit
487d4f8c7a
2 changed files with 226 additions and 0 deletions
  1. +61
    -0
      github/orgs.go
  2. +165
    -0
      github/orgs_test.go

+ 61
- 0
github/orgs.go View File

@ -334,3 +334,64 @@ func (s *OrganizationsService) RemoveTeamMember(team int, user string) error {
_, err = s.client.Do(req, nil)
return err
}
// ListTeamRepos lists the repositories that the specified team has access to.
//
// GitHub API docs: http://developer.github.com/v3/orgs/teams/#list-team-repos
func (s *OrganizationsService) ListTeamRepos(team int) ([]Repository, error) {
url_ := fmt.Sprintf("teams/%v/repos", team)
req, err := s.client.NewRequest("GET", url_, nil)
if err != nil {
return nil, err
}
repos := new([]Repository)
_, err = s.client.Do(req, repos)
return *repos, err
}
// CheckTeamRepo checks if a team manages the specified repository.
//
// GitHub API docs: http://developer.github.com/v3/orgs/teams/#get-team-repo
func (s *OrganizationsService) CheckTeamRepo(team int, owner string, repo string) (bool, error) {
url_ := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
req, err := s.client.NewRequest("GET", url_, nil)
if err != nil {
return false, err
}
_, err = s.client.Do(req, nil)
return parseBoolResponse(err)
}
// AddTeamRepo adds a repository to be managed by the specified team. The
// specified repository must be owned by the organization to which the team
// belongs, or a direct fork of a repository owned by the organization.
//
// GitHub API docs: http://developer.github.com/v3/orgs/teams/#add-team-repo
func (s *OrganizationsService) AddTeamRepo(team int, owner string, repo string) error {
url_ := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
req, err := s.client.NewRequest("PUT", url_, nil)
if err != nil {
return err
}
_, err = s.client.Do(req, nil)
return err
}
// RemoveTeamRepo removes a repository from being managed by the specified
// team. Note that this does not delete the repository, it just removes it
// from the team.
//
// GitHub API docs: http://developer.github.com/v3/orgs/teams/#remove-team-repo
func (s *OrganizationsService) RemoveTeamRepo(team int, owner string, repo string) error {
url_ := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo)
req, err := s.client.NewRequest("DELETE", url_, nil)
if err != nil {
return err
}
_, err = s.client.Do(req, nil)
return err
}

+ 165
- 0
github/orgs_test.go View File

@ -729,3 +729,168 @@ func TestOrganizationsService_ConcealMembership_invalidOrg(t *testing.T) {
t.Errorf("Expected URL parse error, got %+v", err)
}
}
func TestOrganizationsService_ListTeamRepos(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos", 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.ListTeamRepos(1)
if err != nil {
t.Errorf("Organizations.ListTeamRepos returned error: %v", err)
}
want := []Repository{Repository{ID: 1}}
if !reflect.DeepEqual(members, want) {
t.Errorf("Organizations.ListTeamRepos returned %+v, want %+v", members, want)
}
}
func TestOrganizationsService_CheckTeamRepo_true(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", func(w http.ResponseWriter, r *http.Request) {
if m := "GET"; m != r.Method {
t.Errorf("Request method = %v, want %v", r.Method, m)
}
})
managed, err := client.Organizations.CheckTeamRepo(1, "o", "r")
if err != nil {
t.Errorf("Organizations.CheckTeamRepo returned error: %v", err)
}
want := true
if managed != want {
t.Errorf("Organizations.CheckTeamRepo returned %+v, want %+v", managed, want)
}
}
func TestOrganizationsService_CheckTeamRepo_false(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", 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)
})
managed, err := client.Organizations.CheckTeamRepo(1, "o", "r")
if err != nil {
t.Errorf("Organizations.CheckTeamRepo returned error: %v", err)
}
want := false
if managed != want {
t.Errorf("Organizations.CheckTeamRepo returned %+v, want %+v", managed, want)
}
}
func TestOrganizationsService_CheckTeamRepo_error(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", 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)
})
managed, err := client.Organizations.CheckTeamRepo(1, "o", "r")
if err == nil {
t.Errorf("Expected HTTP 400 response")
}
want := false
if managed != want {
t.Errorf("Organizations.CheckTeamRepo returned %+v, want %+v", managed, want)
}
}
func TestOrganizationsService_CheckTeamRepo_invalidOwner(t *testing.T) {
_, err := client.Organizations.CheckTeamRepo(1, "%", "r")
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_AddTeamRepo(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", func(w http.ResponseWriter, r *http.Request) {
if m := "PUT"; m != r.Method {
t.Errorf("Request method = %v, want %v", r.Method, m)
}
w.WriteHeader(http.StatusNoContent)
})
err := client.Organizations.AddTeamRepo(1, "o", "r")
if err != nil {
t.Errorf("Organizations.AddTeamRepo returned error: %v", err)
}
}
func TestOrganizationsService_AddTeamRepo_noAccess(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", func(w http.ResponseWriter, r *http.Request) {
if m := "PUT"; m != r.Method {
t.Errorf("Request method = %v, want %v", r.Method, m)
}
w.WriteHeader(422)
})
err := client.Organizations.AddTeamRepo(1, "o", "r")
if err == nil {
t.Errorf("Expcted error to be returned")
}
}
func TestOrganizationsService_AddTeamRepo_invalidOwner(t *testing.T) {
err := client.Organizations.AddTeamRepo(1, "%", "r")
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_RemoveTeamRepo(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/teams/1/repos/o/r", func(w http.ResponseWriter, r *http.Request) {
if m := "DELETE"; m != r.Method {
t.Errorf("Request method = %v, want %v", r.Method, m)
}
w.WriteHeader(http.StatusNoContent)
})
err := client.Organizations.RemoveTeamRepo(1, "o", "r")
if err != nil {
t.Errorf("Organizations.RemoveTeamRepo returned error: %v", err)
}
}
func TestOrganizationsService_RemoveTeamRepo_invalidOwner(t *testing.T) {
err := client.Organizations.RemoveTeamRepo(1, "%", "r")
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)
}
}

Loading…
Cancel
Save