feat: game lobby service

This commit is contained in:
Ilia Denisov
2026-04-25 23:20:55 +02:00
committed by GitHub
parent 32dc29359a
commit 48b0056b49
336 changed files with 57074 additions and 1418 deletions
+125
View File
@@ -0,0 +1,125 @@
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)
}