37 lines
958 B
Go
37 lines
958 B
Go
package pagination
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestCursorRoundTripAndTamperProtection(t *testing.T) {
|
||
|
|
codec, err := NewCodec([]byte("01234567890123456789012345678901"))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
encoded, err := codec.Encode("2026-08-23T12:00:00Z", "item-1")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
decoded, err := codec.Decode(encoded)
|
||
|
|
if err != nil || decoded.ID != "item-1" {
|
||
|
|
t.Fatalf("decoded = %#v, err = %v", decoded, err)
|
||
|
|
}
|
||
|
|
tampered := encoded[:len(encoded)-1] + "A"
|
||
|
|
if _, err := codec.Decode(tampered); !errors.Is(err, ErrInvalidCursor) {
|
||
|
|
t.Fatalf("tampered cursor error = %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestParseLimit(t *testing.T) {
|
||
|
|
if value, err := ParseLimit(""); err != nil || value != DefaultLimit {
|
||
|
|
t.Fatalf("default limit = %d, err = %v", value, err)
|
||
|
|
}
|
||
|
|
for _, invalid := range []string{"0", "101", "abc", "-1"} {
|
||
|
|
if _, err := ParseLimit(invalid); err == nil {
|
||
|
|
t.Fatalf("expected %q to be rejected", invalid)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|