Files

35 lines
1.2 KiB
Go

package research
import (
"encoding/base64"
"net/url"
"strings"
"testing"
)
func TestCursorValidation(t *testing.T) {
f := Filters{Query: "graph", Sort: "title", SearchIn: "text", PageSize: 8}
f.Cursor = encodeCursor(f, position{ID: 9223372036854775807, Key: "duplicate\x01title"}, true)
p, err := decodeCursor(f)
if err != nil || !p.Before || p.ID != 9223372036854775807 || p.Key != "duplicate\x01title" {
t.Fatalf("roundtrip %+v %v", p, err)
}
if _, err := parseFilters("q=graph&sort=title&cursor=" + url.QueryEscape(f.Cursor)); err != nil {
t.Fatal(err)
}
for _, raw := range []string{"!", strings.Repeat("a", 32769), base64.RawURLEncoding.EncodeToString([]byte(`{"v":2}`)), f.Cursor + "="} {
bad := f
bad.Cursor = raw
if _, err := decodeCursor(bad); err == nil {
t.Fatal("accepted invalid cursor")
}
}
for _, change := range []func(*Filters){func(f *Filters) { f.Query = "other" }, func(f *Filters) { f.Sort = "recent" }, func(f *Filters) { f.PageSize = 9 }, func(f *Filters) { f.SearchIn = "author" }, func(f *Filters) { f.Topic = "cs.AI" }} {
bad := f
change(&bad)
if _, err := decodeCursor(bad); err == nil {
t.Fatal("accepted mismatched filter")
}
}
}