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