137 lines
3.7 KiB
Go
137 lines
3.7 KiB
Go
package cursortoken
|
|
|
|
import (
|
|
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestStartToken(t *testing.T) {
|
|
tok := Start()
|
|
tst.AssertEqual(t, tok.Token(), "@start")
|
|
tst.AssertTrue(t, tok.IsStart())
|
|
tst.AssertFalse(t, tok.IsEnd())
|
|
}
|
|
|
|
func TestEndToken(t *testing.T) {
|
|
tok := End()
|
|
tst.AssertEqual(t, tok.Token(), "@end")
|
|
tst.AssertTrue(t, tok.IsEnd())
|
|
tst.AssertFalse(t, tok.IsStart())
|
|
}
|
|
|
|
func TestNewKeySortTokenBasic(t *testing.T) {
|
|
tok := NewKeySortToken("alpha", "beta", SortASC, SortDESC, 50, Extra{})
|
|
tst.AssertFalse(t, tok.IsEnd())
|
|
tst.AssertFalse(t, tok.IsStart())
|
|
str := tok.Token()
|
|
tst.AssertTrue(t, strings.HasPrefix(str, "tok_"))
|
|
}
|
|
|
|
func TestNewKeySortTokenRoundTrip(t *testing.T) {
|
|
original := NewKeySortToken("primary-val", "secondary-val", SortASC, SortDESC, 25, Extra{})
|
|
encoded := original.Token()
|
|
|
|
decoded, err := Decode(encoded)
|
|
tst.AssertNoErr(t, err)
|
|
|
|
ks, ok := decoded.(CTKeySort)
|
|
tst.AssertTrue(t, ok)
|
|
tst.AssertEqual(t, ks.ValuePrimary, "primary-val")
|
|
tst.AssertEqual(t, ks.ValueSecondary, "secondary-val")
|
|
tst.AssertEqual(t, ks.Direction, SortASC)
|
|
tst.AssertEqual(t, ks.DirectionSecondary, SortDESC)
|
|
tst.AssertEqual(t, ks.PageSize, 25)
|
|
tst.AssertEqual(t, ks.Mode, CTMNormal)
|
|
}
|
|
|
|
func TestKeySortTokenWithExtra(t *testing.T) {
|
|
ts := time.Date(2024, 6, 15, 10, 30, 0, 0, time.UTC)
|
|
id := "object-id-123"
|
|
page := 7
|
|
pageSize := 42
|
|
|
|
original := NewKeySortToken("p", "s", SortDESC, SortASC, 10, Extra{
|
|
Timestamp: &ts,
|
|
Id: &id,
|
|
Page: &page,
|
|
PageSize: &pageSize,
|
|
})
|
|
encoded := original.Token()
|
|
|
|
decoded, err := Decode(encoded)
|
|
tst.AssertNoErr(t, err)
|
|
|
|
ks, ok := decoded.(CTKeySort)
|
|
tst.AssertTrue(t, ok)
|
|
tst.AssertTrue(t, ks.Extra.Timestamp != nil)
|
|
tst.AssertTrue(t, ks.Extra.Timestamp.Equal(ts))
|
|
tst.AssertDeRefEqual(t, ks.Extra.Id, "object-id-123")
|
|
tst.AssertDeRefEqual(t, ks.Extra.Page, 7)
|
|
tst.AssertDeRefEqual(t, ks.Extra.PageSize, 42)
|
|
}
|
|
|
|
func TestKeySortTokenStartRoundTrip(t *testing.T) {
|
|
original := Start()
|
|
decoded, err := Decode(original.Token())
|
|
tst.AssertNoErr(t, err)
|
|
tst.AssertTrue(t, decoded.IsStart())
|
|
tst.AssertFalse(t, decoded.IsEnd())
|
|
}
|
|
|
|
func TestKeySortTokenEndRoundTrip(t *testing.T) {
|
|
original := End()
|
|
decoded, err := Decode(original.Token())
|
|
tst.AssertNoErr(t, err)
|
|
tst.AssertTrue(t, decoded.IsEnd())
|
|
tst.AssertFalse(t, decoded.IsStart())
|
|
}
|
|
|
|
func TestKeySortTokenEmptyValues(t *testing.T) {
|
|
tok := CTKeySort{Mode: CTMNormal}
|
|
encoded := tok.Token()
|
|
tst.AssertTrue(t, strings.HasPrefix(encoded, "tok_"))
|
|
|
|
decoded, err := Decode(encoded)
|
|
tst.AssertNoErr(t, err)
|
|
|
|
ks, ok := decoded.(CTKeySort)
|
|
tst.AssertTrue(t, ok)
|
|
tst.AssertEqual(t, ks.ValuePrimary, "")
|
|
tst.AssertEqual(t, ks.ValueSecondary, "")
|
|
tst.AssertEqual(t, ks.Direction, SortDirection(""))
|
|
tst.AssertEqual(t, ks.DirectionSecondary, SortDirection(""))
|
|
tst.AssertEqual(t, ks.PageSize, 0)
|
|
}
|
|
|
|
func TestKeySortTokenOnlyTimestamp(t *testing.T) {
|
|
ts := time.Date(2020, 1, 2, 3, 4, 5, 0, time.UTC)
|
|
tok := CTKeySort{
|
|
Mode: CTMNormal,
|
|
Extra: Extra{Timestamp: &ts},
|
|
}
|
|
|
|
decoded, err := Decode(tok.Token())
|
|
tst.AssertNoErr(t, err)
|
|
|
|
ks, ok := decoded.(CTKeySort)
|
|
tst.AssertTrue(t, ok)
|
|
tst.AssertTrue(t, ks.Extra.Timestamp != nil)
|
|
tst.AssertTrue(t, ks.Extra.Timestamp.Equal(ts))
|
|
tst.AssertTrue(t, ks.Extra.Id == nil)
|
|
tst.AssertTrue(t, ks.Extra.Page == nil)
|
|
tst.AssertTrue(t, ks.Extra.PageSize == nil)
|
|
}
|
|
|
|
func TestKeySortTokenSpecialChars(t *testing.T) {
|
|
original := NewKeySortToken("hello world / @!#$%", "äöü€", SortASC, SortASC, 1, Extra{})
|
|
decoded, err := Decode(original.Token())
|
|
tst.AssertNoErr(t, err)
|
|
|
|
ks, ok := decoded.(CTKeySort)
|
|
tst.AssertTrue(t, ok)
|
|
tst.AssertEqual(t, ks.ValuePrimary, "hello world / @!#$%")
|
|
tst.AssertEqual(t, ks.ValueSecondary, "äöü€")
|
|
}
|