package redisstate import ( "testing" "time" "galaxy/user/internal/domain/common" "galaxy/user/internal/domain/entitlement" "galaxy/user/internal/domain/policy" "github.com/stretchr/testify/require" ) func TestEncodeDecodePageToken(t *testing.T) { t.Parallel() before := time.Unix(1_775_250_000, 0).UTC() after := time.Unix(1_775_240_000, 0).UTC() canLogin := true canCreate := false canJoin := true filters := UserListFilters{ PaidState: entitlement.PaidStatePaid, PaidExpiresBefore: &before, PaidExpiresAfter: &after, DeclaredCountry: common.CountryCode("DE"), SanctionCode: policy.SanctionCodeLoginBlock, LimitCode: policy.LimitCodeMaxOwnedPrivateGames, CanLogin: &canLogin, CanCreatePrivateGame: &canCreate, CanJoinGame: &canJoin, } cursor := PageCursor{ CreatedAt: time.Unix(1_775_240_100, 987_000_000).UTC(), UserID: common.UserID("user-123"), } token, err := EncodePageToken(cursor, filters) require.NoError(t, err) decoded, err := DecodePageToken(token, filters) require.NoError(t, err) require.Equal(t, cursor, decoded) } func TestDecodePageTokenFilterMismatch(t *testing.T) { t.Parallel() cursor := PageCursor{ CreatedAt: time.Unix(1_775_240_100, 0).UTC(), UserID: common.UserID("user-123"), } filters := UserListFilters{ PaidState: entitlement.PaidStatePaid, } token, err := EncodePageToken(cursor, filters) require.NoError(t, err) _, err = DecodePageToken(token, UserListFilters{PaidState: entitlement.PaidStateFree}) require.ErrorIs(t, err, ErrPageTokenFiltersMismatch) } func TestDecodePageTokenRejectsInvalidInput(t *testing.T) { t.Parallel() _, err := DecodePageToken("%%%not-base64%%%", UserListFilters{}) require.Error(t, err) }