feat: user service
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user