Add search teams on org API #577

Merged
jolheiser merged 3 commits from Gusted/go-sdk:add-search-team-org into master 2022-04-26 19:21:25 +00:00
2 changed files with 70 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"net/url"
)
// Team represents a team in an organization
@ -75,6 +76,44 @@ func (c *Client) GetTeam(id int64) (*Team, *Response, error) {
return t, resp, err
}
// SearchTeamsOptions options for searching teams.
type SearchTeamsOptions struct {
ListOptions
Query string
IncludeDescription bool
}
func (o SearchTeamsOptions) getURLQuery() url.Values {
query := make(url.Values)
query.Add("page", fmt.Sprintf("%d", o.Page))
query.Add("limit", fmt.Sprintf("%d", o.PageSize))
query.Add("q", o.Query)
query.Add("include_desc", fmt.Sprintf("%t", o.IncludeDescription))
return query
}
// TeamSearchResults is the JSON struct that is returned from Team search API.
type TeamSearchResults struct {
OK bool `json:"ok"`
Error string `json:"error"`
Data []*Team `json:"data"`
}
// SearchOrgTeams search for teams in a org.
func (c *Client) SearchOrgTeams(org string, opt *SearchTeamsOptions) ([]*Team, *Response, error) {
responseBody := TeamSearchResults{}
opt.setDefaults()
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/teams/search?%s", org, opt.getURLQuery().Encode()), nil, nil, &responseBody)
if err != nil {
return nil, resp, err
}
if !responseBody.OK {
return nil, resp, fmt.Errorf("gitea error: %v", responseBody.Error)
}
return responseBody.Data, resp, err
}
// CreateTeamOption options for creating a team
type CreateTeamOption struct {
Name string `json:"name"`

View File

@ -5,6 +5,7 @@
package gitea
import (
"log"
"testing"
"github.com/stretchr/testify/assert"
@ -23,3 +24,33 @@ func createTestOrgTeams(t *testing.T, c *Client, org, name string, accessMode Ac
assert.NotNil(t, team)
return team, e
}
func TestTeamSearch(t *testing.T) {
log.Println("== TestTeamSearch ==")
c := newTestClient()
orgName := "TestTeamsOrg"
// prepare for test
_, _, err := c.CreateOrg(CreateOrgOption{
Name: orgName,
Visibility: VisibleTypePublic,
RepoAdminChangeTeamAccess: true,
})
defer func() {
_, _ = c.DeleteOrg(orgName)
}()
assert.NoError(t, err)
if _, err = createTestOrgTeams(t, c, orgName, "Admins", AccessModeAdmin, []RepoUnitType{RepoUnitCode, RepoUnitIssues, RepoUnitPulls, RepoUnitReleases}); err != nil {
return
}
teams, _, err := c.SearchOrgTeams(orgName, &SearchTeamsOptions{
Query: "Admins",
})
assert.NoError(t, err)
assert.Len(t, teams, 1)
assert.Equal(t, "Admins", teams[0].Name)
}