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