package core
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestPaginationPage(t *testing.T) {
|
|
cases := []struct {
|
|
totalCount int
|
|
perPage int
|
|
page int
|
|
newPage int
|
|
expErr bool
|
|
}{
|
|
{0, 10, 1, 1, false},
|
|
|
|
{0, 10, 0, 1, false},
|
|
{0, 10, 1, 1, false},
|
|
{0, 10, 2, 0, true},
|
|
|
|
{5, 10, -1, 0, true},
|
|
{5, 10, 0, 1, false},
|
|
{5, 10, 1, 1, false},
|
|
{5, 10, 2, 0, true},
|
|
{5, 10, 2, 0, true},
|
|
|
|
{5, 5, 1, 1, false},
|
|
{5, 5, 2, 0, true},
|
|
{5, 5, 3, 0, true},
|
|
|
|
{5, 3, 2, 2, false},
|
|
{5, 3, 3, 0, true},
|
|
|
|
{5, 2, 2, 2, false},
|
|
{5, 2, 3, 3, false},
|
|
{5, 2, 4, 0, true},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
p, err := validatePage(&c.page, c.perPage, c.totalCount)
|
|
if c.expErr {
|
|
assert.Error(t, err)
|
|
continue
|
|
}
|
|
|
|
assert.Equal(t, c.newPage, p, fmt.Sprintf("%v", c))
|
|
}
|
|
|
|
// nil case
|
|
p, err := validatePage(nil, 1, 1)
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, 1, p)
|
|
}
|
|
}
|
|
|
|
func TestPaginationPerPage(t *testing.T) {
|
|
cases := []struct {
|
|
perPage int
|
|
newPerPage int
|
|
}{
|
|
{0, defaultPerPage},
|
|
{1, 1},
|
|
{2, 2},
|
|
{defaultPerPage, defaultPerPage},
|
|
{maxPerPage - 1, maxPerPage - 1},
|
|
{maxPerPage, maxPerPage},
|
|
{maxPerPage + 1, maxPerPage},
|
|
}
|
|
|
|
env := &Environment{}
|
|
|
|
for _, c := range cases {
|
|
p := env.validatePerPage(&c.perPage)
|
|
assert.Equal(t, c.newPerPage, p, fmt.Sprintf("%v", c))
|
|
}
|
|
|
|
// nil case
|
|
p := env.validatePerPage(nil)
|
|
assert.Equal(t, defaultPerPage, p)
|
|
|
|
// test in unsafe mode
|
|
env.Config.Unsafe = true
|
|
perPage := 1000
|
|
p = env.validatePerPage(&perPage)
|
|
assert.Equal(t, perPage, p)
|
|
env.Config.Unsafe = false
|
|
}
|