Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/public-api-server/pkg/apiv1/pagination_test.go
2499 views
1
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
package apiv1
6
7
import (
8
"testing"
9
10
v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"
11
"github.com/stretchr/testify/require"
12
)
13
14
func TestValidatePagination(t *testing.T) {
15
16
t.Run("empty pagination defaults to page size 25, page 1", func(t *testing.T) {
17
require.Equal(t, &v1.Pagination{
18
PageSize: 25,
19
Page: 1,
20
}, validatePagination(nil))
21
22
require.Equal(t, &v1.Pagination{
23
PageSize: 25,
24
Page: 1,
25
}, validatePagination(&v1.Pagination{}))
26
})
27
28
t.Run("negative, or zero, page defaults to page 1", func(t *testing.T) {
29
require.Equal(t, &v1.Pagination{
30
PageSize: 25,
31
Page: 1,
32
}, validatePagination(&v1.Pagination{
33
Page: 0,
34
}))
35
36
require.Equal(t, &v1.Pagination{
37
PageSize: 25,
38
Page: 1,
39
}, validatePagination(&v1.Pagination{
40
Page: -1,
41
}))
42
})
43
44
t.Run("page size of 0, or below, defaults to 25", func(t *testing.T) {
45
require.Equal(t, &v1.Pagination{
46
PageSize: 25,
47
Page: 1,
48
}, validatePagination(&v1.Pagination{
49
PageSize: 0,
50
}))
51
52
require.Equal(t, &v1.Pagination{
53
PageSize: 25,
54
Page: 1,
55
}, validatePagination(&v1.Pagination{
56
PageSize: -1,
57
}))
58
})
59
60
t.Run("page size greater than 100 defaults to 25", func(t *testing.T) {
61
require.Equal(t, &v1.Pagination{
62
PageSize: 25,
63
Page: 1,
64
}, validatePagination(&v1.Pagination{
65
PageSize: 101,
66
}))
67
})
68
69
t.Run("valid page and page size is used", func(t *testing.T) {
70
require.Equal(t, &v1.Pagination{
71
PageSize: 77,
72
Page: 9,
73
}, validatePagination(&v1.Pagination{
74
PageSize: 77,
75
Page: 9,
76
}))
77
})
78
}
79
80
func TestPageFromResults(t *testing.T) {
81
var results []int
82
for i := 0; i < 26; i++ {
83
results = append(results, i)
84
}
85
86
require.EqualValues(t, results[0:25], pageFromResults(results, &v1.Pagination{}), "defaults to first page and 25 records")
87
require.EqualValues(t, results[0:5], pageFromResults(results, &v1.Pagination{
88
PageSize: 5,
89
}), "defaults to first page, 10 records")
90
require.EqualValues(t, results[5:10], pageFromResults(results, &v1.Pagination{
91
PageSize: 5,
92
Page: 2,
93
}), "second page, 5 records")
94
require.EqualValues(t, results[10:15], pageFromResults(results, &v1.Pagination{
95
PageSize: 5,
96
Page: 3,
97
}), "third page, 5 records")
98
require.EqualValues(t, results[25:], pageFromResults(results, &v1.Pagination{
99
PageSize: 5,
100
Page: 6,
101
}), "last page, 5 records")
102
require.Len(t, pageFromResults(results, &v1.Pagination{
103
PageSize: 5,
104
Page: 7,
105
}), 0, "out of bound page, 5 records")
106
107
}
108
109