diff --git a/services/webhook/telegram.go b/services/webhook/telegram.go index 4f1d98407da..d661786d7ee 100644 --- a/services/webhook/telegram.go +++ b/services/webhook/telegram.go @@ -201,9 +201,12 @@ func (telegramConvertor) WorkflowJob(p *api.WorkflowJobPayload) (TelegramPayload func createTelegramPayloadHTML(msgHTML string) TelegramPayload { // https://core.telegram.org/bots/api#formatting-options + sanitized := strings.TrimSpace(string(markup.Sanitize(msgHTML))) + // Rich messages collapse bare newlines like HTML, so keep line breaks as
. + sanitized = strings.NewReplacer("\r\n", "
", "\r", "
", "\n", "
").Replace(sanitized) return TelegramPayload{ RichMessage: InputRichMessage{ - HTML: strings.TrimSpace(string(markup.Sanitize(msgHTML))), + HTML: sanitized, }, } } diff --git a/services/webhook/telegram_test.go b/services/webhook/telegram_test.go index 3e615af8140..64c3f70e2f4 100644 --- a/services/webhook/telegram_test.go +++ b/services/webhook/telegram_test.go @@ -27,6 +27,12 @@ func TestTelegramPayload(t *testing.T) { }, p) }) + t.Run("Line breaks are kept in rich messages", func(t *testing.T) { + // Rich messages collapse bare newlines, so they must become
. + p := createTelegramPayloadHTML("first line\r\nsecond line\nthird line") + assert.Equal(t, "first line
second line
third line", p.RichMessage.HTML) + }) + t.Run("Create", func(t *testing.T) { p := createTestPayload() @@ -60,9 +66,7 @@ func TestTelegramPayload(t *testing.T) { pl, err := tc.Push(p) require.NoError(t, err) - assert.Equal(t, `[test/repo:test] 2 new commits -[2020558] commit message - user1 -[2020558] commit message - user1`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo:test] 2 new commits
[2020558] commit message - user1
[2020558] commit message - user1`, pl.RichMessage.HTML) }) t.Run("Issue", func(t *testing.T) { @@ -72,9 +76,7 @@ func TestTelegramPayload(t *testing.T) { pl, err := tc.Issue(p) require.NoError(t, err) - assert.Equal(t, `[test/repo] Issue opened: #2 crash by user1 - -issue body`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo] Issue opened: #2 crash by user1

issue body`, pl.RichMessage.HTML) p.Action = api.HookIssueClosed pl, err = tc.Issue(p) @@ -89,8 +91,7 @@ issue body`, pl.RichMessage.HTML) pl, err := tc.IssueComment(p) require.NoError(t, err) - assert.Equal(t, `[test/repo] New comment on issue #2 crash by user1 -more info needed`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo] New comment on issue #2 crash by user1
more info needed`, pl.RichMessage.HTML) }) t.Run("PullRequest", func(t *testing.T) { @@ -99,8 +100,7 @@ more info needed`, pl.RichMessage.HTML) pl, err := tc.PullRequest(p) require.NoError(t, err) - assert.Equal(t, `[test/repo] Pull request opened: #12 Fix bug by user1 -fixes bug #2`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo] Pull request opened: #12 Fix bug by user1
fixes bug #2`, pl.RichMessage.HTML) }) t.Run("PullRequestComment", func(t *testing.T) { @@ -109,8 +109,7 @@ fixes bug #2`, pl.RichMessage.HTML) pl, err := tc.IssueComment(p) require.NoError(t, err) - assert.Equal(t, `[test/repo] New comment on pull request #12 Fix bug by user1 -changes requested`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo] New comment on pull request #12 Fix bug by user1
changes requested`, pl.RichMessage.HTML) }) t.Run("Review", func(t *testing.T) { @@ -120,8 +119,7 @@ changes requested`, pl.RichMessage.HTML) pl, err := tc.Review(p, webhook_module.HookEventPullRequestReviewApproved) require.NoError(t, err) - assert.Equal(t, `[test/repo] Pull request review approved: #12 Fix bug -good job`, pl.RichMessage.HTML) + assert.Equal(t, `[test/repo] Pull request review approved: #12 Fix bug
good job`, pl.RichMessage.HTML) }) t.Run("Repository", func(t *testing.T) { @@ -206,7 +204,5 @@ func TestTelegramJSONPayload(t *testing.T) { var body TelegramPayload err = json.NewDecoder(req.Body).Decode(&body) assert.NoError(t, err) - assert.Equal(t, `[test/repo:test] 2 new commits -[2020558] commit message - user1 -[2020558] commit message - user1`, body.RichMessage.HTML) + assert.Equal(t, `[test/repo:test] 2 new commits
[2020558] commit message - user1
[2020558] commit message - user1`, body.RichMessage.HTML) }