Path: blob/main/components/public-api-server/pkg/apiv1/pagination_test.go
2499 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package apiv156import (7"testing"89v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"10"github.com/stretchr/testify/require"11)1213func TestValidatePagination(t *testing.T) {1415t.Run("empty pagination defaults to page size 25, page 1", func(t *testing.T) {16require.Equal(t, &v1.Pagination{17PageSize: 25,18Page: 1,19}, validatePagination(nil))2021require.Equal(t, &v1.Pagination{22PageSize: 25,23Page: 1,24}, validatePagination(&v1.Pagination{}))25})2627t.Run("negative, or zero, page defaults to page 1", func(t *testing.T) {28require.Equal(t, &v1.Pagination{29PageSize: 25,30Page: 1,31}, validatePagination(&v1.Pagination{32Page: 0,33}))3435require.Equal(t, &v1.Pagination{36PageSize: 25,37Page: 1,38}, validatePagination(&v1.Pagination{39Page: -1,40}))41})4243t.Run("page size of 0, or below, defaults to 25", func(t *testing.T) {44require.Equal(t, &v1.Pagination{45PageSize: 25,46Page: 1,47}, validatePagination(&v1.Pagination{48PageSize: 0,49}))5051require.Equal(t, &v1.Pagination{52PageSize: 25,53Page: 1,54}, validatePagination(&v1.Pagination{55PageSize: -1,56}))57})5859t.Run("page size greater than 100 defaults to 25", func(t *testing.T) {60require.Equal(t, &v1.Pagination{61PageSize: 25,62Page: 1,63}, validatePagination(&v1.Pagination{64PageSize: 101,65}))66})6768t.Run("valid page and page size is used", func(t *testing.T) {69require.Equal(t, &v1.Pagination{70PageSize: 77,71Page: 9,72}, validatePagination(&v1.Pagination{73PageSize: 77,74Page: 9,75}))76})77}7879func TestPageFromResults(t *testing.T) {80var results []int81for i := 0; i < 26; i++ {82results = append(results, i)83}8485require.EqualValues(t, results[0:25], pageFromResults(results, &v1.Pagination{}), "defaults to first page and 25 records")86require.EqualValues(t, results[0:5], pageFromResults(results, &v1.Pagination{87PageSize: 5,88}), "defaults to first page, 10 records")89require.EqualValues(t, results[5:10], pageFromResults(results, &v1.Pagination{90PageSize: 5,91Page: 2,92}), "second page, 5 records")93require.EqualValues(t, results[10:15], pageFromResults(results, &v1.Pagination{94PageSize: 5,95Page: 3,96}), "third page, 5 records")97require.EqualValues(t, results[25:], pageFromResults(results, &v1.Pagination{98PageSize: 5,99Page: 6,100}), "last page, 5 records")101require.Len(t, pageFromResults(results, &v1.Pagination{102PageSize: 5,103Page: 7,104}), 0, "out of bound page, 5 records")105106}107108109