169 lines
4.9 KiB
Go
169 lines
4.9 KiB
Go
package account
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"galaxy/user/internal/domain/common"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestUserAccountValidate(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
createdAt := time.Unix(1_775_240_000, 0).UTC()
|
|
updatedAt := createdAt.Add(2 * time.Hour)
|
|
|
|
tests := []struct {
|
|
name string
|
|
record UserAccount
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid without declared country or display name",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
},
|
|
},
|
|
{
|
|
name: "valid with declared country and display name",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
DisplayName: common.DisplayName("PilotNova"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
DeclaredCountry: common.CountryCode("DE"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
},
|
|
},
|
|
{
|
|
name: "missing user name",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid display name",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
DisplayName: common.DisplayName("Pilot Nova"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "updated before created",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: createdAt.Add(-time.Second),
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "valid soft-deleted after update",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
DeletedAt: timePtr(updatedAt),
|
|
},
|
|
},
|
|
{
|
|
name: "deleted at before created",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
DeletedAt: timePtr(createdAt.Add(-time.Second)),
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "deleted at zero",
|
|
record: UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
DeletedAt: timePtr(time.Time{}),
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := tt.record.Validate()
|
|
if tt.wantErr {
|
|
require.Error(t, err)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUserAccountIsDeleted(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
createdAt := time.Unix(1_775_240_000, 0).UTC()
|
|
record := UserAccount{
|
|
UserID: common.UserID("user-123"),
|
|
Email: common.Email("pilot@example.com"),
|
|
UserName: common.UserName("player-abcdefgh"),
|
|
PreferredLanguage: common.LanguageTag("en"),
|
|
TimeZone: common.TimeZoneName("Europe/Berlin"),
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: createdAt,
|
|
}
|
|
require.False(t, record.IsDeleted())
|
|
|
|
deleted := record
|
|
deletedAt := createdAt.Add(time.Minute)
|
|
deleted.DeletedAt = &deletedAt
|
|
require.True(t, deleted.IsDeleted())
|
|
}
|
|
|
|
func timePtr(value time.Time) *time.Time {
|
|
return &value
|
|
}
|