ui: plan 01-27 done #1

Merged
developer merged 120 commits from ai/ui-client into main 2026-05-13 18:55:14 +00:00
11 changed files with 17 additions and 16 deletions
Showing only changes of commit 89bf7e6576 - Show all commits
+1
View File
@@ -0,0 +1 @@
{"sessionId":"eb7ac833-18c4-4e5b-a2c0-a53f3599c55b","pid":31048,"procStart":"Wed May 6 22:37:00 2026","acquiredAt":1778147404017}
+1 -1
View File
@@ -13,7 +13,7 @@ import (
)
// TestLobbyMyGamesList drives `lobby.my.games.list` through the
// authenticated gateway gRPC surface. `my.games.list` returns games
// authenticated edge surface (Connect / gRPC / gRPC-Web). `my.games.list` returns games
// where the caller has an active membership, so the test creates a
// private game with one user, opens enrollment, invites a second
// user, the second user redeems the invite (becomes a member), and
+1 -1
View File
@@ -13,7 +13,7 @@ import (
)
// TestLobbyOpenEnrollment drives `lobby.game.open-enrollment` through
// gateway gRPC. Owner moves draft → enrollment_open; non-owner is
// gateway authenticated edge. Owner moves draft → enrollment_open; non-owner is
// rejected; idempotent re-call on enrollment_open is a no-op (still
// returns enrollment_open).
func TestLobbyOpenEnrollment(t *testing.T) {
+2 -2
View File
@@ -11,7 +11,7 @@ import (
)
// TestSessionRevoke_SubsequentRequestsRejected revokes the caller's
// session through the user surface (signed gRPC end-to-end) and
// session through the user surface (signed authenticated-edge end-to-end) and
// asserts that subsequent authenticated calls bound to that session
// are rejected by gateway.
func TestSessionRevoke_SubsequentRequestsRejected(t *testing.T) {
@@ -35,7 +35,7 @@ func TestSessionRevoke_SubsequentRequestsRejected(t *testing.T) {
t.Fatalf("pre-revoke call failed: %v", err)
}
// Revoke own session through signed gRPC.
// Revoke own session through signed authenticated-edge call.
revokePayload, err := transcoder.RevokeMySessionRequestToPayload(&usermodel.RevokeMySessionRequest{
DeviceSessionID: sess.DeviceSessionID,
})
+2 -2
View File
@@ -14,7 +14,7 @@ import (
// TestSoftDelete_Cascade triggers `POST /api/v1/user/account/delete`
// with X-User-ID set (mirroring what gateway does after authenticated
// verification) and asserts:
// - the account fetch through the authenticated gRPC surface
// - the account fetch through the authenticated edge surface
// subsequently fails because soft-delete revoked the session;
// - the admin geo endpoint reports the user has no remaining
// country counter rows.
@@ -57,7 +57,7 @@ func TestSoftDelete_Cascade(t *testing.T) {
t.Fatalf("soft delete: status %d body=%s", resp.StatusCode, string(raw))
}
// Authenticated gRPC must now be rejected.
// Authenticated edge must now be rejected.
deadline := time.Now().Add(2 * time.Second)
var lastErr error
for time.Now().Before(deadline) {
+2 -2
View File
@@ -171,8 +171,8 @@ func (c *BackendInternalClient) Do(ctx context.Context, method, path string, bod
// BackendUserClient hits backend's `/api/v1/user/*` endpoints
// directly with `X-User-ID` set, mirroring what gateway does after
// authenticated traffic verification. Used by scenarios whose
// message_type is not registered in gateway's gRPC router (lobby
// create, soft delete, etc.).
// message_type is not registered in gateway's downstream router
// (lobby create, soft delete, etc.).
type BackendUserClient struct {
BaseURL string
UserID string
+1 -1
View File
@@ -10,7 +10,7 @@ import (
// Platform aggregates a fully booted Galaxy stack: shared Docker
// network, Postgres, Redis, mailpit, backend and gateway. Tests use
// this struct to access HTTP/gRPC endpoints, mailpit and backend
// this struct to access HTTP and authenticated-edge endpoints, mailpit and backend
// admin without touching testcontainers directly.
type Platform struct {
Network string
+1 -1
View File
@@ -12,7 +12,7 @@ import (
)
// Session is a registered device session ready to drive the
// authenticated gRPC surface.
// authenticated edge surface.
type Session struct {
Email string
DeviceSessionID string
+4 -4
View File
@@ -11,9 +11,9 @@ import (
"galaxy/transcoder"
)
// TestUserAccount_GetThroughGatewayGRPC drives the authenticated
// gRPC user surface (`user.account.get`) through gateway → backend
// → user store. The test signs an envelope, sends it via gRPC, and
// TestUserAccount_GetThroughGatewayEdge drives the authenticated
// edge user surface (`user.account.get`) through gateway → backend
// → user store. The test signs an envelope, sends it via Connect, and
// verifies the response signature, then decodes the FlatBuffers
// payload into the typed AccountResponse.
//
@@ -21,7 +21,7 @@ import (
// backend's HTTP `/api/v1/user/account`, which triggers the geo
// counter middleware. We validate the counter increments on the
// admin geo endpoint.
func TestUserAccount_GetThroughGatewayGRPC(t *testing.T) {
func TestUserAccount_GetThroughGatewayEdge(t *testing.T) {
plat := testenv.Bootstrap(t, testenv.BootstrapOptions{})
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
+1 -1
View File
@@ -11,7 +11,7 @@ import (
)
// TestUserProfileUpdate exercises `user.profile.update` over the
// authenticated gateway gRPC surface and verifies that the new
// authenticated edge surface (Connect / gRPC / gRPC-Web) and verifies that the new
// display_name is reflected by a subsequent `user.account.get`.
func TestUserProfileUpdate(t *testing.T) {
plat := testenv.Bootstrap(t, testenv.BootstrapOptions{})
+1 -1
View File
@@ -12,7 +12,7 @@ import (
// TestUserSettingsUpdate verifies `user.settings.update` accepts a
// valid BCP 47 / IANA pair and rejects malformed inputs through the
// gateway gRPC surface.
// gateway authenticated edge surface.
func TestUserSettingsUpdate(t *testing.T) {
plat := testenv.Bootstrap(t, testenv.BootstrapOptions{})
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)