mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
108 lines
2.7 KiB
Go
108 lines
2.7 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package apiv1
|
|
|
|
import (
|
|
"testing"
|
|
|
|
v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestValidatePagination(t *testing.T) {
|
|
|
|
t.Run("empty pagination defaults to page size 25, page 1", func(t *testing.T) {
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(nil))
|
|
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{}))
|
|
})
|
|
|
|
t.Run("negative, or zero, page defaults to page 1", func(t *testing.T) {
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{
|
|
Page: 0,
|
|
}))
|
|
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{
|
|
Page: -1,
|
|
}))
|
|
})
|
|
|
|
t.Run("page size of 0, or below, defaults to 25", func(t *testing.T) {
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{
|
|
PageSize: 0,
|
|
}))
|
|
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{
|
|
PageSize: -1,
|
|
}))
|
|
})
|
|
|
|
t.Run("page size greater than 100 defaults to 25", func(t *testing.T) {
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 25,
|
|
Page: 1,
|
|
}, validatePagination(&v1.Pagination{
|
|
PageSize: 101,
|
|
}))
|
|
})
|
|
|
|
t.Run("valid page and page size is used", func(t *testing.T) {
|
|
require.Equal(t, &v1.Pagination{
|
|
PageSize: 77,
|
|
Page: 9,
|
|
}, validatePagination(&v1.Pagination{
|
|
PageSize: 77,
|
|
Page: 9,
|
|
}))
|
|
})
|
|
}
|
|
|
|
func TestPageFromResults(t *testing.T) {
|
|
var results []int
|
|
for i := 0; i < 26; i++ {
|
|
results = append(results, i)
|
|
}
|
|
|
|
require.EqualValues(t, results[0:25], pageFromResults(results, &v1.Pagination{}), "defaults to first page and 25 records")
|
|
require.EqualValues(t, results[0:5], pageFromResults(results, &v1.Pagination{
|
|
PageSize: 5,
|
|
}), "defaults to first page, 10 records")
|
|
require.EqualValues(t, results[5:10], pageFromResults(results, &v1.Pagination{
|
|
PageSize: 5,
|
|
Page: 2,
|
|
}), "second page, 5 records")
|
|
require.EqualValues(t, results[10:15], pageFromResults(results, &v1.Pagination{
|
|
PageSize: 5,
|
|
Page: 3,
|
|
}), "third page, 5 records")
|
|
require.EqualValues(t, results[25:], pageFromResults(results, &v1.Pagination{
|
|
PageSize: 5,
|
|
Page: 6,
|
|
}), "last page, 5 records")
|
|
require.Len(t, pageFromResults(results, &v1.Pagination{
|
|
PageSize: 5,
|
|
Page: 7,
|
|
}), 0, "out of bound page, 5 records")
|
|
|
|
}
|