74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package pagination
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseParams_Defaults(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
w := httptest.NewRecorder()
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = httptest.NewRequest("GET", "/?page=&limit=", nil)
|
|
|
|
params, err := ParseParams(c)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 1, params.Page)
|
|
assert.Equal(t, DefaultPageSize, params.Limit)
|
|
}
|
|
|
|
func TestParseParams_Explicit(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
w := httptest.NewRecorder()
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = httptest.NewRequest("GET", "/?page=3&limit=50", nil)
|
|
|
|
params, err := ParseParams(c)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 3, params.Page)
|
|
assert.Equal(t, 50, params.Limit)
|
|
}
|
|
|
|
func TestParseParams_ExplicitInvalidPage(t *testing.T) {
|
|
// Explicit page=0 should still default to 1 (lenient) - we only reject limit > 100
|
|
gin.SetMode(gin.TestMode)
|
|
w := httptest.NewRecorder()
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = httptest.NewRequest("GET", "/?page=0&limit=20", nil)
|
|
|
|
params, err := ParseParams(c)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 1, params.Page) // normalized to 1
|
|
}
|
|
|
|
func TestParseParams_LimitTooHigh(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
w := httptest.NewRecorder()
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = httptest.NewRequest("GET", "/?page=1&limit=150", nil)
|
|
|
|
_, err := ParseParams(c)
|
|
assert.NotNil(t, err)
|
|
}
|
|
|
|
func TestParams_Offset(t *testing.T) {
|
|
p := Params{Page: 1, Limit: 20}
|
|
assert.Equal(t, 0, p.Offset())
|
|
|
|
p = Params{Page: 2, Limit: 20}
|
|
assert.Equal(t, 20, p.Offset())
|
|
|
|
p = Params{Page: 5, Limit: 10}
|
|
assert.Equal(t, 40, p.Offset())
|
|
}
|
|
|
|
func TestBuildMeta(t *testing.T) {
|
|
meta := BuildMeta(1, 20, 150)
|
|
assert.Equal(t, 1, meta.Page)
|
|
assert.Equal(t, 20, meta.Limit)
|
|
assert.Equal(t, int64(150), meta.Total)
|
|
assert.Equal(t, 8, meta.TotalPages)
|
|
}
|