diff --git a/apps.go b/apps.go index 9d9fb95..7ccbccc 100644 --- a/apps.go +++ b/apps.go @@ -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 { diff --git a/apps_test.go b/apps_test.go index b5f8ac7..1324ea9 100644 --- a/apps_test.go +++ b/apps_test.go @@ -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) diff --git a/pagingRequest.go b/pagingRequest.go index 67924f4..6bfbf94 100644 --- a/pagingRequest.go +++ b/pagingRequest.go @@ -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 + } +}