fix: correct paging parameter logic and add paging options
- fix bug where `pageNumber` and `pageSize` were swapped during default initialization in `apps.go`. - fix bug in `pagingRequest.go` where `ToParams` mapped keys to the incorrect struct fields. - add `ForPageNumber` and `WithPageSize` functional options to allow custom paging configuration. - enhance `Apps` endpoint tests to verify that `pageNumber` and `pageSize` query parameters are correctly passed to the API. - add test case for verifying non-default paging options.
This commit is contained in:
@@ -21,8 +21,8 @@ type App struct {
|
||||
|
||||
func (p *AppsEndpoint) Get(ctx context.Context, pagingOpts ...PagingOption) (Page[App], error) {
|
||||
pagingRequest := &PagingRequest{
|
||||
pageSize: 1,
|
||||
pageNumber: 50,
|
||||
pageNumber: 1,
|
||||
pageSize: 50,
|
||||
}
|
||||
|
||||
for _, opt := range pagingOpts {
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/StevanFreeborn/onspring-api-sdk-go"
|
||||
@@ -75,6 +76,9 @@ func TestApps(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("it should perform a GET request to the /apps endpoint and return page of apps if receives 200 status code", func(t *testing.T) {
|
||||
expectedPageNumber := 1
|
||||
expectedPageSize := 50
|
||||
|
||||
expectedPage := onspring.Page[onspring.App]{
|
||||
TotalPages: 1,
|
||||
TotalRecords: 1,
|
||||
@@ -98,6 +102,17 @@ func TestApps(t *testing.T) {
|
||||
t.Errorf("Expected /apps endpoint, got %s", r.URL.Path)
|
||||
}
|
||||
|
||||
pageNumber := r.URL.Query().Get("pageNumber")
|
||||
pageSize := r.URL.Query().Get("pageSize")
|
||||
|
||||
if pageNumber != strconv.Itoa(expectedPageNumber) {
|
||||
t.Errorf("Expected query param pageNumber to be %d but got %s", expectedPageNumber, pageNumber)
|
||||
}
|
||||
|
||||
if pageSize != strconv.Itoa(expectedPageSize) {
|
||||
t.Errorf("Expected query param pageSize to be %d but got %s", expectedPageSize, pageSize)
|
||||
}
|
||||
|
||||
jsonData, _ := json.Marshal(expectedPage)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
@@ -116,6 +131,40 @@ func TestApps(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("it should perform a GET request to the /apps endpoint with non-default paging information when provided", func(t *testing.T) {
|
||||
expectedPageNumber := 2
|
||||
expectedPageSize := 1
|
||||
|
||||
_, client := setupMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodGet {
|
||||
t.Errorf("Expected GET method, got %s", r.Method)
|
||||
}
|
||||
|
||||
if r.URL.Path != "/apps" {
|
||||
t.Errorf("Expected /apps endpoint, got %s", r.URL.Path)
|
||||
}
|
||||
|
||||
pageNumber := r.URL.Query().Get("pageNumber")
|
||||
pageSize := r.URL.Query().Get("pageSize")
|
||||
|
||||
if pageNumber != strconv.Itoa(expectedPageNumber) {
|
||||
t.Errorf("Expected query param pageNumber to be %d but got %s", expectedPageNumber, pageNumber)
|
||||
}
|
||||
|
||||
if pageSize != strconv.Itoa(expectedPageSize) {
|
||||
t.Errorf("Expected query param pageSize to be %d but got %s", expectedPageSize, pageSize)
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
|
||||
client.Apps.Get(
|
||||
t.Context(),
|
||||
onspring.ForPageNumber(expectedPageNumber),
|
||||
onspring.WithPageSize(expectedPageSize),
|
||||
)
|
||||
})
|
||||
|
||||
t.Run("it should return an error if the /apps endpoint returns a non-200 status code", func(t *testing.T) {
|
||||
_, client := setupMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
|
||||
+15
-3
@@ -3,15 +3,27 @@ package onspring
|
||||
import "strconv"
|
||||
|
||||
type PagingRequest struct {
|
||||
pageSize int
|
||||
pageNumber int
|
||||
pageSize int
|
||||
}
|
||||
|
||||
func (pr *PagingRequest) ToParams() map[string]string {
|
||||
return map[string]string{
|
||||
"pageSize": strconv.Itoa(pr.pageNumber),
|
||||
"pageNumber": strconv.Itoa(pr.pageSize),
|
||||
"pageNumber": strconv.Itoa(pr.pageNumber),
|
||||
"pageSize": strconv.Itoa(pr.pageSize),
|
||||
}
|
||||
}
|
||||
|
||||
type PagingOption func(*PagingRequest)
|
||||
|
||||
func ForPageNumber(pageNumber int) PagingOption {
|
||||
return func(pr *PagingRequest) {
|
||||
pr.pageNumber = pageNumber
|
||||
}
|
||||
}
|
||||
|
||||
func WithPageSize(pageSize int) PagingOption {
|
||||
return func(pr *PagingRequest) {
|
||||
pr.pageSize = pageSize
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user