From 85fd80d3f45d804e53d2e62ca5d8027efd14e0e0 Mon Sep 17 00:00:00 2001 From: Claudio Costa Date: Wed, 18 Aug 2021 10:39:25 +0200 Subject: [PATCH] [MM-37846] Fix payload for post deleted event (#18131) * Fix payload for post deleted event * Add test --- api4/post_test.go | 35 +++++++++++++++++++++++++++++++++++ app/post.go | 9 +++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/api4/post_test.go b/api4/post_test.go index 702ffcbfc4..712c18bc72 100644 --- a/api4/post_test.go +++ b/api4/post_test.go @@ -2035,6 +2035,41 @@ func TestDeletePost(t *testing.T) { require.NoError(t, err) } +func TestDeletePostEvent(t *testing.T) { + th := Setup(t).InitBasic() + defer th.TearDown() + + WebSocketClient, err := th.CreateWebSocketClient() + require.Nil(t, err) + WebSocketClient.Listen() + defer WebSocketClient.Close() + + _, resp := th.SystemAdminClient.DeletePost(th.BasicPost.Id) + CheckNoError(t, resp) + + var received bool + + for { + var exit bool + select { + case event := <-WebSocketClient.EventChannel: + if event.EventType() == model.WebsocketEventPostDeleted { + var post model.Post + err := json.Unmarshal([]byte(event.GetData()["post"].(string)), &post) + require.NoError(t, err) + received = true + } + case <-time.After(500 * time.Millisecond): + exit = true + } + if exit { + break + } + } + + require.True(t, received) +} + func TestDeletePostMessage(t *testing.T) { th := Setup(t).InitBasic() th.LinkUserToTeam(th.SystemAdminUser, th.BasicTeam) diff --git a/app/post.go b/app/post.go index 69cc3adbf8..b64def6ff1 100644 --- a/app/post.go +++ b/app/post.go @@ -1134,13 +1134,18 @@ func (a *App) DeletePost(postID, deleteByID string) (*model.Post, *model.AppErro } } + postJSON, jsonErr := json.Marshal(post) + if jsonErr != nil { + mlog.Warn("Failed to encode post to JSON") + } + userMessage := model.NewWebSocketEvent(model.WebsocketEventPostDeleted, "", post.ChannelId, "", nil) - userMessage.Add("post", post) + userMessage.Add("post", string(postJSON)) userMessage.GetBroadcast().ContainsSanitizedData = true a.Publish(userMessage) adminMessage := model.NewWebSocketEvent(model.WebsocketEventPostDeleted, "", post.ChannelId, "", nil) - adminMessage.Add("post", post) + adminMessage.Add("post", string(postJSON)) adminMessage.Add("delete_by", deleteByID) adminMessage.GetBroadcast().ContainsSensitiveData = true a.Publish(adminMessage)