diff --git a/store/sqlstore/thread_store.go b/store/sqlstore/thread_store.go index 9592a1eee9..afb16b77c3 100644 --- a/store/sqlstore/thread_store.go +++ b/store/sqlstore/thread_store.go @@ -460,7 +460,9 @@ func (s *SqlThreadStore) GetThreadForUser(teamId string, threadMembership *model break } } - participants = append(participants, participant) + if participant != nil { + participants = append(participants, participant) + } } result := &model.ThreadResponse{ diff --git a/store/storetest/thread_store.go b/store/storetest/thread_store.go index 1feaf4e45e..017acd5dbf 100644 --- a/store/storetest/thread_store.go +++ b/store/storetest/thread_store.go @@ -451,6 +451,25 @@ func testThreadStorePopulation(t *testing.T, ss store.Store) { require.NoError(t, err) require.Equal(t, int64(0), th.UnreadReplies) }) + + t.Run("Empty participantID should not appear in thread response", func(t *testing.T) { + newPosts := makeSomePosts() + opts := store.ThreadMembershipOpts{ + Following: true, + IncrementMentions: false, + UpdateFollowing: true, + UpdateViewedTimestamp: false, + UpdateParticipants: true, + } + m, err := ss.Thread().MaintainMembership("", newPosts[0].Id, opts) + require.NoError(t, err) + m.UserId = newPosts[0].UserId + th, err := ss.Thread().GetThreadForUser("", m, true) + require.NoError(t, err) + for _, user := range th.Participants { + require.NotNil(t, user) + } + }) } func testThreadSQLOperations(t *testing.T, ss store.Store, s SqlStore) {