From d40d216b5709701dc99248788b80f68541397150 Mon Sep 17 00:00:00 2001 From: Ashish Bhate Date: Thu, 7 Apr 2022 02:12:31 +0530 Subject: [PATCH] [MM-43073] broadcast post unread websocket when CRT off (#19927) * [MM-43073] broadcast post unread websocket with CRT off * clean up debug Co-authored-by: Mattermod --- api4/post_test.go | 33 ++++++++++++++++++++++++++++++++- app/channel.go | 2 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/api4/post_test.go b/api4/post_test.go index 70346303ba..b13958028e 100644 --- a/api4/post_test.go +++ b/api4/post_test.go @@ -2719,7 +2719,12 @@ func TestSetPostUnreadWithoutCollapsedThreads(t *testing.T) { require.Nil(t, appErr) t.Run("Mark reply post as unread", func(t *testing.T) { - _, err := th.Client.SetPostUnread(th.BasicUser.Id, replyPost1.Id, false) + userWSClient, err := th.CreateWebSocketClient() + require.NoError(t, err) + defer userWSClient.Close() + userWSClient.Listen() + + _, err = th.Client.SetPostUnread(th.BasicUser.Id, replyPost1.Id, false) require.NoError(t, err) channelUnread, appErr := th.App.GetChannelUnread(th.BasicChannel.Id, th.BasicUser.Id) require.Nil(t, appErr) @@ -2732,6 +2737,32 @@ func TestSetPostUnreadWithoutCollapsedThreads(t *testing.T) { // MentionCountRoot should be zero so that supported clients don't show the channel as unread require.Equal(t, channelUnread.MsgCountRoot, int64(0)) + // test websocket event for marking post as unread + var caught bool + var exit bool + var data map[string]interface{} + for { + select { + case ev := <-userWSClient.EventChannel: + if ev.EventType() == model.WebsocketEventPostUnread { + caught = true + data = ev.GetData() + } + case <-time.After(1 * time.Second): + exit = true + } + if exit { + break + } + } + require.Truef(t, caught, "User should have received %s event", model.WebsocketEventPostUnread) + msgCount, ok := data["msg_count"] + require.True(t, ok) + require.EqualValues(t, 3, msgCount) + mentionCount, ok := data["mention_count"] + require.True(t, ok) + require.EqualValues(t, 3, mentionCount) + threadMembership, appErr := th.App.GetThreadMembershipForUser(th.BasicUser.Id, rootPost1.Id) require.Nil(t, appErr) thread, appErr := th.App.GetThreadForUser(th.BasicTeam.Id, threadMembership, false) diff --git a/app/channel.go b/app/channel.go index 85505aaad1..f29f23b32e 100644 --- a/app/channel.go +++ b/app/channel.go @@ -2715,6 +2715,8 @@ func (a *App) markChannelAsUnreadFromPostCRTUnsupported(postID string, userID st if nErr != nil { return channelUnread, model.NewAppError("MarkChannelAsUnreadFromPost", "app.channel.update_last_viewed_at_post.app_error", nil, nErr.Error(), http.StatusInternalServerError) } + a.sendWebSocketPostUnreadEvent(channelUnread, postID, false) + a.UpdateMobileAppBadge(userID) return channelUnread, nil }