From 5580c28e54015b78893c33cc3bf41da75712c4cb Mon Sep 17 00:00:00 2001 From: Thomas Balthazar Date: Tue, 17 May 2016 14:56:38 +0200 Subject: PLT-2188 Integrations: Support raw new lines in the text payload (#2993) * Integrations: Support raw new lines in the text payload * Improve support for raw new lines in text payload The regexp used to escape control characters now also searches for additional fields: text|fallback|pretext|author_name|title|value --- model/incoming_webhook_test.go | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'model/incoming_webhook_test.go') diff --git a/model/incoming_webhook_test.go b/model/incoming_webhook_test.go index 3f1754244..8b62bbbdf 100644 --- a/model/incoming_webhook_test.go +++ b/model/incoming_webhook_test.go @@ -100,3 +100,75 @@ func TestIncomingWebhookPreUpdate(t *testing.T) { o := IncomingWebhook{} o.PreUpdate() } + +func TestIncomingWebhookRequestFromJson(t *testing.T) { + texts := []string{ + `this is a test`, + `this is a test + that contains a newline and tabs`, + `this is a test \"foo + that contains a newline and tabs`, + `this is a test \"foo\" + that contains a newline and tabs`, + `this is a test \"foo\" + \" that contains a newline and tabs`, + `this is a test \"foo\" + + \" that contains a newline and tabs + `, + } + + for i, text := range texts { + // build a sample payload with the text + payload := `{ + "text": "` + text + `", + "attachments": [ + { + "fallback": "` + text + `", + + "color": "#36a64f", + + "pretext": "` + text + `", + + "author_name": "` + text + `", + "author_link": "http://flickr.com/bobby/", + "author_icon": "http://flickr.com/icons/bobby.jpg", + + "title": "` + text + `", + "title_link": "https://api.slack.com/", + + "text": "` + text + `", + + "fields": [ + { + "title": "` + text + `", + "value": "` + text + `", + "short": false + } + ], + + "image_url": "http://my-website.com/path/to/image.jpg", + "thumb_url": "http://example.com/path/to/thumb.png" + } + ] + }` + + // try to create an IncomingWebhookRequest from the payload + data := strings.NewReader(payload) + iwr := IncomingWebhookRequestFromJson(data) + + // After it has been decoded, the JSON string won't contain the escape char anymore + expected := strings.Replace(text, `\"`, `"`, -1) + if iwr == nil { + t.Fatal("IncomingWebhookRequest should not be nil") + } + if iwr.Text != expected { + t.Fatalf("Sample %d text should be: %s, got: %s", i, expected, iwr.Text) + } + attachments := iwr.Attachments.([]interface{}) + attachment := attachments[0].(map[string]interface{}) + if attachment["text"] != expected { + t.Fatalf("Sample %d attachment text should be: %s, got: %s", i, expected, attachment["text"]) + } + } +} -- cgit v1.2.3-1-g7c22