Skip to content

Commit 9c5b8ec

Browse files
committed
Refactor pagination handling across multiple modules to use typed Resource constants.
1 parent ce55c92 commit 9c5b8ec

26 files changed

Lines changed: 567 additions & 25 deletions

events/events.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func (c *Client) List(options *ListOptions) (*EventsPage, error) {
139139
return nil, err
140140
}
141141

142-
page, err := webexsdk.NewPage(resp, c.webexClient, "events")
142+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceEvents)
143143
if err != nil {
144144
return nil, err
145145
}

events/events_functional_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,40 @@ func TestFunctionalEventsNotFound(t *testing.T) {
157157
t.Logf("Got expected API error: status=%d message=%q trackingId=%s",
158158
apiErr.StatusCode, apiErr.Message, apiErr.TrackingID)
159159
}
160+
161+
// TestFunctionalEventsCursorNavigation tests PageFromCursor with events
162+
// Run with:
163+
//
164+
// WEBEX_ACCESS_TOKEN=<your-token> go test -tags functional -run TestFunctionalEventsCursorNavigation -v ./events/
165+
func TestFunctionalEventsCursorNavigation(t *testing.T) {
166+
client := functionalClient(t)
167+
eventsClient := New(client, nil)
168+
169+
page, err := eventsClient.List(&ListOptions{
170+
From: time.Now().AddDate(0, 0, -7).Format(time.RFC3339),
171+
To: time.Now().Format(time.RFC3339),
172+
Max: 1,
173+
})
174+
if err != nil {
175+
skipOn403(t, err)
176+
t.Fatalf("List failed: %v", err)
177+
}
178+
179+
if !page.HasNext {
180+
t.Log("Only one page of results — skipping cursor navigation test")
181+
return
182+
}
183+
184+
cursor := page.NextPage
185+
t.Logf("Saved cursor: %s", cursor)
186+
187+
directPage, err := client.PageFromCursor(cursor)
188+
if err != nil {
189+
t.Fatalf("PageFromCursor failed: %v", err)
190+
}
191+
192+
t.Logf("Direct cursor navigation: got %d items, hasNext=%v", len(directPage.Items), directPage.HasNext)
193+
if len(directPage.Items) == 0 {
194+
t.Error("Expected items from cursor navigation")
195+
}
196+
}

meetings/meetings.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ func (c *Client) List(options *ListOptions) (*MeetingsPage, error) {
373373
return nil, err
374374
}
375375

376-
page, err := webexsdk.NewPage(resp, c.webexClient, "meetings")
376+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceMeetings)
377377
if err != nil {
378378
return nil, err
379379
}
@@ -527,7 +527,7 @@ func (c *Client) ListParticipants(options *ParticipantListOptions) (*Participant
527527
return nil, err
528528
}
529529

530-
page, err := webexsdk.NewPage(resp, c.webexClient, "meetingParticipants")
530+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceMeetingParticipants)
531531
if err != nil {
532532
return nil, err
533533
}

meetings/meetings_functional_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,4 +589,19 @@ func TestFunctionalMeetingsListPagination(t *testing.T) {
589589
}
590590

591591
t.Logf("Total: %d items across %d pages", totalItems, pageCount)
592+
593+
// Test direct cursor navigation (PageFromCursor)
594+
if page2Cursor != "" {
595+
t.Log("Testing direct cursor navigation to page 2...")
596+
directPage, err := client.PageFromCursor(page2Cursor)
597+
if err != nil {
598+
t.Fatalf("PageFromCursor failed: %v", err)
599+
}
600+
t.Logf("Direct cursor navigation: got %d items, hasNext=%v", len(directPage.Items), directPage.HasNext)
601+
if len(directPage.Items) == 0 {
602+
t.Error("Expected items from direct cursor navigation")
603+
}
604+
} else {
605+
t.Log("Skipping cursor navigation test — only one page of results")
606+
}
592607
}

memberships/memberships.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func (c *Client) List(options *ListOptions) (*MembershipsPage, error) {
149149
return nil, err
150150
}
151151

152-
page, err := webexsdk.NewPage(resp, c.webexClient, "memberships")
152+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceMemberships)
153153
if err != nil {
154154
return nil, err
155155
}

memberships/memberships_functional_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,34 @@ func TestFunctionalMembershipsNotFound(t *testing.T) {
139139
t.Logf("Got expected API error: status=%d message=%q trackingId=%s",
140140
apiErr.StatusCode, apiErr.Message, apiErr.TrackingID)
141141
}
142+
// TestFunctionalMembershipsCursorNavigation tests PageFromCursor with memberships
143+
// Run with:
144+
//
145+
// WEBEX_ACCESS_TOKEN=<your-token> go test -tags functional -run TestFunctionalMembershipsCursorNavigation -v ./memberships/
146+
func TestFunctionalMembershipsCursorNavigation(t *testing.T) {
147+
client := functionalClient(t)
148+
membershipsClient := New(client, nil)
149+
150+
page, err := membershipsClient.List(&ListOptions{Max: 1})
151+
if err != nil {
152+
t.Fatalf("List failed: %v", err)
153+
}
154+
155+
if !page.HasNext {
156+
t.Log("Only one page of results — skipping cursor navigation test")
157+
return
158+
}
159+
160+
cursor := page.NextPage
161+
t.Logf("Saved cursor: %s", cursor)
162+
163+
directPage, err := client.PageFromCursor(cursor)
164+
if err != nil {
165+
t.Fatalf("PageFromCursor failed: %v", err)
166+
}
167+
168+
t.Logf("Direct cursor navigation: got %d items, hasNext=%v", len(directPage.Items), directPage.HasNext)
169+
if len(directPage.Items) == 0 {
170+
t.Error("Expected items from cursor navigation")
171+
}
172+
}

messages/messages.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ func (c *Client) List(options *ListOptions) (*MessagesPage, error) {
209209
return nil, err
210210
}
211211

212-
page, err := webexsdk.NewPage(resp, c.webexClient, "messages")
212+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceMessages)
213213
if err != nil {
214214
return nil, err
215215
}

messages/messages_functional_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,13 @@ func TestFunctionalMessagesListPagination(t *testing.T) {
286286
pageCount := 1
287287
t.Logf("Page %d: %d items, hasNext=%v", pageCount, len(page.Items), page.HasNext)
288288

289+
// Save cursor for direct navigation test
290+
var page2Cursor string
291+
if page.HasNext {
292+
page2Cursor = page.NextPage
293+
t.Logf("Saved page 2 cursor: %s", page2Cursor)
294+
}
295+
289296
for page.HasNext && pageCount < 10 {
290297
nextPage, err := page.Next()
291298
if err != nil {
@@ -298,6 +305,21 @@ func TestFunctionalMessagesListPagination(t *testing.T) {
298305
}
299306

300307
t.Logf("Pagination complete: %d total items across %d pages", totalItems, pageCount)
308+
309+
// Test direct cursor navigation (PageFromCursor)
310+
if page2Cursor != "" {
311+
t.Log("Testing direct cursor navigation to page 2...")
312+
directPage, err := client.PageFromCursor(page2Cursor)
313+
if err != nil {
314+
t.Fatalf("PageFromCursor failed: %v", err)
315+
}
316+
t.Logf("Direct cursor navigation: got %d items, hasNext=%v", len(directPage.Items), directPage.HasNext)
317+
if len(directPage.Items) == 0 {
318+
t.Error("Expected items from direct cursor navigation")
319+
}
320+
} else {
321+
t.Log("Skipping cursor navigation test — only one page of results")
322+
}
301323
}
302324

303325
// TestFunctionalMessagesNotFound tests structured error on invalid message ID

people/people.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func (c *Client) List(options *ListOptions) (*PeoplePage, error) {
384384
return nil, err
385385
}
386386

387-
page, err := webexsdk.NewPage(resp, c.webexClient, "people")
387+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourcePeople)
388388
if err != nil {
389389
return nil, err
390390
}

recordings/recordings.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func (c *Client) List(options *ListOptions) (*RecordingsPage, error) {
155155
return nil, err
156156
}
157157

158-
page, err := webexsdk.NewPage(resp, c.webexClient, "recordings")
158+
page, err := webexsdk.NewPage(resp, c.webexClient, webexsdk.ResourceRecordings)
159159
if err != nil {
160160
return nil, err
161161
}

0 commit comments

Comments
 (0)