* Fix MM53181

* Add tests
Этот коммит содержится в:
Daniel Espino García
2023-12-14 09:32:41 +01:00
коммит произвёл GitHub
родитель 9d6bfc77ae
Коммит 917a032baf
2 изменённых файлов: 84 добавлений и 0 удалений

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

@@ -574,6 +574,7 @@ func (a *App) SendEphemeralPost(c request.CTX, userID string, post *model.Post)
// If we failed to sanitize the post, we still want to remove the metadata.
sanitizedPost = post.Clone()
sanitizedPost.Metadata = nil
sanitizedPost.DelProp(model.PostPropsPreviewedPost)
}
post = sanitizedPost
@@ -599,6 +600,18 @@ func (a *App) UpdateEphemeralPost(c request.CTX, userID string, post *model.Post
message := model.NewWebSocketEvent(model.WebsocketEventPostEdited, "", post.ChannelId, userID, nil, "")
post = a.PreparePostForClientWithEmbedsAndImages(c, post, true, false, true)
post = model.AddPostActionCookies(post, a.PostActionCookieSecret())
sanitizedPost, appErr := a.SanitizePostMetadataForUser(c, post, userID)
if appErr != nil {
mlog.Error("Failed to sanitize post metadata for user", mlog.String("user_id", userID), mlog.Err(appErr))
// If we failed to sanitize the post, we still want to remove the metadata.
sanitizedPost = post.Clone()
sanitizedPost.Metadata = nil
sanitizedPost.DelProp(model.PostPropsPreviewedPost)
}
post = sanitizedPost
postJSON, jsonErr := post.ToJSON()
if jsonErr != nil {
c.Logger().Warn("Failed to encode post to JSON", mlog.Err(jsonErr))
@@ -768,6 +781,7 @@ func (a *App) UpdatePost(c request.CTX, receivedUpdatedPost *model.Post, safeUpd
// If we failed to sanitize the post, we still want to remove the metadata.
sanitizedPost = rpost.Clone()
sanitizedPost.Metadata = nil
sanitizedPost.DelProp(model.PostPropsPreviewedPost)
}
rpost = sanitizedPost

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

@@ -1379,6 +1379,76 @@ func TestPatchPostInArchivedChannel(t *testing.T) {
require.Equal(t, "api.post.patch_post.can_not_update_post_in_deleted.error", err.Id)
}
func TestUpdateEphemeralPost(t *testing.T) {
t.Run("Post contains preview if the user has permissions", func(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
th.AddUserToChannel(th.BasicUser, th.BasicChannel)
referencedPost := &model.Post{
ChannelId: th.BasicChannel.Id,
Message: "hello world",
UserId: th.BasicUser.Id,
}
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.SiteURL = "http://mymattermost.com"
})
th.Context.Session().UserId = th.BasicUser.Id
referencedPost, err := th.App.CreatePost(th.Context, referencedPost, th.BasicChannel, false, false)
require.Nil(t, err)
permalink := fmt.Sprintf("%s/%s/pl/%s", *th.App.Config().ServiceSettings.SiteURL, th.BasicTeam.Name, referencedPost.Id)
testPost := &model.Post{
ChannelId: th.BasicChannel.Id,
Message: permalink,
UserId: th.BasicUser.Id,
}
testPost = th.App.UpdateEphemeralPost(th.Context, th.BasicUser.Id, testPost)
require.NotNil(t, testPost.Metadata)
require.Len(t, testPost.Metadata.Embeds, 1)
require.Equal(t, model.PostEmbedPermalink, testPost.Metadata.Embeds[0].Type)
})
t.Run("Post does not contain preview if the user has no permissions", func(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
privateChannel := th.CreatePrivateChannel(th.Context, th.BasicTeam)
th.AddUserToChannel(th.BasicUser, privateChannel)
th.AddUserToChannel(th.BasicUser2, th.BasicChannel)
referencedPost := &model.Post{
ChannelId: privateChannel.Id,
Message: "hello world",
UserId: th.BasicUser.Id,
}
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.ServiceSettings.SiteURL = "http://mymattermost.com"
})
th.Context.Session().UserId = th.BasicUser.Id
referencedPost, err := th.App.CreatePost(th.Context, referencedPost, th.BasicChannel, false, false)
require.Nil(t, err)
permalink := fmt.Sprintf("%s/%s/pl/%s", *th.App.Config().ServiceSettings.SiteURL, th.BasicTeam.Name, referencedPost.Id)
testPost := &model.Post{
ChannelId: th.BasicChannel.Id,
Message: permalink,
UserId: th.BasicUser2.Id,
}
testPost = th.App.UpdateEphemeralPost(th.Context, th.BasicUser2.Id, testPost)
require.Nil(t, testPost.Metadata.Embeds)
})
}
func TestUpdatePost(t *testing.T) {
t.Run("call PreparePostForClient before returning", func(t *testing.T) {
th := Setup(t).InitBasic()