From 32151eea8a6540580b7276342b099f8caf5f4f1f Mon Sep 17 00:00:00 2001 From: Sonia <31467983+bsoniam@users.noreply.github.com> Date: Tue, 14 May 2019 10:02:39 +0200 Subject: [PATCH] Add Multi language (locale) attribute to an user --- api/management/api.go | 14 ++++++++++++-- api/management/api_test.go | 11 +++++++++++ api/management/swagger-api_management.yaml | 3 +++ pkg/management/component_test.go | 16 +++++++++++++--- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/api/management/api.go b/api/management/api.go index 9a725aef..e5024cac 100644 --- a/api/management/api.go +++ b/api/management/api.go @@ -22,6 +22,7 @@ type UserRepresentation struct { CreatedTimestamp *int64 `json:"createdTimestamp,omitempty"` Groups *[]string `json:"groups,omitempty"` Roles *[]string `json:"roles,omitempty"` + Locale *string `json:"locale,omitempty"` } type RealmRepresentation struct { @@ -59,8 +60,8 @@ type RoleRepresentation struct { } type GroupRepresentation struct { - Id *string `json:"id,omitempty"` - Name *string `json:"name,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` } type PasswordRepresentation struct { @@ -133,6 +134,11 @@ func ConvertToAPIUser(userKc kc.UserRepresentation) UserRepresentation { var phoneNumberVerified, _ = strconv.ParseBool(m["phoneNumberVerified"][0]) userRep.PhoneNumberVerified = &phoneNumberVerified } + + if m["locale"] != nil { + var locale = m["locale"][0] + userRep.Locale = &locale + } } return userRep } @@ -172,6 +178,10 @@ func ConvertToKCUser(user UserRepresentation) kc.UserRepresentation { attributes["phoneNumberVerified"] = []string{strconv.FormatBool(*user.PhoneNumberVerified)} } + if user.Locale != nil { + attributes["locale"] = []string{*user.Locale} + } + if len(attributes) > 0 { userRep.Attributes = &attributes } diff --git a/api/management/api_test.go b/api/management/api_test.go index 6574832c..691a2103 100644 --- a/api/management/api_test.go +++ b/api/management/api_test.go @@ -62,6 +62,12 @@ func TestConvertToAPIUser(t *testing.T) { kcUser.Attributes = &m m["phoneNumberVerified"] = []string{"true"} assert.True(t, *ConvertToAPIUser(kcUser).PhoneNumberVerified) + + // Locale + assert.Nil(t, ConvertToAPIUser(kcUser).Locale) + kcUser.Attributes = &m + m["locale"] = []string{"en"} + assert.NotNil(t, *ConvertToAPIUser(kcUser).Locale) } func TestConvertToKCUser(t *testing.T) { @@ -92,4 +98,9 @@ func TestConvertToKCUser(t *testing.T) { var verified = true user.PhoneNumberVerified = &verified assert.Equal(t, "true", (*ConvertToKCUser(user).Attributes)["phoneNumberVerified"][0]) + + // Locale + var locale = "it" + user.Locale = &locale + assert.Equal(t, locale, (*ConvertToKCUser(user).Attributes)["locale"][0]) } diff --git a/api/management/swagger-api_management.yaml b/api/management/swagger-api_management.yaml index 43aaeb4e..060cd456 100644 --- a/api/management/swagger-api_management.yaml +++ b/api/management/swagger-api_management.yaml @@ -763,6 +763,9 @@ components: type: array items: type: string + locale: + type: string + default: "en" UserStatus: type: object properties: diff --git a/pkg/management/component_test.go b/pkg/management/component_test.go index 50eb7c2e..207854e9 100644 --- a/pkg/management/component_test.go +++ b/pkg/management/component_test.go @@ -319,7 +319,7 @@ func TestCreateUser(t *testing.T) { assert.Equal(t, locationURL, location) } - // Create with all properties allowed by Brdige API + // Create with all properties allowed by Bridge API { var email = "toto@elca.ch" var enabled = true @@ -332,6 +332,7 @@ func TestCreateUser(t *testing.T) { var gender = "M" var birthDate = "01/01/1988" var userID = "1234-7558-7645" + var locale = "de" mockKeycloakClient.EXPECT().CreateUser(accessToken, realmName, targetRealmName, gomock.Any()).DoAndReturn( func(accessToken, realmName, targetRealmName string, kcUserRep kc.UserRepresentation) (string, error) { @@ -347,6 +348,7 @@ func TestCreateUser(t *testing.T) { assert.Equal(t, label, (*kcUserRep.Attributes)["label"][0]) assert.Equal(t, gender, (*kcUserRep.Attributes)["gender"][0]) assert.Equal(t, birthDate, (*kcUserRep.Attributes)["birthDate"][0]) + assert.Equal(t, locale, (*kcUserRep.Attributes)["locale"][0]) return locationURL, nil }).Times(1) @@ -370,6 +372,7 @@ func TestCreateUser(t *testing.T) { Label: &label, Gender: &gender, BirthDate: &birthDate, + Locale: &locale, } location, err := managementComponent.CreateUser(ctx, targetRealmName, userRep) @@ -464,6 +467,7 @@ func TestGetUser(t *testing.T) { var gender = "M" var birthDate = "01/01/1988" var createdTimestamp = time.Now().UTC().Unix() + var locale = "it" var attributes = make(map[string][]string) attributes["phoneNumber"] = []string{phoneNumber} @@ -471,6 +475,7 @@ func TestGetUser(t *testing.T) { attributes["gender"] = []string{gender} attributes["birthDate"] = []string{birthDate} attributes["phoneNumberVerified"] = []string{strconv.FormatBool(phoneNumberVerified)} + attributes["locale"] = []string{locale} var kcUserRep = kc.UserRepresentation{ Id: &id, @@ -507,6 +512,7 @@ func TestGetUser(t *testing.T) { assert.Equal(t, gender, *apiUserRep.Gender) assert.Equal(t, birthDate, *apiUserRep.BirthDate) assert.Equal(t, createdTimestamp, *apiUserRep.CreatedTimestamp) + assert.Equal(t, locale, *apiUserRep.Locale) } //Error @@ -548,6 +554,7 @@ func TestUpdateUser(t *testing.T) { var label = "Label" var gender = "M" var birthDate = "01/01/1988" + var locale = "de" var createdTimestamp = time.Now().UTC().Unix() var attributes = make(map[string][]string) @@ -556,6 +563,7 @@ func TestUpdateUser(t *testing.T) { attributes["gender"] = []string{gender} attributes["birthDate"] = []string{birthDate} attributes["phoneNumberVerified"] = []string{strconv.FormatBool(phoneNumberVerified)} + attributes["locale"] = []string{locale} var kcUserRep = kc.UserRepresentation{ Id: &id, @@ -581,6 +589,7 @@ func TestUpdateUser(t *testing.T) { Label: &label, Gender: &gender, BirthDate: &birthDate, + Locale: &locale, } var ctx = context.WithValue(context.Background(), "access_token", accessToken) @@ -605,7 +614,7 @@ func TestUpdateUser(t *testing.T) { assert.Equal(t, label, (*kcUserRep.Attributes)["label"][0]) assert.Equal(t, gender, (*kcUserRep.Attributes)["gender"][0]) assert.Equal(t, birthDate, (*kcUserRep.Attributes)["birthDate"][0]) - + assert.Equal(t, locale, (*kcUserRep.Attributes)["locale"][0]) return nil }).Times(1) @@ -629,7 +638,7 @@ func TestUpdateUser(t *testing.T) { assert.Equal(t, label, (*kcUserRep.Attributes)["label"][0]) assert.Equal(t, gender, (*kcUserRep.Attributes)["gender"][0]) assert.Equal(t, birthDate, (*kcUserRep.Attributes)["birthDate"][0]) - + assert.Equal(t, locale, (*kcUserRep.Attributes)["locale"][0]) return nil }).Times(1) @@ -645,6 +654,7 @@ func TestUpdateUser(t *testing.T) { Label: &label, Gender: &gender, BirthDate: &birthDate, + Locale: &locale, } err = managementComponent.UpdateUser(ctx, "master", id, userRepLocked)