From c3ec0a145b15588852a45abae886337128945c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Espino=20Garc=C3=ADa?= Date: Tue, 15 Mar 2022 15:18:35 +0100 Subject: [PATCH] [GraphQL POC] Omit self from pretty display name (#19783) * Omit self from pretty display name * Fix test --- api4/resolver_channel.go | 20 ++++++++++++++------ api4/resolver_channel_test.go | 20 +++++++++++++++----- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/api4/resolver_channel.go b/api4/resolver_channel.go index 404c1f7a47..4196dba231 100644 --- a/api4/resolver_channel.go +++ b/api4/resolver_channel.go @@ -94,7 +94,7 @@ func postProcessChannels(c *web.Context, channels []*model.Channel) ([]*channel, if users == nil { 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}) @@ -103,17 +103,25 @@ func postProcessChannels(c *web.Context, channels []*model.Channel) ([]*channel, 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)) // TODO: optimize this logic. // Name computation happens repeatedly for the same user from // multiple channels. for _, u := range users { + if u.Id == omitUserId { + continue + } displayNames = append(displayNames, getPrettyDNForUser(displaySetting, u)) } 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 { @@ -121,15 +129,15 @@ func getPrettyDNForUser(displaySetting string, user *model.User) string { switch displaySetting { case "nickname_full_name": displayName = user.Nickname - if displayName == "" { + if strings.TrimSpace(displayName) == "" { displayName = user.GetFullName() } - if displayName == "" { + if strings.TrimSpace(displayName) == "" { displayName = user.Username } case "full_name": displayName = user.GetFullName() - if displayName == "" { + if strings.TrimSpace(displayName) == "" { displayName = user.Username } default: // the "username" case also falls under this one. diff --git a/api4/resolver_channel_test.go b/api4/resolver_channel_test.go index a74c842b71..42e7a95ce7 100644 --- a/api4/resolver_channel_test.go +++ b/api4/resolver_channel_test.go @@ -374,79 +374,89 @@ func TestGetPrettyDNForUsers(t *testing.T) { t.Run("nickname_full_name", func(t *testing.T) { users := []*model.User{ { + Id: "user1", Nickname: "nick1", Username: "user1", FirstName: "first1", LastName: "last1", }, { + Id: "user2", Nickname: "nick2", Username: "user2", FirstName: "first2", 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{ { + Id: "user1", Username: "user1", FirstName: "first1", LastName: "last1", }, { + Id: "user2", Username: "user2", FirstName: "first2", 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) { users := []*model.User{ { + Id: "user1", Nickname: "nick1", Username: "user1", FirstName: "first1", LastName: "last1", }, { + Id: "user2", Nickname: "nick2", Username: "user2", FirstName: "first2", 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{ { + Id: "user1", Username: "user1", }, { + Id: "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) { users := []*model.User{ { + Id: "user1", Nickname: "nick1", Username: "user1", FirstName: "first1", LastName: "last1", }, { + Id: "user2", Nickname: "nick2", Username: "user2", FirstName: "first2", LastName: "last2", }, } - assert.Equal(t, "user1, user2", getPrettyDNForUsers("username", users)) + assert.Equal(t, "user2", getPrettyDNForUsers("username", users, "user1")) }) }