]> source.dussan.org Git - gitea.git/commitdiff
Only provide the commit summary for Discord webhook push events (#32432)
authorKemal Zebari <60799661+kemzeb@users.noreply.github.com>
Thu, 7 Nov 2024 19:56:53 +0000 (11:56 -0800)
committerGitHub <noreply@github.com>
Thu, 7 Nov 2024 19:56:53 +0000 (19:56 +0000)
Resolves #32371.

#31970 should have just showed the commit summary, but
`strings.SplitN()` was misused such that we did not perform any
splitting at all and just used the message. This was not caught in the
unit test made in that PR since the test commit summary was > 50 (which
truncated away the commit description).

This snapshot resolves this and adds another unit test to ensure that we
only show the commit summary.

services/webhook/discord.go
services/webhook/discord_test.go
services/webhook/general_test.go

index 59e87a7e1fb67ab558a0838ed2e702a89dfc6a4f..c562d981680a871ed9295399b606c0f18c1d78e3 100644 (file)
@@ -156,7 +156,7 @@ func (d discordConvertor) Push(p *api.PushPayload) (DiscordPayload, error) {
        // for each commit, generate attachment text
        for i, commit := range p.Commits {
                // limit the commit message display to just the summary, otherwise it would be hard to read
-               message := strings.TrimRight(strings.SplitN(commit.Message, "\n", 1)[0], "\r")
+               message := strings.TrimRight(strings.SplitN(commit.Message, "\n", 2)[0], "\r")
 
                // a limit of 50 is set because GitHub does the same
                if utf8.RuneCountInString(message) > 50 {
index fbb4b24ef12dda3ba28e9e8acd74a642cba98fbe..36b99d452ea8e4b72874b59392ccec60a41a0790 100644 (file)
@@ -80,12 +80,26 @@ func TestDiscordPayload(t *testing.T) {
                assert.Equal(t, p.Sender.AvatarURL, pl.Embeds[0].Author.IconURL)
        })
 
-       t.Run("PushWithLongCommitMessage", func(t *testing.T) {
+       t.Run("PushWithMultilineCommitMessage", func(t *testing.T) {
                p := pushTestMultilineCommitMessagePayload()
 
                pl, err := dc.Push(p)
                require.NoError(t, err)
 
+               assert.Len(t, pl.Embeds, 1)
+               assert.Equal(t, "[test/repo:test] 2 new commits", pl.Embeds[0].Title)
+               assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) chore: This is a commit summary - user1\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) chore: This is a commit summary - user1", pl.Embeds[0].Description)
+               assert.Equal(t, p.Sender.UserName, pl.Embeds[0].Author.Name)
+               assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.Embeds[0].Author.URL)
+               assert.Equal(t, p.Sender.AvatarURL, pl.Embeds[0].Author.IconURL)
+       })
+
+       t.Run("PushWithLongCommitSummary", func(t *testing.T) {
+               p := pushTestPayloadWithCommitMessage("This is a commit summary ⚠️⚠️⚠️⚠️ containing 你好 ⚠️⚠️️\n\nThis is the message body")
+
+               pl, err := dc.Push(p)
+               require.NoError(t, err)
+
                assert.Len(t, pl.Embeds, 1)
                assert.Equal(t, "[test/repo:test] 2 new commits", pl.Embeds[0].Title)
                assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) This is a commit summary ⚠️⚠️⚠️⚠️ containing 你好... - user1\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) This is a commit summary ⚠️⚠️⚠️⚠️ containing 你好... - user1", pl.Embeds[0].Description)
index d6a77c94425604d39f8b9b11f417a7dcf7445d12..ef1ec7f324c82519e212d0049243c24fb2e91403 100644 (file)
@@ -68,7 +68,7 @@ func pushTestPayload() *api.PushPayload {
 }
 
 func pushTestMultilineCommitMessagePayload() *api.PushPayload {
-       return pushTestPayloadWithCommitMessage("This is a commit summary ⚠️⚠️⚠️⚠️ containing 你好 ⚠️⚠️️\n\nThis is the message body.")
+       return pushTestPayloadWithCommitMessage("chore: This is a commit summary\n\nThis is a commit description.")
 }
 
 func pushTestPayloadWithCommitMessage(message string) *api.PushPayload {