package api

import (
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/core-portal/internal/admin/forms"
)

func TestPagination(t *testing.T) {
	s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	limitOffset := forms.LimitAndOffset{Limit: 10, Offset: 0}
	paged := Pagination(s, limitOffset)
	pagedSlice := paged.([]int)
	assert.Equal(t, 10, len(pagedSlice))
	assert.Equal(t, 0, pagedSlice[0])
	assert.Equal(t, 9, pagedSlice[len(pagedSlice)-1])

	limitOffset = forms.LimitAndOffset{Limit: 3, Offset: 10}
	paged = Pagination(s, limitOffset)
	pagedSlice = paged.([]int)
	assert.Equal(t, 1, len(pagedSlice))
	assert.Equal(t, 10, pagedSlice[0])

	limitOffset = forms.LimitAndOffset{Limit: 3, Offset: 20}
	paged = Pagination(s, limitOffset)
	pagedSlice = paged.([]int)
	assert.Equalf(t, 0, len(pagedSlice), fmt.Sprintf("%+v", pagedSlice))

	// test the bad case
	paged = Pagination(1, limitOffset)
	result := paged.(int)
	assert.Equal(t, 1, result)
}
