From 9a4f3ce1e5b22a297eeb00b2aaff44f88304ae8c Mon Sep 17 00:00:00 2001 From: George Goldberg Date: Mon, 8 Oct 2018 16:39:03 +0100 Subject: MM-12251: Add flag to MoveChannel to remove all deactivated users. (#9515) --- app/channel.go | 8 +++++++- app/channel_test.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/channel.go b/app/channel.go index 54b589175..93037cf05 100644 --- a/app/channel.go +++ b/app/channel.go @@ -1670,7 +1670,13 @@ func (a *App) PermanentDeleteChannel(channel *model.Channel) *model.AppError { // This function is intended for use from the CLI. It is not robust against people joining the channel while the move // is in progress, and therefore should not be used from the API without first fixing this potential race condition. -func (a *App) MoveChannel(team *model.Team, channel *model.Channel, user *model.User) *model.AppError { +func (a *App) MoveChannel(team *model.Team, channel *model.Channel, user *model.User, removeDeactivatedMembers bool) *model.AppError { + if removeDeactivatedMembers { + if result := <-a.Srv.Store.Channel().RemoveAllDeactivatedMembers(channel.Id); result.Err != nil { + return result.Err + } + } + // Check that all channel members are in the destination team. channelMembers, err := a.GetChannelMembersPage(channel.Id, 0, 10000000) if err != nil { diff --git a/app/channel_test.go b/app/channel_test.go index 0501b9406..4b09bbb78 100644 --- a/app/channel_test.go +++ b/app/channel_test.go @@ -98,7 +98,7 @@ func TestMoveChannel(t *testing.T) { t.Fatal(err) } - if err := th.App.MoveChannel(targetTeam, channel1, th.BasicUser); err == nil { + if err := th.App.MoveChannel(targetTeam, channel1, th.BasicUser, false); err == nil { t.Fatal("Should have failed due to mismatched members.") } @@ -106,7 +106,34 @@ func TestMoveChannel(t *testing.T) { t.Fatal(err) } - if err := th.App.MoveChannel(targetTeam, channel1, th.BasicUser); err != nil { + if err := th.App.MoveChannel(targetTeam, channel1, th.BasicUser, false); err != nil { + t.Fatal(err) + } + + // Test moving a channel with a deactivated user who isn't in the destination team. + // It should fail, unless removeDeactivatedMembers is true. + deacivatedUser := th.CreateUser() + channel2 := th.CreateChannel(sourceTeam) + + if _, err := th.App.AddUserToTeam(sourceTeam.Id, deacivatedUser.Id, ""); err != nil { + t.Fatal(err) + } + if _, err := th.App.AddUserToChannel(th.BasicUser, channel2); err != nil { + t.Fatal(err) + } + if _, err := th.App.AddUserToChannel(deacivatedUser, channel2); err != nil { + t.Fatal(err) + } + + if _, err := th.App.UpdateActive(deacivatedUser, false); err != nil { + t.Fatal(err) + } + + if err := th.App.MoveChannel(targetTeam, channel2, th.BasicUser, false); err == nil { + t.Fatal("Should have failed due to mismatched deacivated member.") + } + + if err := th.App.MoveChannel(targetTeam, channel2, th.BasicUser, true); err != nil { t.Fatal(err) } } -- cgit v1.2.3-1-g7c22