PLT-7212: fix missing webhook post attachments (#7011)

* fix missing webhook post attachments

* make ProcessSlackAttachments return a new slice instead of modifying it
Этот коммит содержится в:
Chris
2017-08-03 18:25:47 -05:00
коммит произвёл Christopher Speller
родитель dc884983e6
Коммит df1ff4ec97
5 изменённых файлов: 68 добавлений и 23 удалений

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

@@ -14,12 +14,12 @@ const (
)
type CommandResponse struct {
ResponseType string `json:"response_type"`
Text string `json:"text"`
Username string `json:"username"`
IconURL string `json:"icon_url"`
GotoLocation string `json:"goto_location"`
Attachments SlackAttachments `json:"attachments"`
ResponseType string `json:"response_type"`
Text string `json:"text"`
Username string `json:"username"`
IconURL string `json:"icon_url"`
GotoLocation string `json:"goto_location"`
Attachments []*SlackAttachment `json:"attachments"`
}
func (o *CommandResponse) ToJson() string {
@@ -40,7 +40,7 @@ func CommandResponseFromJson(data io.Reader) *CommandResponse {
}
o.Text = ExpandAnnouncement(o.Text)
o.Attachments.Process()
o.Attachments = ProcessSlackAttachments(o.Attachments)
return &o
}

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

@@ -28,13 +28,13 @@ type IncomingWebhook struct {
}
type IncomingWebhookRequest struct {
Text string `json:"text"`
Username string `json:"username"`
IconURL string `json:"icon_url"`
ChannelName string `json:"channel"`
Props StringInterface `json:"props"`
Attachments SlackAttachments `json:"attachments"`
Type string `json:"type"`
Text string `json:"text"`
Username string `json:"username"`
IconURL string `json:"icon_url"`
ChannelName string `json:"channel"`
Props StringInterface `json:"props"`
Attachments []*SlackAttachment `json:"attachments"`
Type string `json:"type"`
}
func (o *IncomingWebhook) ToJson() string {
@@ -209,7 +209,7 @@ func IncomingWebhookRequestFromJson(data io.Reader) *IncomingWebhookRequest {
}
o.Text = ExpandAnnouncement(o.Text)
o.Attachments.Process()
o.Attachments = ProcessSlackAttachments(o.Attachments)
return o
}

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

@@ -33,8 +33,6 @@ type SlackAttachmentField struct {
Short bool `json:"short"`
}
type SlackAttachments []*SlackAttachment
// To mention @channel via a webhook in Slack, the message should contain
// <!channel>, as explained at the bottom of this article:
// https://get.slack.help/hc/en-us/articles/202009646-Making-announcements
@@ -51,9 +49,9 @@ func ExpandAnnouncement(text string) string {
// can be found in the text attribute, or in the pretext, text, title and value
// attributes of the attachment structure. The Slack attachment structure is
// documented here: https://api.slack.com/docs/attachments
func (a *SlackAttachments) Process() {
func ProcessSlackAttachments(a []*SlackAttachment) []*SlackAttachment {
var nonNilAttachments []*SlackAttachment
for _, attachment := range *a {
for _, attachment := range a {
if attachment == nil {
continue
}
@@ -77,5 +75,5 @@ func (a *SlackAttachments) Process() {
}
attachment.Fields = nonNilFields
}
*a = nonNilAttachments
return nonNilAttachments
}

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

@@ -10,8 +10,8 @@ func TestExpandAnnouncement(t *testing.T) {
}
}
func TestSlackAnnouncementProcess(t *testing.T) {
attachments := SlackAttachments{
func TestProcessSlackAnnouncement(t *testing.T) {
attachments := []*SlackAttachment{
{
Pretext: "<!channel> pretext",
Text: "<!channel> text",
@@ -25,7 +25,7 @@ func TestSlackAnnouncementProcess(t *testing.T) {
},
}, nil,
}
attachments.Process()
attachments = ProcessSlackAttachments(attachments)
if len(attachments) != 1 || len(attachments[0].Fields) != 1 {
t.Fail()
}