[MM-9937] Add support for sending a message to a different channel than where the slash command was issued from (#9878)

* add support for channel_id in a slash command response

* add test for HandleCommandResponsePost
Этот коммит содержится в:
Michael Kochell
2018-12-12 01:43:31 -05:00
коммит произвёл Hanzei
родитель 8d7cb44f30
Коммит f94567c97b
5 изменённых файлов: 156 добавлений и 3 удалений

Просмотреть файл

@@ -61,7 +61,142 @@ func TestCreateCommandPost(t *testing.T) {
}
_, err := th.App.CreateCommandPost(post, th.BasicTeam.Id, resp)
if err == nil && err.Id != "api.context.invalid_param.app_error" {
if err == nil || err.Id != "api.context.invalid_param.app_error" {
t.Fatal("should have failed - bad post type")
}
channel := th.CreateChannel(th.BasicTeam)
post = &model.Post{
ChannelId: th.BasicChannel.Id,
UserId: channel.Id,
}
_, err = th.App.CreateCommandPost(post, th.BasicTeam.Id, resp)
if err == nil || err.Id != "api.command.command_post.forbidden.app_error" {
t.Fatal("should have failed - forbidden channel post")
}
}
func TestHandleCommandResponsePost(t *testing.T) {
th := Setup().InitBasic()
defer th.TearDown()
command := &model.Command{}
args := &model.CommandArgs{
ChannelId: th.BasicChannel.Id,
TeamId: th.BasicTeam.Id,
UserId: th.BasicUser.Id,
RootId: "root_id",
ParentId: "parent_id",
}
resp := &model.CommandResponse{
Type: model.POST_EPHEMERAL,
Props: model.StringInterface{"some_key": "some value"},
Text: "some message",
}
builtIn := true
post, err := th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, args.ChannelId, post.ChannelId)
assert.Equal(t, args.RootId, post.RootId)
assert.Equal(t, args.ParentId, post.ParentId)
assert.Equal(t, args.UserId, post.UserId)
assert.Equal(t, resp.Type, post.Type)
assert.Equal(t, resp.Props, post.Props)
assert.Equal(t, resp.Text, post.Message)
assert.Nil(t, post.Props["override_icon_url"])
assert.Nil(t, post.Props["override_username"])
assert.Nil(t, post.Props["from_webhook"])
// Command is not built in, so it is a bot command.
builtIn = false
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Equal(t, "true", post.Props["from_webhook"])
builtIn = true
// Channel id is specified by response, it should override the command args value.
channel := th.CreateChannel(th.BasicTeam)
resp.ChannelId = channel.Id
th.AddUserToChannel(th.BasicUser, channel)
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, resp.ChannelId, post.ChannelId)
assert.NotEqual(t, args.ChannelId, post.ChannelId)
// Override username config is turned off. No override should occur.
th.App.Config().ServiceSettings.EnablePostUsernameOverride = false
resp.ChannelId = ""
command.Username = "Command username"
resp.Username = "Response username"
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Nil(t, post.Props["override_username"])
th.App.Config().ServiceSettings.EnablePostUsernameOverride = true
// Override username config is turned on. Override username through command property.
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, command.Username, post.Props["override_username"])
assert.Equal(t, "true", post.Props["from_webhook"])
command.Username = ""
// Override username through response property.
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, resp.Username, post.Props["override_username"])
assert.Equal(t, "true", post.Props["from_webhook"])
th.App.Config().ServiceSettings.EnablePostUsernameOverride = false
// Override icon url config is turned off. No override should occur.
th.App.Config().ServiceSettings.EnablePostIconOverride = false
command.IconURL = "Command icon url"
resp.IconURL = "Response icon url"
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Nil(t, post.Props["override_icon_url"])
th.App.Config().ServiceSettings.EnablePostIconOverride = true
// Override icon url config is turned on. Override icon url through command property.
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, command.IconURL, post.Props["override_icon_url"])
assert.Equal(t, "true", post.Props["from_webhook"])
command.IconURL = ""
// Override icon url through response property.
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, resp.IconURL, post.Props["override_icon_url"])
assert.Equal(t, "true", post.Props["from_webhook"])
// Test Slack text conversion.
resp.Text = "<!channel>"
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, "@channel", post.Message)
// Test Slack attachments text conversion.
resp.Attachments = []*model.SlackAttachment{
&model.SlackAttachment{
Text: "<!here>",
},
}
post, err = th.App.HandleCommandResponsePost(command, args, resp, builtIn)
assert.Nil(t, err)
assert.Equal(t, "@here", resp.Attachments[0].Text)
}