Include deleted channels on get user channels endpoint (#13877)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
8f0bedf9c9
Коммит
a43439dd60
@@ -753,7 +753,7 @@ func getChannelsForTeamForUser(c *Context, w http.ResponseWriter, r *http.Reques
|
||||
return
|
||||
}
|
||||
|
||||
channels, err := c.App.GetChannelsForUser(c.Params.TeamId, c.Params.UserId, false)
|
||||
channels, err := c.App.GetChannelsForUser(c.Params.TeamId, c.Params.UserId, c.Params.IncludeDeleted)
|
||||
if err != nil {
|
||||
c.Err = err
|
||||
return
|
||||
|
||||
@@ -776,43 +776,64 @@ func TestGetChannelsForTeamForUser(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
Client := th.Client
|
||||
|
||||
channels, resp := Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, "")
|
||||
CheckNoError(t, resp)
|
||||
t.Run("get channels for the team for user", func(t *testing.T) {
|
||||
channels, resp := Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")
|
||||
CheckNoError(t, resp)
|
||||
|
||||
found := make([]bool, 3)
|
||||
for _, c := range channels {
|
||||
if c.Id == th.BasicChannel.Id {
|
||||
found[0] = true
|
||||
} else if c.Id == th.BasicChannel2.Id {
|
||||
found[1] = true
|
||||
} else if c.Id == th.BasicPrivateChannel.Id {
|
||||
found[2] = true
|
||||
found := make([]bool, 3)
|
||||
for _, c := range channels {
|
||||
if c.Id == th.BasicChannel.Id {
|
||||
found[0] = true
|
||||
} else if c.Id == th.BasicChannel2.Id {
|
||||
found[1] = true
|
||||
} else if c.Id == th.BasicPrivateChannel.Id {
|
||||
found[2] = true
|
||||
}
|
||||
|
||||
require.True(t, c.TeamId == "" || c.TeamId == th.BasicTeam.Id)
|
||||
}
|
||||
|
||||
require.True(t, c.TeamId == "" || c.TeamId == th.BasicTeam.Id)
|
||||
}
|
||||
for _, f := range found {
|
||||
require.True(t, f, "missing a channel")
|
||||
}
|
||||
|
||||
for _, f := range found {
|
||||
require.True(t, f, "missing a channel")
|
||||
}
|
||||
channels, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, resp.Etag)
|
||||
CheckEtag(t, channels, resp)
|
||||
|
||||
channels, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, resp.Etag)
|
||||
CheckEtag(t, channels, resp)
|
||||
_, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, "junk", false, "")
|
||||
CheckBadRequestStatus(t, resp)
|
||||
|
||||
_, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, "junk", "")
|
||||
CheckBadRequestStatus(t, resp)
|
||||
_, resp = Client.GetChannelsForTeamForUser("junk", th.BasicUser.Id, false, "")
|
||||
CheckBadRequestStatus(t, resp)
|
||||
|
||||
_, resp = Client.GetChannelsForTeamForUser("junk", th.BasicUser.Id, "")
|
||||
CheckBadRequestStatus(t, resp)
|
||||
_, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser2.Id, false, "")
|
||||
CheckForbiddenStatus(t, resp)
|
||||
|
||||
_, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser2.Id, "")
|
||||
CheckForbiddenStatus(t, resp)
|
||||
_, resp = Client.GetChannelsForTeamForUser(model.NewId(), th.BasicUser.Id, false, "")
|
||||
CheckForbiddenStatus(t, resp)
|
||||
|
||||
_, resp = Client.GetChannelsForTeamForUser(model.NewId(), th.BasicUser.Id, "")
|
||||
CheckForbiddenStatus(t, resp)
|
||||
_, resp = th.SystemAdminClient.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")
|
||||
CheckNoError(t, resp)
|
||||
})
|
||||
|
||||
_, resp = th.SystemAdminClient.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, "")
|
||||
CheckNoError(t, resp)
|
||||
t.Run("deleted channel could be retrieved using the proper flag", func(t *testing.T) {
|
||||
testChannel := &model.Channel{
|
||||
DisplayName: "dn_" + model.NewId(),
|
||||
Name: GenerateTestChannelName(),
|
||||
Type: model.CHANNEL_OPEN,
|
||||
TeamId: th.BasicTeam.Id,
|
||||
CreatorId: th.BasicUser.Id,
|
||||
}
|
||||
th.App.CreateChannel(testChannel, true)
|
||||
defer th.App.PermanentDeleteChannel(testChannel)
|
||||
channels, resp := Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")
|
||||
CheckNoError(t, resp)
|
||||
assert.Equal(t, 6, len(channels))
|
||||
th.App.DeleteChannel(testChannel, th.BasicUser.Id)
|
||||
channels, resp = Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")
|
||||
CheckNoError(t, resp)
|
||||
assert.Equal(t, 5, len(channels))
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetAllChannels(t *testing.T) {
|
||||
|
||||
@@ -118,7 +118,7 @@ func testJoinCommands(t *testing.T, alias string) {
|
||||
rs6 := Client.Must(Client.ExecuteCommand(channel0.Id, "/"+alias+" "+channel3.Name)).(*model.CommandResponse)
|
||||
require.False(t, strings.HasSuffix(rs6.GotoLocation, "/"+team.Name+"/channels/"+channel3.Name), "should not have joined direct message channel")
|
||||
|
||||
c1 := Client.Must(Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, "")).([]*model.Channel)
|
||||
c1 := Client.Must(Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")).([]*model.Channel)
|
||||
|
||||
found := false
|
||||
for _, c := range c1 {
|
||||
@@ -261,7 +261,7 @@ func TestLeaveCommands(t *testing.T) {
|
||||
_, err := Client.ExecuteCommand(channel3.Id, "/leave")
|
||||
require.NotNil(t, err, "should fail leaving direct channel")
|
||||
|
||||
cdata := Client.Must(Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, "")).([]*model.Channel)
|
||||
cdata := Client.Must(Client.GetChannelsForTeamForUser(th.BasicTeam.Id, th.BasicUser.Id, false, "")).([]*model.Channel)
|
||||
|
||||
found := false
|
||||
for _, c := range cdata {
|
||||
|
||||
@@ -107,6 +107,7 @@ func TestMoveChannel(t *testing.T) {
|
||||
// It should fail, unless removeDeactivatedMembers is true.
|
||||
deacivatedUser := th.CreateUser()
|
||||
channel2 := th.CreateChannel(sourceTeam)
|
||||
defer th.App.PermanentDeleteChannel(channel2)
|
||||
|
||||
_, err = th.App.AddUserToTeam(sourceTeam.Id, deacivatedUser.Id, "")
|
||||
require.Nil(t, err)
|
||||
@@ -136,6 +137,7 @@ func TestMoveChannel(t *testing.T) {
|
||||
|
||||
channel3, err = th.App.CreateChannel(channel3, false)
|
||||
require.Nil(t, err)
|
||||
defer th.App.PermanentDeleteChannel(channel3)
|
||||
|
||||
err = th.App.MoveChannel(targetTeam, channel3, th.BasicUser, false)
|
||||
assert.Nil(t, err)
|
||||
@@ -208,6 +210,7 @@ func TestJoinDefaultChannelsExperimentalDefaultChannels(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
|
||||
basicChannel2 := th.CreateChannel(th.BasicTeam)
|
||||
defer th.App.PermanentDeleteChannel(basicChannel2)
|
||||
defaultChannelList := []string{th.BasicChannel.Name, basicChannel2.Name, basicChannel2.Name}
|
||||
th.App.Config().TeamSettings.ExperimentalDefaultChannels = defaultChannelList
|
||||
|
||||
@@ -259,6 +262,7 @@ func TestCreateChannelDisplayNameTrimsWhitespace(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
|
||||
channel, err := th.App.CreateChannel(&model.Channel{DisplayName: " Public 1 ", Name: "public1", Type: model.CHANNEL_OPEN, TeamId: th.BasicTeam.Id}, false)
|
||||
defer th.App.PermanentDeleteChannel(channel)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, channel.DisplayName, "Public 1")
|
||||
}
|
||||
@@ -390,30 +394,6 @@ func TestAddUserToChannelCreatesChannelMemberHistoryRecord(t *testing.T) {
|
||||
assert.Equal(t, groupUserIds, channelMemberHistoryUserIds)
|
||||
}
|
||||
|
||||
/*func TestRemoveUserFromChannelUpdatesChannelMemberHistoryRecord(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
// a user creates a channel
|
||||
publicChannel := th.createChannel(th.BasicTeam, model.CHANNEL_OPEN)
|
||||
histories, err := th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, publicChannel.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Len(t, histories, 1)
|
||||
assert.Equal(t, th.BasicUser.Id, histories[0].UserId)
|
||||
assert.Equal(t, publicChannel.Id, histories[0].ChannelId)
|
||||
assert.Nil(t, histories[0].LeaveTime)
|
||||
|
||||
// the user leaves that channel
|
||||
if err := th.App.LeaveChannel(publicChannel.Id, th.BasicUser.Id); err != nil {
|
||||
require.Fail(t, "Failed to remove user from channel. Error: " + err.Message)
|
||||
}
|
||||
histories = store.Must(th.App.Srv().Store.ChannelMemberHistory().GetUsersInChannelDuring(model.GetMillis()-100, model.GetMillis()+100, publicChannel.Id)).([]*model.ChannelMemberHistoryResult)
|
||||
assert.Len(t, histories, 1)
|
||||
assert.Equal(t, th.BasicUser.Id, histories[0].UserId)
|
||||
assert.Equal(t, publicChannel.Id, histories[0].ChannelId)
|
||||
assert.NotNil(t, histories[0].LeaveTime)
|
||||
}*/
|
||||
|
||||
func TestLeaveDefaultChannel(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
@@ -828,6 +808,36 @@ func TestGetChannelMembersTimezones(t *testing.T) {
|
||||
assert.Equal(t, 2, len(timezones))
|
||||
}
|
||||
|
||||
func TestGetChannelsForUser(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
channel := &model.Channel{
|
||||
DisplayName: fmt.Sprintf("Public"),
|
||||
Name: fmt.Sprintf("public"),
|
||||
Type: model.CHANNEL_OPEN,
|
||||
CreatorId: th.BasicUser.Id,
|
||||
TeamId: th.BasicTeam.Id,
|
||||
}
|
||||
th.App.CreateChannel(channel, true)
|
||||
defer th.App.PermanentDeleteChannel(channel)
|
||||
defer th.TearDown()
|
||||
|
||||
channelList, err := th.App.GetChannelsForUser(th.BasicTeam.Id, th.BasicUser.Id, false)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, *channelList, 4)
|
||||
|
||||
th.App.DeleteChannel(channel, th.BasicUser.Id)
|
||||
|
||||
// Now we get all the non-archived channels for the user
|
||||
channelList, err = th.App.GetChannelsForUser(th.BasicTeam.Id, th.BasicUser.Id, false)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, *channelList, 3)
|
||||
|
||||
// Now we get all the channels, even though are archived, for the user
|
||||
channelList, err = th.App.GetChannelsForUser(th.BasicTeam.Id, th.BasicUser.Id, true)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, *channelList, 4)
|
||||
}
|
||||
|
||||
func TestGetPublicChannelsForTeam(t *testing.T) {
|
||||
th := Setup(t)
|
||||
team := th.CreateTeam()
|
||||
|
||||
@@ -212,6 +212,15 @@ func (c *Client4) GetChannelByNameRoute(channelName, teamId string) string {
|
||||
return fmt.Sprintf(c.GetTeamRoute(teamId)+"/channels/name/%v", channelName)
|
||||
}
|
||||
|
||||
func (c *Client4) GetChannelsForTeamForUserRoute(teamId, userId string, includeDeleted bool) string {
|
||||
route := fmt.Sprintf(c.GetUserRoute(userId) + c.GetTeamRoute(teamId) + "/channels")
|
||||
if includeDeleted {
|
||||
query := fmt.Sprintf("?include_deleted=%v", includeDeleted)
|
||||
return route + query
|
||||
}
|
||||
return route
|
||||
}
|
||||
|
||||
func (c *Client4) GetChannelByNameForTeamNameRoute(channelName, teamName string) string {
|
||||
return fmt.Sprintf(c.GetTeamByNameRoute(teamName)+"/channels/name/%v", channelName)
|
||||
}
|
||||
@@ -2282,8 +2291,8 @@ func (c *Client4) GetPublicChannelsByIdsForTeam(teamId string, channelIds []stri
|
||||
}
|
||||
|
||||
// GetChannelsForTeamForUser returns a list channels of on a team for a user.
|
||||
func (c *Client4) GetChannelsForTeamForUser(teamId, userId, etag string) ([]*Channel, *Response) {
|
||||
r, err := c.DoApiGet(c.GetUserRoute(userId)+c.GetTeamRoute(teamId)+"/channels", etag)
|
||||
func (c *Client4) GetChannelsForTeamForUser(teamId, userId string, includeDeleted bool, etag string) ([]*Channel, *Response) {
|
||||
r, err := c.DoApiGet(c.GetChannelsForTeamForUserRoute(teamId, userId, includeDeleted), etag)
|
||||
if err != nil {
|
||||
return nil, BuildErrorResponse(r, err)
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ type Params struct {
|
||||
LimitBefore int
|
||||
GroupIDs string
|
||||
IncludeTotalCount bool
|
||||
IncludeDeleted bool
|
||||
}
|
||||
|
||||
func ParamsFromRequest(r *http.Request) *Params {
|
||||
@@ -296,5 +297,9 @@ func ParamsFromRequest(r *http.Request) *Params {
|
||||
params.IncludeTotalCount = val
|
||||
}
|
||||
|
||||
if val, err := strconv.ParseBool(query.Get("include_deleted")); err == nil {
|
||||
params.IncludeDeleted = val
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user