[GH-21216] Function removeUserFromChannel return error (#26428)

This commit is contained in:
Anna Os 2024-03-25 12:53:22 +01:00 committed by GitHub
parent ba2d11ff3d
commit 00d48b04ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 97 additions and 30 deletions

View File

@ -60,22 +60,27 @@ func channelUsersAddCmdF(c client.Client, cmd *cobra.Command, args []string) err
return errors.Errorf("unable to find channel %q", args[0])
}
var result *multierror.Error
users := getUsersFromUserArgs(c, args[1:])
for i, user := range users {
addUserToChannel(c, channel, user, args[i+1])
err := addUserToChannel(c, channel, user, args[i+1])
if err != nil {
printer.PrintError(err.Error())
result = multierror.Append(result, err)
}
}
return nil
return result.ErrorOrNil()
}
func addUserToChannel(c client.Client, channel *model.Channel, user *model.User, userArg string) {
func addUserToChannel(c client.Client, channel *model.Channel, user *model.User, userArg string) error {
if user == nil {
printer.PrintError("Can't find user '" + userArg + "'")
return
return fmt.Errorf("unable to find user %q", userArg)
}
if _, _, err := c.AddChannelMember(context.TODO(), channel.Id, user.Id); err != nil {
printer.PrintError("Unable to add '" + userArg + "' to " + channel.Name + ". Error: " + err.Error())
return fmt.Errorf("unable to add %q to %q. Error: %w", userArg, channel.Name, err)
}
return nil
}
func channelUsersRemoveCmdF(c client.Client, cmd *cobra.Command, args []string) error {
@ -94,27 +99,32 @@ func channelUsersRemoveCmdF(c client.Client, cmd *cobra.Command, args []string)
return errors.Errorf("unable to find channel %q", args[0])
}
var result *multierror.Error
if allUsers {
if err := removeAllUsersFromChannel(c, channel); err != nil {
return err
}
} else {
for i, user := range getUsersFromUserArgs(c, args[1:]) {
removeUserFromChannel(c, channel, user, args[i+1])
err := removeUserFromChannel(c, channel, user, args[i+1])
if err != nil {
printer.PrintError(err.Error())
result = multierror.Append(result, err)
}
}
}
return nil
return result.ErrorOrNil()
}
func removeUserFromChannel(c client.Client, channel *model.Channel, user *model.User, userArg string) {
func removeUserFromChannel(c client.Client, channel *model.Channel, user *model.User, userArg string) error {
if user == nil {
printer.PrintError("Can't find user '" + userArg + "'")
return
return fmt.Errorf("unable to find user %q", userArg)
}
if _, err := c.RemoveUserFromChannel(context.TODO(), channel.Id, user.Id); err != nil {
printer.PrintError("Unable to remove '" + userArg + "' from " + channel.Name + ". Error: " + err.Error())
return fmt.Errorf("unable to remove %q from %q. Error: %w", userArg, channel.Name, err)
}
return nil
}
func removeAllUsersFromChannel(c client.Client, channel *model.Channel) error {

View File

@ -67,10 +67,10 @@ func (s *MmctlE2ETestSuite) TestChannelUsersAddCmdF() {
nonexistentUserName := "nonexistent"
err := channelUsersAddCmdF(c, &cobra.Command{}, []string{channel.Id, nonexistentUserName})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to find user")
s.Require().ErrorContains(err, nonexistentUserName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(fmt.Sprintf("Can't find user '%s'", nonexistentUserName), printer.GetErrorLines()[0])
})
s.Run("Add nonexistent user to channel/Client", func() {
@ -85,20 +85,23 @@ func (s *MmctlE2ETestSuite) TestChannelUsersAddCmdF() {
nonexistentUserName := "nonexistent"
err := channelUsersAddCmdF(s.th.Client, &cobra.Command{}, []string{channel.Id, nonexistentUserName})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to find user")
s.Require().ErrorContains(err, nonexistentUserName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(fmt.Sprintf("Can't find user '%s'", nonexistentUserName), printer.GetErrorLines()[0])
})
s.Run("Add user to channel without permission/Client", func() {
printer.Clean()
err := channelUsersAddCmdF(s.th.Client, &cobra.Command{}, []string{channel.Id, user.Id})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to add")
s.Require().ErrorContains(err, user.Id)
s.Require().ErrorContains(err, channelName)
s.Require().ErrorContains(err, "You do not have the appropriate permissions")
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(fmt.Sprintf("Unable to add '%s' to %s. Error: You do not have the appropriate permissions.", user.Id, channelName), printer.GetErrorLines()[0])
s.Require().Equal(fmt.Sprintf("unable to add %q to %q. Error: You do not have the appropriate permissions.", user.Id, channelName), printer.GetErrorLines()[0])
})
s.Run("Add user to channel/Client", func() {
@ -197,10 +200,11 @@ func (s *MmctlE2ETestSuite) TestChannelUsersRemoveCmd() {
nonexistentUserName := "nonexistent"
err := channelUsersRemoveCmdF(c, &cobra.Command{}, []string{channel.Id, nonexistentUserName})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to find user")
s.Require().ErrorContains(err, nonexistentUserName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(fmt.Sprintf("Can't find user '%s'", nonexistentUserName), printer.GetErrorLines()[0])
s.Require().Equal(fmt.Sprintf("unable to find user %q", nonexistentUserName), printer.GetErrorLines()[0])
})
s.Run("Remove nonexistent user from channel/Client", func() {
@ -215,10 +219,11 @@ func (s *MmctlE2ETestSuite) TestChannelUsersRemoveCmd() {
nonexistentUserName := "nonexistent"
err := channelUsersRemoveCmdF(s.th.Client, &cobra.Command{}, []string{channel.Id, nonexistentUserName})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to find user")
s.Require().ErrorContains(err, nonexistentUserName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Equal(fmt.Sprintf("Can't find user '%s'", nonexistentUserName), printer.GetErrorLines()[0])
s.Require().Equal(fmt.Sprintf("unable to find user %q", nonexistentUserName), printer.GetErrorLines()[0])
})
s.Run("Remove user from channel without permission/Client", func() {
@ -233,10 +238,12 @@ func (s *MmctlE2ETestSuite) TestChannelUsersRemoveCmd() {
s.Require().Equal(user.Id, (members)[0].UserId)
err := channelUsersRemoveCmdF(s.th.Client, &cobra.Command{}, []string{channel.Id, user.Id})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to remove")
s.Require().ErrorContains(err, user.Id)
s.Require().ErrorContains(err, channelName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
s.Require().Contains(printer.GetErrorLines()[0], fmt.Sprintf("Unable to remove '%s' from %s", user.Id, channelName))
s.Require().Contains(printer.GetErrorLines()[0], fmt.Sprintf("unable to remove %q from %q", user.Id, channelName))
s.Require().Contains(printer.GetErrorLines()[0], "You do not have the appropriate permissions")
})

View File

@ -159,10 +159,10 @@ func (s *MmctlUnitTestSuite) TestChannelUsersAddCmdF() {
Return(&model.ChannelMember{}, &model.Response{}, nil).
Times(1)
err := channelUsersAddCmdF(s.client, cmd, []string{channelArg, nilUserArg, userEmail})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to find user")
s.Require().ErrorContains(err, nilUserArg)
s.Len(printer.GetLines(), 0)
s.Len(printer.GetErrorLines(), 1)
s.Equal("Can't find user '"+nilUserArg+"'", printer.GetErrorLines()[0])
})
s.Run("Error adding existing user to existing channel", func() {
printer.Clean()
@ -191,11 +191,11 @@ func (s *MmctlUnitTestSuite) TestChannelUsersAddCmdF() {
Return(nil, &model.Response{}, errors.New("mock error")).
Times(1)
err := channelUsersAddCmdF(s.client, cmd, []string{channelArg, userEmail})
s.Require().Nil(err)
s.Require().ErrorContains(err, "unable to add")
s.Require().ErrorContains(err, userEmail)
s.Require().ErrorContains(err, channelName)
s.Len(printer.GetLines(), 0)
s.Len(printer.GetErrorLines(), 1)
s.Equal("Unable to add '"+userEmail+"' to "+channelName+". Error: mock error",
printer.GetErrorLines()[0])
})
}
@ -439,4 +439,54 @@ func (s *MmctlUnitTestSuite) TestChannelUsersRemoveCmd() {
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
})
s.Run("should remove user from channel throws error", func() {
printer.Clean()
cmd := &cobra.Command{}
args := []string{argsTeamChannel, userEmail}
foundTeam := &model.Team{
Id: teamID,
DisplayName: teamDisplayName,
Name: teamName,
}
foundChannel := &model.Channel{
Id: channelID,
Name: channelName,
DisplayName: channelDisplayName,
}
s.client.
EXPECT().
GetTeam(context.TODO(), teamName, "").
Return(foundTeam, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetChannelByNameIncludeDeleted(context.TODO(), channelName, foundTeam.Id, "").
Return(foundChannel, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
GetUserByEmail(context.TODO(), userEmail, "").
Return(&mockUser, &model.Response{}, nil).
Times(1)
s.client.
EXPECT().
RemoveUserFromChannel(context.TODO(), foundChannel.Id, mockUser.Id).
Return(&model.Response{StatusCode: http.StatusNotFound}, errors.New("mock error")).
Times(1)
err := channelUsersRemoveCmdF(s.client, cmd, args)
s.Require().ErrorContains(err, "unable to remove")
s.Require().ErrorContains(err, userEmail)
s.Require().ErrorContains(err, channelName)
s.Require().Len(printer.GetLines(), 0)
s.Require().Len(printer.GetErrorLines(), 1)
})
}

View File

@ -62,7 +62,7 @@ type PluginSetting struct {
//
// "longtext" will result in a multi line string that can be typed in manually.
//
// "number" will result in in integer setting that can be typed in manually.
// "number" will result in integer setting that can be typed in manually.
//
// "username" will result in a text setting that will autocomplete to a username.
//