From 6d9688fe769ead0bb0dd5b705ea2ff373f127a58 Mon Sep 17 00:00:00 2001 From: aviau Date: Sat, 14 Sep 2024 16:54:41 -0400 Subject: [PATCH] support empty bodies --- api_client_iter.go | 3 +++ api_client_iter_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/api_client_iter.go b/api_client_iter.go index b4e749d..ccef323 100644 --- a/api_client_iter.go +++ b/api_client_iter.go @@ -108,6 +108,9 @@ func (client *ApiClient) IterPostJson( return createPagingIterator( func(cursor string) (*http.Response, error) { if cursor != "" { + if body == nil { + body = make(map[string]interface{}) + } body["from"] = cursor } diff --git a/api_client_iter_test.go b/api_client_iter_test.go index 78c203a..521f207 100644 --- a/api_client_iter_test.go +++ b/api_client_iter_test.go @@ -141,3 +141,39 @@ func TestIterPostJson(t *testing.T) { ) } + +func TestIterPostJsonNilMap(t *testing.T) { + requestsReceived := 0 + + ct := newClientTest( + http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + requestsReceived = requestsReceived + 1 + if requestsReceived == 1 { + w.Write([]byte(`{"next": "second-page"}`)) + } else { + w.Write([]byte(`{"next": null}`)) + } + }), + ) + defer ct.Close() + + requestsSent := 0 + nextTokens := []string{} + + for result, err := range ct.apiClient.IterPostJson( + "/leaksdb/sources", + nil, + nil, + ) { + requestsSent = requestsSent + 1 + if requestsSent > 2 { + // We are going crazy here... + break + } + assert.Nil(t, err, "iter yielded an error") + assert.NotNil(t, result, "didn't get a result") + nextTokens = append(nextTokens, result.Next) + } + + assert.Equal(t, 2, requestsSent, "Didn't get the expected number of pages") +}