package pagination import ( "encoding/json" "math" "net/url" "strings" "testing" ) func TestBoundsAndEnvelope(t *testing.T) { for _, raw := range []string{"page=0", "page=1&page=2", "pageSize=101", "page=9223372036854775807&pageSize=100", "pageSize=-1"} { q, _ := url.ParseQuery(raw) if _, err := Parse(q, Config{}); err == nil { t.Fatal(raw) } } r, err := Parse(url.Values{"page": {"2"}, "pageSize": {"30"}}, Config{}) if err != nil || r.Offset() != 30 { t.Fatal(r, err) } result, err := NewResult(r, []string(nil), math.MaxInt64) if err != nil || result.TotalPages != math.MaxInt64/30+1 { t.Fatal(result, err) } raw, _ := json.Marshal(result) if !strings.Contains(string(raw), `"items":[]`) || !strings.Contains(string(raw), `"pageSize":30`) { t.Fatal(string(raw)) } }