diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index ef78a4913b..e6ac025d16 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -1939,7 +1939,7 @@ func (s SqlChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType st func (s SqlChannelStore) GetMembersForUser(teamId string, userId string) (*model.ChannelMembers, *model.AppError) { var dbMembers channelMemberWithSchemeRolesList - _, err := s.GetReplica().Select(&dbMembers, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.UserId = :UserId AND (Teams.Id = :TeamId OR Teams.Id IS NULL)", map[string]interface{}{"TeamId": teamId, "UserId": userId}) + _, err := s.GetReplica().Select(&dbMembers, CHANNEL_MEMBERS_WITH_SCHEME_SELECT_QUERY+"WHERE ChannelMembers.UserId = :UserId AND (Teams.Id = :TeamId OR Teams.Id = '' OR Teams.Id IS NULL)", map[string]interface{}{"TeamId": teamId, "UserId": userId}) if err != nil { return nil, model.NewAppError("SqlChannelStore.GetMembersForUser", "store.sql_channel.get_members.app_error", nil, "teamId="+teamId+", userId="+userId+", err="+err.Error(), http.StatusInternalServerError) } diff --git a/store/storetest/channel_store.go b/store/storetest/channel_store.go index 2ced3babc5..7d3d88ff30 100644 --- a/store/storetest/channel_store.go +++ b/store/storetest/channel_store.go @@ -1630,13 +1630,57 @@ func testChannelStoreGetMembersForUser(t *testing.T, ss store.Store) { _, err = ss.Channel().SaveMember(&m2) require.Nil(t, err) - members, err := ss.Channel().GetMembersForUser(o1.TeamId, m1.UserId) - require.Nil(t, err) + t.Run("with channels", func(t *testing.T) { + var members *model.ChannelMembers + members, err = ss.Channel().GetMembersForUser(o1.TeamId, m1.UserId) + require.Nil(t, err) - // no unread messages - if len(*members) != 2 { - t.Fatal("wrong number of members") - } + assert.Len(t, *members, 2) + }) + + t.Run("with channels and direct messages", func(t *testing.T) { + _, err = ss.Channel().CreateDirectChannel(model.NewId(), m1.UserId) + require.Nil(t, err) + _, err = ss.Channel().CreateDirectChannel(model.NewId(), m1.UserId) + require.Nil(t, err) + // other user direct message + _, err = ss.Channel().CreateDirectChannel(model.NewId(), model.NewId()) + require.Nil(t, err) + + var members *model.ChannelMembers + members, err = ss.Channel().GetMembersForUser(o1.TeamId, m1.UserId) + require.Nil(t, err) + + assert.Len(t, *members, 4) + }) + + t.Run("with channels, direct channels and group messages", func(t *testing.T) { + userIds := []string{model.NewId(), model.NewId(), model.NewId(), m1.UserId} + group := &model.Channel{ + Name: model.GetGroupNameFromUserIds(userIds), + DisplayName: "test", + Type: model.CHANNEL_GROUP, + } + var channel *model.Channel + channel, err = ss.Channel().Save(group, 10000) + require.Nil(t, err) + for _, userId := range userIds { + cm := &model.ChannelMember{ + UserId: userId, + ChannelId: channel.Id, + NotifyProps: model.GetDefaultChannelNotifyProps(), + SchemeUser: true, + } + + _, err = ss.Channel().SaveMember(cm) + require.Nil(t, err) + } + var members *model.ChannelMembers + members, err = ss.Channel().GetMembersForUser(o1.TeamId, m1.UserId) + require.Nil(t, err) + + assert.Len(t, *members, 5) + }) } func testChannelStoreGetMembersForUserWithPagination(t *testing.T, ss store.Store) {