From c317d6f2656d864a2031d0ac8898a3c46d2c93cc Mon Sep 17 00:00:00 2001 From: Shobhit Gupta Date: Tue, 23 Oct 2018 04:19:10 -0700 Subject: MM-12356 Add cli command "command delete" (#9553) * Add cli command for deleting commands * Add code/test for delete command * Fix test * Add confirm flag * Update as per comments * Uncomment test * Fix test --- app/command.go | 7 +++---- cmd/mattermost/commands/command.go | 28 ++++++++++++++++++++++++++++ cmd/mattermost/commands/command_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/app/command.go b/app/command.go index 5c7ff6ecf..e1cdc627b 100644 --- a/app/command.go +++ b/app/command.go @@ -423,10 +423,9 @@ func (a *App) DeleteCommand(commandId string) *model.AppError { if !*a.Config().ServiceSettings.EnableCommands { return model.NewAppError("DeleteCommand", "api.command.disabled.app_error", nil, "", http.StatusNotImplemented) } - - if err := (<-a.Srv.Store.Command().Delete(commandId, model.GetMillis())).Err; err != nil { - return err + result := <-a.Srv.Store.Command().Delete(commandId, model.GetMillis()) + if result.Err != nil { + return result.Err } - return nil } diff --git a/cmd/mattermost/commands/command.go b/cmd/mattermost/commands/command.go index 63f18bed6..bd0bed1fd 100644 --- a/cmd/mattermost/commands/command.go +++ b/cmd/mattermost/commands/command.go @@ -44,6 +44,15 @@ var CommandListCmd = &cobra.Command{ RunE: listCommandCmdF, } +var CommandDeleteCmd = &cobra.Command{ + Use: "delete", + Short: "Delete a slash command", + Long: `Delete a slash command. Commands can be specified by command ID.`, + Example: ` command delete commandID`, + Args: cobra.MinimumNArgs(1), + RunE: deleteCommandCmdF, +} + func init() { CommandCreateCmd.Flags().String("title", "", "Command Title") CommandCreateCmd.Flags().String("description", "", "Command Description") @@ -64,6 +73,7 @@ func init() { CommandCreateCmd, CommandMoveCmd, CommandListCmd, + CommandDeleteCmd, ) RootCmd.AddCommand(CommandCmd) } @@ -204,3 +214,21 @@ func listCommandCmdF(command *cobra.Command, args []string) error { } return nil } + +func deleteCommandCmdF(command *cobra.Command, args []string) error { + a, err := InitDBCommandContextCobra(command) + if err != nil { + return err + } + defer a.Shutdown() + + commandID := args[0] + + deleteErr := a.DeleteCommand(commandID) + if deleteErr != nil { + CommandPrintErrorln("Unable to delete command '" + commandID + "' error: " + deleteErr.Error()) + return deleteErr + } + CommandPrettyPrintln("Deleted command '" + commandID + "'") + return nil +} diff --git a/cmd/mattermost/commands/command_test.go b/cmd/mattermost/commands/command_test.go index 4e54c56b4..73ebacd08 100644 --- a/cmd/mattermost/commands/command_test.go +++ b/cmd/mattermost/commands/command_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/mattermost/mattermost-server/api4" + "github.com/mattermost/mattermost-server/model" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -126,3 +127,34 @@ func TestCreateCommand(t *testing.T) { }) } } + +func TestDeleteCommand(t *testing.T) { + th := api4.Setup().InitBasic() + defer th.TearDown() + url := "http://localhost:8000/test-command" + team := th.BasicTeam + user := th.BasicUser + th.LinkUserToTeam(user, team) + + // Check the appropriate permissions are enforced. + defaultRolePermissions := th.SaveDefaultRolePermissions() + defer func() { + th.RestoreDefaultRolePermissions(defaultRolePermissions) + }() + id := model.NewId() + c := &model.Command{ + DisplayName: "dn_" + id, + Method: "G", + TeamId: team.Id, + Username: user.Username, + URL: url, + Trigger: "test", + } + th.AddPermissionToRole(model.PERMISSION_MANAGE_SLASH_COMMANDS.Id, model.TEAM_USER_ROLE_ID) + command, _ := th.Client.CreateCommand(c) + commands, _ := th.Client.ListCommands(team.Id, true) + assert.Equal(t, len(commands), 1) + CheckCommand(t, "command", "delete", command.Id) + commands, _ = th.Client.ListCommands(team.Id, true) + assert.Equal(t, len(commands), 0) +} -- cgit v1.2.3-1-g7c22