MM-38445: Set isFollowing to false only when explicitly unfollowed (#18740)

Summary
Set post.IsFollowing to false only if the post is explicitly unfollowed. Otherwise leave it as nil.

Ticket Link
https://mattermost.atlassian.net/browse/MM-38445
Этот коммит содержится в:
Ashish Bhate
2021-10-26 18:50:02 +05:30
коммит произвёл GitHub
родитель c91ab6267a
Коммит 097d32f409
2 изменённых файлов: 61 добавлений и 23 удалений

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

@@ -528,7 +528,7 @@ func (s *SqlPostStore) getPostWithCollapsedThreads(id, userID string, extended b
"COALESCE(Threads.ReplyCount, 0) as ThreadReplyCount",
"COALESCE(Threads.LastReplyAt, 0) as LastReplyAt",
"COALESCE(Threads.Participants, '[]') as ThreadParticipants",
"COALESCE(ThreadMemberships.Following, false) as IsFollowing",
"ThreadMemberships.Following as IsFollowing",
)
var post postWithExtra
@@ -879,7 +879,7 @@ func (s *SqlPostStore) getPostsCollapsedThreads(options model.GetPostsOptions) (
"COALESCE(Threads.ReplyCount, 0) as ThreadReplyCount",
"COALESCE(Threads.LastReplyAt, 0) as LastReplyAt",
"COALESCE(Threads.Participants, '[]') as ThreadParticipants",
"COALESCE(ThreadMemberships.Following, false) as IsFollowing",
"ThreadMemberships.Following as IsFollowing",
)
var posts []*postWithExtra
offset := options.PerPage * options.Page
@@ -965,7 +965,7 @@ func (s *SqlPostStore) getPostsSinceCollapsedThreads(options model.GetPostsSince
"COALESCE(Threads.ReplyCount, 0) as ThreadReplyCount",
"COALESCE(Threads.LastReplyAt, 0) as LastReplyAt",
"COALESCE(Threads.Participants, '[]') as ThreadParticipants",
"COALESCE(ThreadMemberships.Following, false) as IsFollowing",
"ThreadMemberships.Following as IsFollowing",
)
var posts []*postWithExtra
@@ -1181,7 +1181,7 @@ func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions
"COALESCE(Threads.ReplyCount, 0) as ThreadReplyCount",
"COALESCE(Threads.LastReplyAt, 0) as LastReplyAt",
"COALESCE(Threads.Participants, '[]') as ThreadParticipants",
"COALESCE(ThreadMemberships.Following, false) as IsFollowing",
"ThreadMemberships.Following as IsFollowing",
)
}
query := s.getQueryBuilder().Select(columns...)

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

@@ -502,26 +502,64 @@ func testPostStoreGet(t *testing.T, ss store.Store) {
}
func testPostStoreGetForThread(t *testing.T, ss store.Store) {
o1 := &model.Post{ChannelId: model.NewId(), UserId: model.NewId(), Message: NewTestId()}
o1, err := ss.Post().Save(o1)
require.NoError(t, err)
_, err = ss.Post().Save(&model.Post{ChannelId: o1.ChannelId, UserId: model.NewId(), Message: NewTestId(), RootId: o1.Id})
require.NoError(t, err)
t.Run("Post thread is followed", func(t *testing.T) {
o1 := &model.Post{ChannelId: model.NewId(), UserId: model.NewId(), Message: NewTestId()}
o1, err := ss.Post().Save(o1)
require.NoError(t, err)
_, err = ss.Post().Save(&model.Post{ChannelId: o1.ChannelId, UserId: model.NewId(), Message: NewTestId(), RootId: o1.Id})
require.NoError(t, err)
threadMembership := &model.ThreadMembership{
PostId: o1.Id,
UserId: o1.UserId,
Following: true,
LastViewed: 0,
LastUpdated: 0,
UnreadMentions: 0,
}
_, err = ss.Thread().SaveMembership(threadMembership)
require.NoError(t, err)
r1, err := ss.Post().Get(context.Background(), o1.Id, false, true, false, o1.UserId)
require.NoError(t, err)
require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post")
require.True(t, *r1.Posts[o1.Id].IsFollowing)
threadMembership := &model.ThreadMembership{
PostId: o1.Id,
UserId: o1.UserId,
Following: true,
LastViewed: 0,
LastUpdated: 0,
UnreadMentions: 0,
}
_, err = ss.Thread().SaveMembership(threadMembership)
require.NoError(t, err)
r1, err := ss.Post().Get(context.Background(), o1.Id, false, true, false, o1.UserId)
require.NoError(t, err)
require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post")
require.True(t, *r1.Posts[o1.Id].IsFollowing)
})
t.Run("Post thread is explicitly not followed", func(t *testing.T) {
o1 := &model.Post{ChannelId: model.NewId(), UserId: model.NewId(), Message: NewTestId()}
o1, err := ss.Post().Save(o1)
require.NoError(t, err)
_, err = ss.Post().Save(&model.Post{ChannelId: o1.ChannelId, UserId: model.NewId(), Message: NewTestId(), RootId: o1.Id})
require.NoError(t, err)
threadMembership := &model.ThreadMembership{
PostId: o1.Id,
UserId: o1.UserId,
Following: false,
LastViewed: 0,
LastUpdated: 0,
UnreadMentions: 0,
}
_, err = ss.Thread().SaveMembership(threadMembership)
require.NoError(t, err)
r1, err := ss.Post().Get(context.Background(), o1.Id, false, true, false, o1.UserId)
require.NoError(t, err)
require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post")
require.False(t, *r1.Posts[o1.Id].IsFollowing)
})
t.Run("Post threadmembership does not exist", func(t *testing.T) {
o1 := &model.Post{ChannelId: model.NewId(), UserId: model.NewId(), Message: NewTestId()}
o1, err := ss.Post().Save(o1)
require.NoError(t, err)
_, err = ss.Post().Save(&model.Post{ChannelId: o1.ChannelId, UserId: model.NewId(), Message: NewTestId(), RootId: o1.Id})
require.NoError(t, err)
r1, err := ss.Post().Get(context.Background(), o1.Id, false, true, false, o1.UserId)
require.NoError(t, err)
require.Equal(t, r1.Posts[o1.Id].CreateAt, o1.CreateAt, "invalid returned post")
require.Nil(t, r1.Posts[o1.Id].IsFollowing)
})
}
func testPostStoreGetSingle(t *testing.T, ss store.Store) {