]> source.dussan.org Git - gitea.git/commitdiff
Fix Matrix and MSTeams nil dereference (#28089)
authorKN4CK3R <admin@oldschoolhack.me>
Fri, 17 Nov 2023 11:17:33 +0000 (12:17 +0100)
committerGitHub <noreply@github.com>
Fri, 17 Nov 2023 11:17:33 +0000 (12:17 +0100)
Fixes #28088
Fixes #28094

Added missing tests.

---------

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
services/webhook/dingtalk_test.go
services/webhook/discord_test.go
services/webhook/feishu_test.go
services/webhook/general_test.go
services/webhook/matrix.go
services/webhook/matrix_test.go
services/webhook/msteams.go
services/webhook/msteams_test.go
services/webhook/packagist_test.go
services/webhook/slack_test.go
services/webhook/telegram_test.go

index 7289c751f384529f4effdad84c94b35b419e1773..a03fa46f1458f4ff4539919017902d06bf707b43 100644 (file)
@@ -188,6 +188,21 @@ func TestDingTalkPayload(t *testing.T) {
                assert.Equal(t, "http://localhost:3000/test/repo", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL))
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(DingtalkPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &DingtalkPayload{}, pl)
+
+               assert.Equal(t, "Package created: GiteaContainer:latest by user1", pl.(*DingtalkPayload).ActionCard.Text)
+               assert.Equal(t, "Package created: GiteaContainer:latest by user1", pl.(*DingtalkPayload).ActionCard.Title)
+               assert.Equal(t, "view package", pl.(*DingtalkPayload).ActionCard.SingleTitle)
+               assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL))
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index 6a276e9e874daa550f16401fd8ddbdcab7b8789e..b567cbc395db1d93982889c7b88e3d1d8b117c13 100644 (file)
@@ -211,6 +211,24 @@ func TestDiscordPayload(t *testing.T) {
                assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(DiscordPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &DiscordPayload{}, pl)
+
+               assert.Len(t, pl.(*DiscordPayload).Embeds, 1)
+               assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*DiscordPayload).Embeds[0].Title)
+               assert.Empty(t, pl.(*DiscordPayload).Embeds[0].Description)
+               assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", pl.(*DiscordPayload).Embeds[0].URL)
+               assert.Equal(t, p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.Name)
+               assert.Equal(t, setting.AppURL+p.Sender.UserName, pl.(*DiscordPayload).Embeds[0].Author.URL)
+               assert.Equal(t, p.Sender.AvatarURL, pl.(*DiscordPayload).Embeds[0].Author.IconURL)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index a3182e82b09af0ca700bbbea5151662599a43c38..98bc50dedec877441fdc372db4ee4a44b56a3dd7 100644 (file)
@@ -144,6 +144,18 @@ func TestFeishuPayload(t *testing.T) {
                assert.Equal(t, "[test/repo] Repository created", pl.(*FeishuPayload).Content.Text)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(FeishuPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &FeishuPayload{}, pl)
+
+               assert.Equal(t, "Package created: GiteaContainer:latest by user1", pl.(*FeishuPayload).Content.Text)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index a9a8c6b5212c10db9737aa8f02bf12b9bed091bf..41bac3fd04d23b3aa1d4489632fcf16e2c36f534 100644 (file)
@@ -303,6 +303,36 @@ func repositoryTestPayload() *api.RepositoryPayload {
        }
 }
 
+func packageTestPayload() *api.PackagePayload {
+       return &api.PackagePayload{
+               Action: api.HookPackageCreated,
+               Sender: &api.User{
+                       UserName:  "user1",
+                       AvatarURL: "http://localhost:3000/user1/avatar",
+               },
+               Repository: nil,
+               Organization: &api.User{
+                       UserName:  "org1",
+                       AvatarURL: "http://localhost:3000/org1/avatar",
+               },
+               Package: &api.Package{
+                       Owner: &api.User{
+                               UserName:  "user1",
+                               AvatarURL: "http://localhost:3000/user1/avatar",
+                       },
+                       Repository: nil,
+                       Creator: &api.User{
+                               UserName:  "user1",
+                               AvatarURL: "http://localhost:3000/user1/avatar",
+                       },
+                       Type:    "container",
+                       Name:    "GiteaContainer",
+                       Version: "latest",
+                       HTMLURL: "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest",
+               },
+       }
+}
+
 func TestGetIssuesPayloadInfo(t *testing.T) {
        p := issueTestPayload()
 
index ab7e6b72c25f1f7fce0a7c2a9fa0538e4c161e6e..602d16ef39b0ec99880b2a98056ea2900dbdec6e 100644 (file)
@@ -212,14 +212,14 @@ func (m *MatrixPayload) Repository(p *api.RepositoryPayload) (api.Payloader, err
 
 func (m *MatrixPayload) Package(p *api.PackagePayload) (api.Payloader, error) {
        senderLink := MatrixLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
-       repoLink := MatrixLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName)
+       packageLink := MatrixLinkFormatter(p.Package.HTMLURL, p.Package.Name)
        var text string
 
        switch p.Action {
        case api.HookPackageCreated:
-               text = fmt.Sprintf("[%s] Package published by %s", repoLink, senderLink)
+               text = fmt.Sprintf("[%s] Package published by %s", packageLink, senderLink)
        case api.HookPackageDeleted:
-               text = fmt.Sprintf("[%s] Package deleted by %s", repoLink, senderLink)
+               text = fmt.Sprintf("[%s] Package deleted by %s", packageLink, senderLink)
        }
 
        return getMatrixPayload(text, nil, m.MsgType), nil
index 8c710942280fae92dbeb2fb96a21518140b4ed0e..99a22fbd7eb3afc352ea6cfa1ebfa925abf663aa 100644 (file)
@@ -155,6 +155,19 @@ func TestMatrixPayload(t *testing.T) {
                assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Repository created by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(MatrixPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &MatrixPayload{}, pl)
+
+               assert.Equal(t, `[[GiteaContainer](http://localhost:3000/user1/-/packages/container/GiteaContainer/latest)] Package published by [user1](https://try.gitea.io/user1)`, pl.(*MatrixPayload).Body)
+               assert.Equal(t, `[<a href="http://localhost:3000/user1/-/packages/container/GiteaContainer/latest">GiteaContainer</a>] Package published by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index f58da3fe1cd6feced89e5ce0d0566a53d68d6685..37810b4cd3959eb3ced683a3cf80854c731b56bf 100644 (file)
@@ -316,11 +316,12 @@ func GetMSTeamsPayload(p api.Payloader, event webhook_module.HookEventType, _ st
 }
 
 func createMSTeamsPayload(r *api.Repository, s *api.User, title, text, actionTarget string, color int, fact *MSTeamsFact) *MSTeamsPayload {
-       facts := []MSTeamsFact{
-               {
+       facts := make([]MSTeamsFact, 0, 2)
+       if r != nil {
+               facts = append(facts, MSTeamsFact{
                        Name:  "Repository:",
                        Value: r.FullName,
-               },
+               })
        }
        if fact != nil {
                facts = append(facts, *fact)
index 990a535df5c1a8a314c8d6f2e15ede4a31d2045a..8d1aed604086ebc8b4397537297b793b37490a1c 100644 (file)
@@ -329,6 +329,33 @@ func TestMSTeamsPayload(t *testing.T) {
                assert.Equal(t, "http://localhost:3000/test/repo", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(MSTeamsPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &MSTeamsPayload{}, pl)
+
+               assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*MSTeamsPayload).Title)
+               assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*MSTeamsPayload).Summary)
+               assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
+               assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
+               assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
+               assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 1)
+               for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
+                       if fact.Name == "Package:" {
+                               assert.Equal(t, p.Package.Name, fact.Value)
+                       } else {
+                               t.Fail()
+                       }
+               }
+               assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
+               assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
+               assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index 932b56fe9b9a1b141eec20d3f94baa792cecc254..26d01b0555ddcb268e4aaab8f389e22f22f16b6e 100644 (file)
@@ -115,6 +115,15 @@ func TestPackagistPayload(t *testing.T) {
                require.Nil(t, pl)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(PackagistPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.Nil(t, pl)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index d9828f374f0dd1009cd4eb661d9d380ff7b847ee..b1340963e230131824b4826171e0a31e7c7ca56a 100644 (file)
@@ -144,6 +144,18 @@ func TestSlackPayload(t *testing.T) {
                assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Repository created by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(SlackPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &SlackPayload{}, pl)
+
+               assert.Equal(t, "Package created: <http://localhost:3000/user1/-/packages/container/GiteaContainer/latest|GiteaContainer:latest> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()
 
index b42b0ccda88471bce1ed570ef3072e14ee34ae05..5b9927d0571e2535bc82306a48ab561130b93bb5 100644 (file)
@@ -144,6 +144,18 @@ func TestTelegramPayload(t *testing.T) {
                assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Repository created`, pl.(*TelegramPayload).Message)
        })
 
+       t.Run("Package", func(t *testing.T) {
+               p := packageTestPayload()
+
+               d := new(TelegramPayload)
+               pl, err := d.Package(p)
+               require.NoError(t, err)
+               require.NotNil(t, pl)
+               require.IsType(t, &TelegramPayload{}, pl)
+
+               assert.Equal(t, `Package created: <a href="http://localhost:3000/user1/-/packages/container/GiteaContainer/latest">GiteaContainer:latest</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*TelegramPayload).Message)
+       })
+
        t.Run("Wiki", func(t *testing.T) {
                p := wikiTestPayload()