diff --git a/internal/core/api.go b/internal/core/api.go index 7cf7bec7..7462c7c4 100644 --- a/internal/core/api.go +++ b/internal/core/api.go @@ -84,7 +84,10 @@ func paginate2(itemsPtr interface{}, itemsPerPage int, page int) int { return 0 } - pageCount := (itemsLen / itemsPerPage) + 1 + pageCount := (itemsLen / itemsPerPage) + if (itemsLen % itemsPerPage) != 0 { + pageCount++ + } min := page * itemsPerPage if min >= itemsLen { diff --git a/internal/core/api_test.go b/internal/core/api_test.go index e1d024e1..f9d90d02 100644 --- a/internal/core/api_test.go +++ b/internal/core/api_test.go @@ -78,6 +78,38 @@ func httpRequest(method string, ur string, in interface{}, out interface{}) erro return json.NewDecoder(res.Body).Decode(out) } +func TestPagination(t *testing.T) { + items := make([]int, 5) + for i := 0; i < 5; i++ { + items[i] = i + } + + pageCount, err := paginate(&items, "1", "1") + require.NoError(t, err) + require.Equal(t, 5, pageCount) + require.Equal(t, []int{1}, items) + + items = make([]int, 5) + for i := 0; i < 5; i++ { + items[i] = i + } + + pageCount, err = paginate(&items, "3", "2") + require.NoError(t, err) + require.Equal(t, 2, pageCount) + require.Equal(t, []int{4}, items) + + items = make([]int, 6) + for i := 0; i < 6; i++ { + items[i] = i + } + + pageCount, err = paginate(&items, "3", "3") + require.NoError(t, err) + require.Equal(t, 2, pageCount) + require.Equal(t, []int{5}, items) +} + func TestAPIConfigGet(t *testing.T) { // since the HTTP server is created and deleted multiple times, // we can't reuse TCP connections.