Add /help slash command (#6650)

* Add /help slash command

* Fix copyright year

* go fmt

* Add help command test at api4

* Fix jasonblais's issue

* Update test code

* Fix unit test issue - keep config unchanged
This commit is contained in:
Jaehyun, Park
2017-06-29 23:38:56 +09:00
committed by Harrison Healey
parent 94e734c1bd
commit 50b662040c
5 changed files with 123 additions and 1 deletions

33
api/command_help_test.go Normal file
View File

@@ -0,0 +1,33 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
import (
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
"testing"
)
func TestHelpCommand(t *testing.T) {
th := Setup().InitBasic()
Client := th.BasicClient
channel := th.BasicChannel
HelpLink := *utils.Cfg.SupportSettings.HelpLink
defer func() {
*utils.Cfg.SupportSettings.HelpLink = HelpLink
}()
*utils.Cfg.SupportSettings.HelpLink = ""
rs1 := Client.Must(Client.Command(channel.Id, "/help ")).Data.(*model.CommandResponse)
if rs1.GotoLocation != model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK {
t.Fatal("failed to default help link")
}
*utils.Cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html"
rs2 := Client.Must(Client.Command(channel.Id, "/help ")).Data.(*model.CommandResponse)
if rs2.GotoLocation != "https://docs.mattermost.com/guides/user.html" {
t.Fatal("failed to help link")
}
}

33
api4/command_help_test.go Normal file
View File

@@ -0,0 +1,33 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api4
import (
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
"testing"
)
func TestHelpCommand(t *testing.T) {
th := Setup().InitBasic()
Client := th.Client
channel := th.BasicChannel
HelpLink := *utils.Cfg.SupportSettings.HelpLink
defer func() {
*utils.Cfg.SupportSettings.HelpLink = HelpLink
}()
*utils.Cfg.SupportSettings.HelpLink = ""
rs1, _ := Client.ExecuteCommand(channel.Id, "/help ")
if rs1.GotoLocation != model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK {
t.Fatal("failed to default help link")
}
*utils.Cfg.SupportSettings.HelpLink = "https://docs.mattermost.com/guides/user.html"
rs2, _ := Client.ExecuteCommand(channel.Id, "/help ")
if rs2.GotoLocation != "https://docs.mattermost.com/guides/user.html" {
t.Fatal("failed to help link")
}
}

44
app/command_help.go Normal file
View File

@@ -0,0 +1,44 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package app
import (
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
goi18n "github.com/nicksnyder/go-i18n/i18n"
)
type HelpProvider struct {
}
const (
CMD_HELP = "help"
)
func init() {
RegisterCommandProvider(&HelpProvider{})
}
func (h *HelpProvider) GetTrigger() string {
return CMD_HELP
}
func (h *HelpProvider) GetCommand(T goi18n.TranslateFunc) *model.Command {
return &model.Command{
Trigger: CMD_HELP,
AutoComplete: true,
AutoCompleteDesc: T("api.command_help.desc"),
DisplayName: T("api.command_help.name"),
}
}
func (h *HelpProvider) DoCommand(args *model.CommandArgs, message string) *model.CommandResponse {
helpLink := *utils.Cfg.SupportSettings.HelpLink
if helpLink == "" {
helpLink = model.SUPPORT_SETTINGS_DEFAULT_HELP_LINK
}
return &model.CommandResponse{GotoLocation: helpLink}
}

View File

@@ -871,6 +871,14 @@
"id": "api.command_shrug.name",
"translation": "shrug"
},
{
"id": "api.command_help.desc",
"translation": "Open the Mattermost help page"
},
{
"id": "api.command_help.name",
"translation": "help"
},
{
"id": "api.compliance.init.debug",
"translation": "Initializing compliance API routes"

View File

@@ -203,7 +203,11 @@ export default class CreateComment extends React.Component {
(data) => {
this.setState({submitting: false});
if (data.goto_location && data.goto_location.length > 0) {
browserHistory.push(data.goto_location);
if (data.goto_location.startsWith('/') || data.goto_location.includes(window.location.hostname)) {
browserHistory.push(data.goto_location);
} else {
window.open(data.goto_location);
}
}
},
(err) => {