package gatewayuser_test import ( "testing" contractsuserv1 "galaxy/integration/internal/contracts/userv1" "github.com/stretchr/testify/require" ) func TestGatewayUserGetMyAccountAuthenticated(t *testing.T) { h := newGatewayUserHarness(t) const ( email = "pilot@example.com" deviceSessionID = "device-session-get-account" requestID = "request-get-account" ) created := h.ensureUser(t, email, "en", gatewayUserTestTimeZone) require.Equal(t, "created", created.Outcome) clientPrivateKey := newClientPrivateKey("get-account") h.seedGatewaySession(t, deviceSessionID, created.UserID, clientPrivateKey) payload, err := contractsuserv1.EncodeGetMyAccountRequest() require.NoError(t, err) response := h.executeCommand(t, deviceSessionID, requestID, contractsuserv1.MessageTypeGetMyAccount, payload, clientPrivateKey) require.Equal(t, contractsuserv1.ResultCodeOK, response.GetResultCode()) accountResponse, err := contractsuserv1.DecodeAccountResponse(response.GetPayloadBytes()) require.NoError(t, err) require.Equal(t, created.UserID, accountResponse.Account.UserID) require.Equal(t, email, accountResponse.Account.Email) require.Equal(t, "en", accountResponse.Account.PreferredLanguage) require.Equal(t, gatewayUserTestTimeZone, accountResponse.Account.TimeZone) } func TestGatewayUserUpdateMyProfileSuccess(t *testing.T) { h := newGatewayUserHarness(t) const ( email = "pilot-profile@example.com" deviceSessionID = "device-session-update-profile" requestID = "request-update-profile" ) created := h.ensureUser(t, email, "en", gatewayUserTestTimeZone) clientPrivateKey := newClientPrivateKey("update-profile") h.seedGatewaySession(t, deviceSessionID, created.UserID, clientPrivateKey) payload, err := contractsuserv1.EncodeUpdateMyProfileRequest("NovaPrime") require.NoError(t, err) response := h.executeCommand(t, deviceSessionID, requestID, contractsuserv1.MessageTypeUpdateMyProfile, payload, clientPrivateKey) require.Equal(t, contractsuserv1.ResultCodeOK, response.GetResultCode()) accountResponse, err := contractsuserv1.DecodeAccountResponse(response.GetPayloadBytes()) require.NoError(t, err) require.Equal(t, "NovaPrime", accountResponse.Account.DisplayName) require.NotEmpty(t, accountResponse.Account.UserName) lookup := h.lookupUserByEmail(t, email) require.Equal(t, "NovaPrime", lookup.User.DisplayName) } func TestGatewayUserUpdateMySettingsSuccess(t *testing.T) { h := newGatewayUserHarness(t) const ( email = "pilot-settings@example.com" deviceSessionID = "device-session-update-settings" requestID = "request-update-settings" ) created := h.ensureUser(t, email, "en", gatewayUserTestTimeZone) clientPrivateKey := newClientPrivateKey("update-settings") h.seedGatewaySession(t, deviceSessionID, created.UserID, clientPrivateKey) payload, err := contractsuserv1.EncodeUpdateMySettingsRequest("fr-FR", "Europe/Paris") require.NoError(t, err) response := h.executeCommand(t, deviceSessionID, requestID, contractsuserv1.MessageTypeUpdateMySettings, payload, clientPrivateKey) require.Equal(t, contractsuserv1.ResultCodeOK, response.GetResultCode()) accountResponse, err := contractsuserv1.DecodeAccountResponse(response.GetPayloadBytes()) require.NoError(t, err) require.Equal(t, "fr-FR", accountResponse.Account.PreferredLanguage) require.Equal(t, "Europe/Paris", accountResponse.Account.TimeZone) lookup := h.lookupUserByEmail(t, email) require.Equal(t, "fr-FR", lookup.User.PreferredLanguage) require.Equal(t, "Europe/Paris", lookup.User.TimeZone) } func TestGatewayUserUpdateMyProfileConflict(t *testing.T) { h := newGatewayUserHarness(t) const ( email = "pilot-conflict@example.com" deviceSessionID = "device-session-profile-conflict" requestID = "request-profile-conflict" ) created := h.ensureUser(t, email, "en", gatewayUserTestTimeZone) h.applyProfileUpdateBlock(t, created.UserID) clientPrivateKey := newClientPrivateKey("profile-conflict") h.seedGatewaySession(t, deviceSessionID, created.UserID, clientPrivateKey) payload, err := contractsuserv1.EncodeUpdateMyProfileRequest("BlockedNova") require.NoError(t, err) response := h.executeCommand(t, deviceSessionID, requestID, contractsuserv1.MessageTypeUpdateMyProfile, payload, clientPrivateKey) require.Equal(t, "conflict", response.GetResultCode()) errorResponse, err := contractsuserv1.DecodeErrorResponse(response.GetPayloadBytes()) require.NoError(t, err) require.Equal(t, "conflict", errorResponse.Error.Code) require.Equal(t, "request conflicts with current state", errorResponse.Error.Message) } func TestGatewayUserUpdateMySettingsInvalidRequest(t *testing.T) { h := newGatewayUserHarness(t) const ( email = "pilot-invalid@example.com" deviceSessionID = "device-session-settings-invalid" requestID = "request-settings-invalid" ) created := h.ensureUser(t, email, "en", gatewayUserTestTimeZone) clientPrivateKey := newClientPrivateKey("settings-invalid") h.seedGatewaySession(t, deviceSessionID, created.UserID, clientPrivateKey) payload, err := contractsuserv1.EncodeUpdateMySettingsRequest("en", "Mars/Base") require.NoError(t, err) response := h.executeCommand(t, deviceSessionID, requestID, contractsuserv1.MessageTypeUpdateMySettings, payload, clientPrivateKey) require.Equal(t, "invalid_request", response.GetResultCode()) errorResponse, err := contractsuserv1.DecodeErrorResponse(response.GetPayloadBytes()) require.NoError(t, err) require.Equal(t, "invalid_request", errorResponse.Error.Code) require.NotEmpty(t, errorResponse.Error.Message) }