package api import ( "fmt" "testing" "github.com/gofiber/fiber/v2" "github.com/valyala/fasthttp" ) func TestExtractPageAndPageSizeFromRequest(t *testing.T) { type Scenario struct { Name string Page string PageSize string ExpectedPage int ExpectedPageSize int } scenarios := []Scenario{ { Page: "1", PageSize: "20", ExpectedPage: 1, ExpectedPageSize: 20, }, { Page: "2", PageSize: "10", ExpectedPage: 2, ExpectedPageSize: 10, }, { Page: "2", PageSize: "10", ExpectedPage: 2, ExpectedPageSize: 10, }, { Page: "1", PageSize: "999999", ExpectedPage: 1, ExpectedPageSize: MaximumPageSize, }, { Page: "-1", PageSize: "-1", ExpectedPage: DefaultPage, ExpectedPageSize: DefaultPageSize, }, { Page: "invalid", PageSize: "invalid", ExpectedPage: DefaultPage, ExpectedPageSize: DefaultPageSize, }, } for _, scenario := range scenarios { t.Run("page-"+scenario.Page+"-pageSize-"+scenario.PageSize, func(t *testing.T) { //request := httptest.NewRequest("GET", fmt.Sprintf("/api/v1/statuses?page=%s&pageSize=%s", scenario.Page, scenario.PageSize), http.NoBody) app := fiber.New() c := app.AcquireCtx(&fasthttp.RequestCtx{}) defer app.ReleaseCtx(c) c.Request().SetRequestURI(fmt.Sprintf("/api/v1/statuses?page=%s&pageSize=%s", scenario.Page, scenario.PageSize)) actualPage, actualPageSize := extractPageAndPageSizeFromRequest(c) if actualPage != scenario.ExpectedPage { t.Errorf("expected %d, got %d", scenario.ExpectedPage, actualPage) } if actualPageSize != scenario.ExpectedPageSize { t.Errorf("expected %d, got %d", scenario.ExpectedPageSize, actualPageSize) } }) } }