veza/veza-backend-api/internal/pagination/pagination_test.go
2026-03-06 19:13:16 +01:00

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)
}