126 lines
3.0 KiB
Go
126 lines
3.0 KiB
Go
package shared_test
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"galaxy/lobby/internal/service/shared"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParsePageDefaults(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
page, err := shared.ParsePage("", "")
|
|
require.NoError(t, err)
|
|
require.Equal(t, shared.Page{Size: shared.DefaultPageSize, Offset: 0}, page)
|
|
}
|
|
|
|
func TestParsePageHonoursSize(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
page, err := shared.ParsePage("75", "")
|
|
require.NoError(t, err)
|
|
require.Equal(t, shared.Page{Size: 75, Offset: 0}, page)
|
|
}
|
|
|
|
func TestParsePageHonoursToken(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := shared.EncodeToken(150)
|
|
page, err := shared.ParsePage("", token)
|
|
require.NoError(t, err)
|
|
require.Equal(t, shared.Page{Size: shared.DefaultPageSize, Offset: 150}, page)
|
|
}
|
|
|
|
func TestParsePageRejectsBadSize(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cases := []string{"abc", "0", "-3", strconv.Itoa(shared.MaxPageSize + 1)}
|
|
for _, raw := range cases {
|
|
t.Run(raw, func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := shared.ParsePage(raw, "")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "invalid page_size")
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParsePageRejectsBadToken(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
negative := base64.RawURLEncoding.EncodeToString([]byte("-1"))
|
|
notInt := base64.RawURLEncoding.EncodeToString([]byte("abc"))
|
|
|
|
cases := []string{"!!!", negative, notInt}
|
|
for _, raw := range cases {
|
|
t.Run(raw, func(t *testing.T) {
|
|
t.Parallel()
|
|
_, err := shared.ParsePage("", raw)
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "invalid page_token")
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestEncodeTokenRoundtrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
token := shared.EncodeToken(42)
|
|
page, err := shared.ParsePage("", token)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 42, page.Offset)
|
|
}
|
|
|
|
func TestWindowFirstPageWithMore(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, end, nextOffset, hasMore := shared.Window(120, shared.Page{Size: 50})
|
|
require.Equal(t, 0, start)
|
|
require.Equal(t, 50, end)
|
|
require.Equal(t, 50, nextOffset)
|
|
require.True(t, hasMore)
|
|
}
|
|
|
|
func TestWindowMiddlePage(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, end, nextOffset, hasMore := shared.Window(120, shared.Page{Size: 50, Offset: 50})
|
|
require.Equal(t, 50, start)
|
|
require.Equal(t, 100, end)
|
|
require.Equal(t, 100, nextOffset)
|
|
require.True(t, hasMore)
|
|
}
|
|
|
|
func TestWindowLastPageExact(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, end, nextOffset, hasMore := shared.Window(100, shared.Page{Size: 50, Offset: 50})
|
|
require.Equal(t, 50, start)
|
|
require.Equal(t, 100, end)
|
|
require.Equal(t, 0, nextOffset)
|
|
require.False(t, hasMore)
|
|
}
|
|
|
|
func TestWindowOffsetPastEnd(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, end, nextOffset, hasMore := shared.Window(10, shared.Page{Size: 50, Offset: 200})
|
|
require.Equal(t, 10, start)
|
|
require.Equal(t, 10, end)
|
|
require.Equal(t, 0, nextOffset)
|
|
require.False(t, hasMore)
|
|
}
|
|
|
|
func TestWindowZeroSizeFallsBackToDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
start, end, _, hasMore := shared.Window(120, shared.Page{Size: 0})
|
|
require.Equal(t, 0, start)
|
|
require.Equal(t, shared.DefaultPageSize, end)
|
|
require.True(t, hasMore)
|
|
}
|