From a95f90cec7ca2f1505fe5d3d62d2ee19808d49e6 Mon Sep 17 00:00:00 2001 From: Ashish Bhate Date: Tue, 25 May 2021 18:51:42 +0530 Subject: [PATCH] MM-34895: LastViewed should be updated correctly for new thread membership (#17673) Summary Update LastViewed correctly for new thread membership Ticket Link https://mattermost.atlassian.net/browse/MM-34895 --- api4/user_test.go | 4 ++-- store/sqlstore/thread_store.go | 6 +++++- store/storetest/thread_store.go | 13 +++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/api4/user_test.go b/api4/user_test.go index 40076927e5..2dd087d4db 100644 --- a/api4/user_test.go +++ b/api4/user_test.go @@ -5766,8 +5766,8 @@ func TestMaintainUnreadRepliesInThread(t *testing.T) { // replying to the thread clears reply count, so it should be 0 checkThreadListReplies(t, th, th.Client, th.BasicUser.Id, 0, 1, nil) - // the other user should have 2 replies - checkThreadListReplies(t, th, th.SystemAdminClient, th.SystemAdminUser.Id, 2, 1, nil) + // the other user should have 1 reply - the reply from the regular user + checkThreadListReplies(t, th, th.SystemAdminClient, th.SystemAdminUser.Id, 1, 1, nil) // mark all as read for user resp := th.Client.UpdateThreadsReadForUser(th.BasicUser.Id, th.BasicTeam.Id) diff --git a/store/sqlstore/thread_store.go b/store/sqlstore/thread_store.go index 66f0336ee7..84d2266fe0 100644 --- a/store/sqlstore/thread_store.go +++ b/store/sqlstore/thread_store.go @@ -521,11 +521,15 @@ func (s *SqlThreadStore) MaintainMembership(userId, postId string, following, in if incrementMentions { mentions = 1 } + var lastViewed int64 + if updateViewedTimestamp { + lastViewed = now + } membership, err = s.SaveMembership(&model.ThreadMembership{ PostId: postId, UserId: userId, Following: following, - LastViewed: 0, + LastViewed: lastViewed, LastUpdated: now, UnreadMentions: int64(mentions), }) diff --git a/store/storetest/thread_store.go b/store/storetest/thread_store.go index d9e89a89d2..10aa624510 100644 --- a/store/storetest/thread_store.go +++ b/store/storetest/thread_store.go @@ -297,11 +297,9 @@ func testThreadStorePopulation(t *testing.T, ss store.Store) { t.Run("Thread membership 'viewed' timestamp is updated properly", func(t *testing.T) { newPosts := makeSomePosts() - _, e := ss.Thread().MaintainMembership(newPosts[0].UserId, newPosts[0].Id, true, false, true, false, false) + tm, e := ss.Thread().MaintainMembership(newPosts[0].UserId, newPosts[0].Id, true, false, true, false, false) require.NoError(t, e) - m, err1 := ss.Thread().GetMembershipForUser(newPosts[0].UserId, newPosts[0].Id) - require.NoError(t, err1) - require.Equal(t, int64(0), m.LastViewed) + require.Equal(t, int64(0), tm.LastViewed) _, e = ss.Thread().MaintainMembership(newPosts[0].UserId, newPosts[0].Id, true, false, true, true, false) require.NoError(t, e) @@ -310,6 +308,13 @@ func testThreadStorePopulation(t *testing.T, ss store.Store) { require.Greater(t, m2.LastViewed, int64(0)) }) + t.Run("Thread membership 'viewed' timestamp is updated properly for new membership", func(t *testing.T) { + newPosts := makeSomePosts() + tm, e := ss.Thread().MaintainMembership(newPosts[0].UserId, newPosts[0].Id, true, false, false, true, false) + require.NoError(t, e) + require.NotEqual(t, int64(0), tm.LastViewed) + }) + t.Run("Thread last updated is changed when channel is updated after UpdateLastViewedAtPost for mark unread", func(t *testing.T) { newPosts := makeSomePosts() _, e := ss.Thread().MaintainMembership(newPosts[0].UserId, newPosts[0].Id, true, false, true, false, false)