MM-50024: Handle empty team name for DM/GMs (#22160)

https://mattermost.atlassian.net/browse/MM-50024

```release-note
NONE
```
Этот коммит содержится в:
Agniva De Sarker
2023-01-31 14:02:40 +05:30
коммит произвёл GitHub
родитель bc6c071c3a
Коммит 3514e0f79f
3 изменённых файлов: 44 добавлений и 11 удалений

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

@@ -2058,8 +2058,16 @@ func (a *App) SetPostReminder(postID, userID string, targetTime int64) *model.Ap
return model.NewAppError("SetPostReminder", model.NoTranslation, nil, "", http.StatusInternalServerError).Wrap(err)
}
parsed := time.Unix(targetTime, 0).UTC().Format(time.RFC822)
parsedTime := time.Unix(targetTime, 0).UTC().Format(time.RFC822)
siteURL := *a.Config().ServiceSettings.SiteURL
var permalink string
if metadata.TeamName == "" {
permalink = fmt.Sprintf("%s/pl/%s", siteURL, postID)
} else {
permalink = fmt.Sprintf("%s/%s/pl/%s", siteURL, metadata.TeamName, postID)
}
// Send an ack message.
ephemeralPost := &model.Post{
Type: model.PostTypeEphemeral,
@@ -2070,7 +2078,7 @@ func (a *App) SetPostReminder(postID, userID string, targetTime int64) *model.Ap
ChannelId: metadata.ChannelId,
// It's okay to keep this non-translated. This is just a fallback.
// The webapp will parse the timestamp and show that in user's local timezone.
Message: fmt.Sprintf("You will be reminded about %s/%s/pl/%s by @%s at %s", siteURL, metadata.TeamName, postID, metadata.Username, parsed),
Message: fmt.Sprintf("You will be reminded about %s by @%s at %s", permalink, metadata.Username, parsedTime),
Props: model.StringInterface{
"target_time": targetTime,
"team_name": metadata.TeamName,
@@ -2133,7 +2141,7 @@ func (a *App) CheckPostReminders() {
for _, postID := range postIDs {
metadata, err := a.Srv().Store().Post().GetPostReminderMetadata(postID)
if err != nil {
mlog.Error("Failed to get post reminder metadata", mlog.Err(err))
mlog.Error("Failed to get post reminder metadata", mlog.Err(err), mlog.String("post_id", postID))
continue
}

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

@@ -3313,15 +3313,15 @@ func (s *SqlPostStore) GetPostReminders(now int64) (_ []*model.PostReminder, err
func (s *SqlPostStore) GetPostReminderMetadata(postID string) (*store.PostReminderMetadata, error) {
meta := &store.PostReminderMetadata{}
err := s.GetReplicaX().Get(meta, `SELECT c.id as ChannelId,
t.name as TeamName,
u.locale as UserLocale, u.username as Username
FROM Posts p, Channels c, Teams t, Users u
WHERE p.ChannelId=c.Id
AND c.TeamId=t.Id
AND p.UserId=u.Id
AND p.Id=?`, postID)
COALESCE(t.name, '') as TeamName,
u.locale as UserLocale, u.username as Username
FROM Posts p
JOIN Channels c ON p.ChannelId=c.Id
LEFT JOIN Teams t ON c.TeamId=t.Id
JOIN Users u ON p.UserId=u.Id
AND p.Id=?`, postID)
if err != nil {
return nil, errors.Wrap(err, "failed to get post reminder metadata")
return nil, errors.Wrapf(err, "failed to get post reminder metadata: postId %s", postID)
}
return meta, nil

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

@@ -4657,6 +4657,15 @@ func testGetPostReminderMetadata(t *testing.T, ss store.Store, s SqlStore) {
ch, err = ss.Channel().Save(ch, -1)
require.NoError(t, err)
ch2 := &model.Channel{
TeamId: "",
DisplayName: "GM_display",
Name: NewTestId(),
Type: model.ChannelTypeGroup,
}
ch2, err = ss.Channel().Save(ch2, -1)
require.NoError(t, err)
u1 := &model.User{
Email: MakeEmail(),
Username: model.NewId(),
@@ -4675,12 +4684,28 @@ func testGetPostReminderMetadata(t *testing.T, ss store.Store, s SqlStore) {
p1, err = ss.Post().Save(p1)
require.NoError(t, err)
p2 := &model.Post{
UserId: u1.Id,
ChannelId: ch2.Id,
Message: "hi there 2",
Type: model.PostTypeDefault,
}
p2, err = ss.Post().Save(p2)
require.NoError(t, err)
meta, err := ss.Post().GetPostReminderMetadata(p1.Id)
require.NoError(t, err)
assert.Equal(t, meta.ChannelId, ch.Id)
assert.Equal(t, meta.TeamName, team.Name)
assert.Equal(t, meta.Username, u1.Username)
assert.Equal(t, meta.UserLocale, u1.Locale)
meta, err = ss.Post().GetPostReminderMetadata(p2.Id)
require.NoError(t, err)
assert.Equal(t, meta.ChannelId, ch2.Id)
assert.Equal(t, meta.TeamName, "")
assert.Equal(t, meta.Username, u1.Username)
assert.Equal(t, meta.UserLocale, u1.Locale)
}
func getPostIds(posts []*model.Post, morePosts ...*model.Post) []string {