mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-06 18:02:46 +00:00
# Which Problems Are Solved As requested by @adlerhurst in https://github.com/zitadel/zitadel/pull/10415#discussion_r2298087711 , I am moving the refactoring of v2 user converter methods to a separate PR # How the Problems Are Solved Cherry-pick648c234caf# Additional Context Parent of https://github.com/zitadel/zitadel/pull/10415 (cherry picked from commitb604615cab)
180 lines
4.6 KiB
Go
180 lines
4.6 KiB
Go
package convert
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/muhlemmer/gu"
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/text/language"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
|
|
"github.com/zitadel/zitadel/internal/domain"
|
|
"github.com/zitadel/zitadel/internal/query"
|
|
"github.com/zitadel/zitadel/pkg/grpc/user/v2"
|
|
)
|
|
|
|
func Test_genderToPb(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tt := []struct {
|
|
name string
|
|
input domain.Gender
|
|
expect user.Gender
|
|
}{
|
|
{
|
|
name: "Diverse",
|
|
input: domain.GenderDiverse,
|
|
expect: user.Gender_GENDER_DIVERSE,
|
|
},
|
|
{
|
|
name: "Female",
|
|
input: domain.GenderFemale,
|
|
expect: user.Gender_GENDER_FEMALE,
|
|
},
|
|
{
|
|
name: "Male",
|
|
input: domain.GenderMale,
|
|
expect: user.Gender_GENDER_MALE,
|
|
},
|
|
{
|
|
name: "Unspecified",
|
|
input: domain.GenderUnspecified,
|
|
expect: user.Gender_GENDER_UNSPECIFIED,
|
|
},
|
|
{
|
|
name: "Unknown value",
|
|
input: domain.Gender(999),
|
|
expect: user.Gender_GENDER_UNSPECIFIED,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tt {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
got := genderToPb(tc.input)
|
|
require.Equal(t, tc.expect, got)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_humanToPb(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
now := time.Now().UTC()
|
|
assetPrefix := "prefix"
|
|
owner := "owner"
|
|
avatarKey := "avatar-key"
|
|
|
|
tt := []struct {
|
|
name string
|
|
input *query.Human
|
|
expected *user.HumanUser
|
|
}{
|
|
{
|
|
name: "all fields set",
|
|
input: &query.Human{
|
|
FirstName: "John",
|
|
LastName: "Doe",
|
|
NickName: "JD",
|
|
DisplayName: "Johnny",
|
|
PreferredLanguage: language.English,
|
|
Gender: domain.GenderMale,
|
|
AvatarKey: avatarKey,
|
|
Email: "john.doe@example.com",
|
|
IsEmailVerified: true,
|
|
Phone: "+123456789",
|
|
IsPhoneVerified: true,
|
|
PasswordChangeRequired: true,
|
|
PasswordChanged: now,
|
|
MFAInitSkipped: now,
|
|
},
|
|
expected: &user.HumanUser{
|
|
Profile: &user.HumanProfile{
|
|
GivenName: "John",
|
|
FamilyName: "Doe",
|
|
NickName: gu.Ptr("JD"),
|
|
DisplayName: gu.Ptr("Johnny"),
|
|
PreferredLanguage: gu.Ptr("en"),
|
|
Gender: gu.Ptr(user.Gender_GENDER_MALE),
|
|
AvatarUrl: domain.AvatarURL(assetPrefix, owner, avatarKey),
|
|
},
|
|
Email: &user.HumanEmail{
|
|
Email: "john.doe@example.com",
|
|
IsVerified: true,
|
|
},
|
|
Phone: &user.HumanPhone{
|
|
Phone: "+123456789",
|
|
IsVerified: true,
|
|
},
|
|
PasswordChangeRequired: true,
|
|
PasswordChanged: timestamppb.New(now),
|
|
MfaInitSkipped: timestamppb.New(now),
|
|
},
|
|
},
|
|
{
|
|
name: "zero times, not verified, unspecified gender",
|
|
input: &query.Human{
|
|
FirstName: "Jane",
|
|
LastName: "Smith",
|
|
NickName: "",
|
|
DisplayName: "",
|
|
PreferredLanguage: language.German,
|
|
Gender: domain.GenderUnspecified,
|
|
AvatarKey: "",
|
|
Email: "jane.smith@example.com",
|
|
IsEmailVerified: false,
|
|
Phone: "",
|
|
IsPhoneVerified: false,
|
|
PasswordChangeRequired: false,
|
|
PasswordChanged: time.Time{},
|
|
MFAInitSkipped: time.Time{},
|
|
},
|
|
expected: &user.HumanUser{
|
|
Profile: &user.HumanProfile{
|
|
GivenName: "Jane",
|
|
FamilyName: "Smith",
|
|
NickName: gu.Ptr(""),
|
|
DisplayName: gu.Ptr(""),
|
|
PreferredLanguage: gu.Ptr("de"),
|
|
Gender: gu.Ptr(user.Gender_GENDER_UNSPECIFIED),
|
|
AvatarUrl: domain.AvatarURL(assetPrefix, owner, ""),
|
|
},
|
|
Email: &user.HumanEmail{
|
|
Email: "jane.smith@example.com",
|
|
IsVerified: false,
|
|
},
|
|
Phone: &user.HumanPhone{
|
|
Phone: "",
|
|
IsVerified: false,
|
|
},
|
|
PasswordChangeRequired: false,
|
|
PasswordChanged: nil,
|
|
MfaInitSkipped: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "nil input",
|
|
input: nil,
|
|
expected: nil,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tt {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
if tc.input == nil {
|
|
require.Nil(t, humanToPb(nil, assetPrefix, owner))
|
|
return
|
|
}
|
|
got := humanToPb(tc.input, assetPrefix, owner)
|
|
require.Equal(t, tc.expected.Profile, got.Profile)
|
|
require.Equal(t, tc.expected.Email, got.Email)
|
|
require.Equal(t, tc.expected.Phone, got.Phone)
|
|
require.Equal(t, tc.expected.PasswordChangeRequired, got.PasswordChangeRequired)
|
|
require.Equal(t, tc.expected.PasswordChanged, got.PasswordChanged)
|
|
require.Equal(t, tc.expected.MfaInitSkipped, got.MfaInitSkipped)
|
|
})
|
|
}
|
|
}
|