148 lines
5.5 KiB
Go
148 lines
5.5 KiB
Go
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("Nova Prime")
|
|
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, "Nova Prime", accountResponse.Account.RaceName)
|
|
|
|
lookup := h.lookupUserByEmail(t, email)
|
|
require.Equal(t, "Nova Prime", lookup.User.RaceName)
|
|
}
|
|
|
|
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("Blocked Nova")
|
|
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)
|
|
}
|