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) 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 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. // Send an ack message.
ephemeralPost := &model.Post{ ephemeralPost := &model.Post{
Type: model.PostTypeEphemeral, Type: model.PostTypeEphemeral,
@@ -2070,7 +2078,7 @@ func (a *App) SetPostReminder(postID, userID string, targetTime int64) *model.Ap
ChannelId: metadata.ChannelId, ChannelId: metadata.ChannelId,
// It's okay to keep this non-translated. This is just a fallback. // 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. // 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{ Props: model.StringInterface{
"target_time": targetTime, "target_time": targetTime,
"team_name": metadata.TeamName, "team_name": metadata.TeamName,
@@ -2133,7 +2141,7 @@ func (a *App) CheckPostReminders() {
for _, postID := range postIDs { for _, postID := range postIDs {
metadata, err := a.Srv().Store().Post().GetPostReminderMetadata(postID) metadata, err := a.Srv().Store().Post().GetPostReminderMetadata(postID)
if err != nil { 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 continue
} }

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

@@ -3313,15 +3313,15 @@ func (s *SqlPostStore) GetPostReminders(now int64) (_ []*model.PostReminder, err
func (s *SqlPostStore) GetPostReminderMetadata(postID string) (*store.PostReminderMetadata, error) { func (s *SqlPostStore) GetPostReminderMetadata(postID string) (*store.PostReminderMetadata, error) {
meta := &store.PostReminderMetadata{} meta := &store.PostReminderMetadata{}
err := s.GetReplicaX().Get(meta, `SELECT c.id as ChannelId, err := s.GetReplicaX().Get(meta, `SELECT c.id as ChannelId,
t.name as TeamName, COALESCE(t.name, '') as TeamName,
u.locale as UserLocale, u.username as Username u.locale as UserLocale, u.username as Username
FROM Posts p, Channels c, Teams t, Users u FROM Posts p
WHERE p.ChannelId=c.Id JOIN Channels c ON p.ChannelId=c.Id
AND c.TeamId=t.Id LEFT JOIN Teams t ON c.TeamId=t.Id
AND p.UserId=u.Id JOIN Users u ON p.UserId=u.Id
AND p.Id=?`, postID) AND p.Id=?`, postID)
if err != nil { 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 return meta, nil

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

@@ -4657,6 +4657,15 @@ func testGetPostReminderMetadata(t *testing.T, ss store.Store, s SqlStore) {
ch, err = ss.Channel().Save(ch, -1) ch, err = ss.Channel().Save(ch, -1)
require.NoError(t, err) 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{ u1 := &model.User{
Email: MakeEmail(), Email: MakeEmail(),
Username: model.NewId(), Username: model.NewId(),
@@ -4675,12 +4684,28 @@ func testGetPostReminderMetadata(t *testing.T, ss store.Store, s SqlStore) {
p1, err = ss.Post().Save(p1) p1, err = ss.Post().Save(p1)
require.NoError(t, err) 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) meta, err := ss.Post().GetPostReminderMetadata(p1.Id)
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, meta.ChannelId, ch.Id) assert.Equal(t, meta.ChannelId, ch.Id)
assert.Equal(t, meta.TeamName, team.Name) assert.Equal(t, meta.TeamName, team.Name)
assert.Equal(t, meta.Username, u1.Username) assert.Equal(t, meta.Username, u1.Username)
assert.Equal(t, meta.UserLocale, u1.Locale) 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 { func getPostIds(posts []*model.Post, morePosts ...*model.Post) []string {