Skip to content

Commit c43e444

Browse files
authored
Fix: add pagination for teams api (#983)
1 parent 74b8a6d commit c43e444

File tree

2 files changed

+50
-11
lines changed

2 files changed

+50
-11
lines changed

client/team.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ type Team struct {
2222
Users []User `json:"users"`
2323
}
2424

25+
type PaginatedTeamsResponse struct {
26+
Teams []Team `json:"teams"`
27+
NextPageKey string `json:"nextPageKey"`
28+
}
29+
2530
func (client *ApiClient) TeamCreate(payload TeamCreatePayload) (Team, error) {
2631
if payload.Name == "" {
2732
return Team{}, errors.New("must specify team name on creation")
@@ -84,20 +89,32 @@ func (client *ApiClient) GetTeams(params map[string]string) ([]Team, error) {
8489
return nil, err
8590
}
8691

87-
var result []Team
92+
var teams []Team
8893

89-
err = client.http.Get("/teams/organizations/"+organizationId, params, &result)
90-
if err != nil {
91-
return nil, err
94+
for {
95+
var res PaginatedTeamsResponse
96+
97+
if err := client.http.Get("/teams/organizations/"+organizationId, params, &res); err != nil {
98+
return nil, err
99+
}
100+
101+
teams = append(teams, res.Teams...)
102+
103+
nextPageKey := res.NextPageKey
104+
if nextPageKey == "" {
105+
break
106+
}
107+
108+
params["offset"] = nextPageKey
92109
}
93110

94-
return result, err
111+
return teams, nil
95112
}
96113

97114
func (client *ApiClient) Teams() ([]Team, error) {
98-
return client.GetTeams(nil)
115+
return client.GetTeams(map[string]string{"limit": "100"})
99116
}
100117

101118
func (client *ApiClient) TeamsByName(name string) ([]Team, error) {
102-
return client.GetTeams(map[string]string{"name": name})
119+
return client.GetTeams(map[string]string{"name": name, "limit": "100"})
103120
}

client/team_test.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ var _ = Describe("Teams Client", func() {
1616
Name: "team-name",
1717
}
1818

19+
mockTeam2 := Team{
20+
Id: "team-id2",
21+
Name: "team-name2",
22+
}
23+
1924
Describe("Get Single Team", func() {
2025
var returnedTeam Team
2126

@@ -40,13 +45,29 @@ var _ = Describe("Teams Client", func() {
4045
Describe("Get All Teams", func() {
4146
var returnedTeams []Team
4247
mockTeams := []Team{mockTeam}
48+
mockTeams2 := []Team{mockTeam2}
4349

4450
BeforeEach(func() {
4551
mockOrganizationIdCall()
4652
httpCall = mockHttpClient.EXPECT().
47-
Get("/teams/organizations/"+organizationId, nil, gomock.Any()).
48-
Do(func(path string, request interface{}, response *[]Team) {
49-
*response = mockTeams
53+
Get("/teams/organizations/"+organizationId, map[string]string{
54+
"limit": "100",
55+
}, gomock.Any()).
56+
Do(func(path string, request interface{}, response *PaginatedTeamsResponse) {
57+
*response = PaginatedTeamsResponse{
58+
Teams: mockTeams,
59+
NextPageKey: "next_page_key",
60+
}
61+
})
62+
httpCall2 = mockHttpClient.EXPECT().
63+
Get("/teams/organizations/"+organizationId, map[string]string{
64+
"offset": "next_page_key",
65+
"limit": "100",
66+
}, gomock.Any()).
67+
Do(func(path string, request interface{}, response *PaginatedTeamsResponse) {
68+
*response = PaginatedTeamsResponse{
69+
Teams: mockTeams2,
70+
}
5071
})
5172
returnedTeams, _ = apiClient.Teams()
5273
})
@@ -57,10 +78,11 @@ var _ = Describe("Teams Client", func() {
5778

5879
It("Should send GET request", func() {
5980
httpCall.Times(1)
81+
httpCall2.Times(1)
6082
})
6183

6284
It("Should return teams", func() {
63-
Expect(returnedTeams).To(Equal(mockTeams))
85+
Expect(returnedTeams).To(Equal(append(mockTeams, mockTeams2...)))
6486
})
6587
})
6688

0 commit comments

Comments
 (0)