[GraphQL POC] Omit self from pretty display name (#19783)

* Omit self from pretty display name

* Fix test
Этот коммит содержится в:
Daniel Espino García
2022-03-15 15:18:35 +01:00
коммит произвёл GitHub
родитель b03d87af40
Коммит c3ec0a145b
2 изменённых файлов: 29 добавлений и 11 удалений

Просмотреть файл

@@ -94,7 +94,7 @@ func postProcessChannels(c *web.Context, channels []*model.Channel) ([]*channel,
if users == nil { if users == nil {
return nil, fmt.Errorf("user info not found for channel id: %s", ch.Id) return nil, fmt.Errorf("user info not found for channel id: %s", ch.Id)
} }
prettyName = getPrettyDNForUsers(pref.Value, users) prettyName = getPrettyDNForUsers(pref.Value, users, c.AppContext.Session().UserId)
} }
res = append(res, &channel{Channel: *ch, PrettyDisplayName: prettyName}) res = append(res, &channel{Channel: *ch, PrettyDisplayName: prettyName})
@@ -103,17 +103,25 @@ func postProcessChannels(c *web.Context, channels []*model.Channel) ([]*channel,
return res, nil return res, nil
} }
func getPrettyDNForUsers(displaySetting string, users []*model.User) string { func getPrettyDNForUsers(displaySetting string, users []*model.User, omitUserId string) string {
displayNames := make([]string, 0, len(users)) displayNames := make([]string, 0, len(users))
// TODO: optimize this logic. // TODO: optimize this logic.
// Name computation happens repeatedly for the same user from // Name computation happens repeatedly for the same user from
// multiple channels. // multiple channels.
for _, u := range users { for _, u := range users {
if u.Id == omitUserId {
continue
}
displayNames = append(displayNames, getPrettyDNForUser(displaySetting, u)) displayNames = append(displayNames, getPrettyDNForUser(displaySetting, u))
} }
sort.Strings(displayNames) sort.Strings(displayNames)
return strings.Join(displayNames, ", ") result := strings.Join(displayNames, ", ")
if result == "" {
// Self DM
result = getPrettyDNForUser(displaySetting, users[0])
}
return result
} }
func getPrettyDNForUser(displaySetting string, user *model.User) string { func getPrettyDNForUser(displaySetting string, user *model.User) string {
@@ -121,15 +129,15 @@ func getPrettyDNForUser(displaySetting string, user *model.User) string {
switch displaySetting { switch displaySetting {
case "nickname_full_name": case "nickname_full_name":
displayName = user.Nickname displayName = user.Nickname
if displayName == "" { if strings.TrimSpace(displayName) == "" {
displayName = user.GetFullName() displayName = user.GetFullName()
} }
if displayName == "" { if strings.TrimSpace(displayName) == "" {
displayName = user.Username displayName = user.Username
} }
case "full_name": case "full_name":
displayName = user.GetFullName() displayName = user.GetFullName()
if displayName == "" { if strings.TrimSpace(displayName) == "" {
displayName = user.Username displayName = user.Username
} }
default: // the "username" case also falls under this one. default: // the "username" case also falls under this one.

Просмотреть файл

@@ -374,79 +374,89 @@ func TestGetPrettyDNForUsers(t *testing.T) {
t.Run("nickname_full_name", func(t *testing.T) { t.Run("nickname_full_name", func(t *testing.T) {
users := []*model.User{ users := []*model.User{
{ {
Id: "user1",
Nickname: "nick1", Nickname: "nick1",
Username: "user1", Username: "user1",
FirstName: "first1", FirstName: "first1",
LastName: "last1", LastName: "last1",
}, },
{ {
Id: "user2",
Nickname: "nick2", Nickname: "nick2",
Username: "user2", Username: "user2",
FirstName: "first2", FirstName: "first2",
LastName: "last2", LastName: "last2",
}, },
} }
assert.Equal(t, "nick1, nick2", getPrettyDNForUsers("nickname_full_name", users)) assert.Equal(t, "nick2", getPrettyDNForUsers("nickname_full_name", users, "user1"))
users = []*model.User{ users = []*model.User{
{ {
Id: "user1",
Username: "user1", Username: "user1",
FirstName: "first1", FirstName: "first1",
LastName: "last1", LastName: "last1",
}, },
{ {
Id: "user2",
Username: "user2", Username: "user2",
FirstName: "first2", FirstName: "first2",
LastName: "last2", LastName: "last2",
}, },
} }
assert.Equal(t, "first1 last1, first2 last2", getPrettyDNForUsers("nickname_full_name", users)) assert.Equal(t, "first2 last2", getPrettyDNForUsers("nickname_full_name", users, "user1"))
}) })
t.Run("full_name", func(t *testing.T) { t.Run("full_name", func(t *testing.T) {
users := []*model.User{ users := []*model.User{
{ {
Id: "user1",
Nickname: "nick1", Nickname: "nick1",
Username: "user1", Username: "user1",
FirstName: "first1", FirstName: "first1",
LastName: "last1", LastName: "last1",
}, },
{ {
Id: "user2",
Nickname: "nick2", Nickname: "nick2",
Username: "user2", Username: "user2",
FirstName: "first2", FirstName: "first2",
LastName: "last2", LastName: "last2",
}, },
} }
assert.Equal(t, "first1 last1, first2 last2", getPrettyDNForUsers("full_name", users)) assert.Equal(t, "first2 last2", getPrettyDNForUsers("full_name", users, "user1"))
users = []*model.User{ users = []*model.User{
{ {
Id: "user1",
Username: "user1", Username: "user1",
}, },
{ {
Id: "user2",
Username: "user2", Username: "user2",
}, },
} }
assert.Equal(t, "user1, user2", getPrettyDNForUsers("full_name", users)) assert.Equal(t, "user2", getPrettyDNForUsers("full_name", users, "user1"))
}) })
t.Run("username", func(t *testing.T) { t.Run("username", func(t *testing.T) {
users := []*model.User{ users := []*model.User{
{ {
Id: "user1",
Nickname: "nick1", Nickname: "nick1",
Username: "user1", Username: "user1",
FirstName: "first1", FirstName: "first1",
LastName: "last1", LastName: "last1",
}, },
{ {
Id: "user2",
Nickname: "nick2", Nickname: "nick2",
Username: "user2", Username: "user2",
FirstName: "first2", FirstName: "first2",
LastName: "last2", LastName: "last2",
}, },
} }
assert.Equal(t, "user1, user2", getPrettyDNForUsers("username", users)) assert.Equal(t, "user2", getPrettyDNForUsers("username", users, "user1"))
}) })
} }