code.gitea.io/gitea@v1.21.7/services/webhook/slack_test.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package webhook
     5  
     6  import (
     7  	"testing"
     8  
     9  	api "code.gitea.io/gitea/modules/structs"
    10  	webhook_module "code.gitea.io/gitea/modules/webhook"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestSlackPayload(t *testing.T) {
    17  	t.Run("Create", func(t *testing.T) {
    18  		p := createTestPayload()
    19  
    20  		d := new(SlackPayload)
    21  		pl, err := d.Create(p)
    22  		require.NoError(t, err)
    23  		require.NotNil(t, pl)
    24  		require.IsType(t, &SlackPayload{}, pl)
    25  
    26  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:<http://localhost:3000/test/repo/src/branch/test|test>] branch created by user1", pl.(*SlackPayload).Text)
    27  	})
    28  
    29  	t.Run("Delete", func(t *testing.T) {
    30  		p := deleteTestPayload()
    31  
    32  		d := new(SlackPayload)
    33  		pl, err := d.Delete(p)
    34  		require.NoError(t, err)
    35  		require.NotNil(t, pl)
    36  		require.IsType(t, &SlackPayload{}, pl)
    37  
    38  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:test] branch deleted by user1", pl.(*SlackPayload).Text)
    39  	})
    40  
    41  	t.Run("Fork", func(t *testing.T) {
    42  		p := forkTestPayload()
    43  
    44  		d := new(SlackPayload)
    45  		pl, err := d.Fork(p)
    46  		require.NoError(t, err)
    47  		require.NotNil(t, pl)
    48  		require.IsType(t, &SlackPayload{}, pl)
    49  
    50  		assert.Equal(t, "<http://localhost:3000/test/repo2|test/repo2> is forked to <http://localhost:3000/test/repo|test/repo>", pl.(*SlackPayload).Text)
    51  	})
    52  
    53  	t.Run("Push", func(t *testing.T) {
    54  		p := pushTestPayload()
    55  
    56  		d := new(SlackPayload)
    57  		pl, err := d.Push(p)
    58  		require.NoError(t, err)
    59  		require.NotNil(t, pl)
    60  		require.IsType(t, &SlackPayload{}, pl)
    61  
    62  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>:<http://localhost:3000/test/repo/src/branch/test|test>] 2 new commits pushed by user1", pl.(*SlackPayload).Text)
    63  	})
    64  
    65  	t.Run("Issue", func(t *testing.T) {
    66  		p := issueTestPayload()
    67  
    68  		d := new(SlackPayload)
    69  		p.Action = api.HookIssueOpened
    70  		pl, err := d.Issue(p)
    71  		require.NoError(t, err)
    72  		require.NotNil(t, pl)
    73  		require.IsType(t, &SlackPayload{}, pl)
    74  
    75  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue opened: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
    76  
    77  		p.Action = api.HookIssueClosed
    78  		pl, err = d.Issue(p)
    79  		require.NoError(t, err)
    80  		require.NotNil(t, pl)
    81  		require.IsType(t, &SlackPayload{}, pl)
    82  
    83  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue closed: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
    84  	})
    85  
    86  	t.Run("IssueComment", func(t *testing.T) {
    87  		p := issueCommentTestPayload()
    88  
    89  		d := new(SlackPayload)
    90  		pl, err := d.IssueComment(p)
    91  		require.NoError(t, err)
    92  		require.NotNil(t, pl)
    93  		require.IsType(t, &SlackPayload{}, pl)
    94  
    95  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on issue <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
    96  	})
    97  
    98  	t.Run("PullRequest", func(t *testing.T) {
    99  		p := pullRequestTestPayload()
   100  
   101  		d := new(SlackPayload)
   102  		pl, err := d.PullRequest(p)
   103  		require.NoError(t, err)
   104  		require.NotNil(t, pl)
   105  		require.IsType(t, &SlackPayload{}, pl)
   106  
   107  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request opened: <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   108  	})
   109  
   110  	t.Run("PullRequestComment", func(t *testing.T) {
   111  		p := pullRequestCommentTestPayload()
   112  
   113  		d := new(SlackPayload)
   114  		pl, err := d.IssueComment(p)
   115  		require.NoError(t, err)
   116  		require.NotNil(t, pl)
   117  		require.IsType(t, &SlackPayload{}, pl)
   118  
   119  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on pull request <http://localhost:3000/test/repo/pulls/12|#12 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   120  	})
   121  
   122  	t.Run("Review", func(t *testing.T) {
   123  		p := pullRequestTestPayload()
   124  		p.Action = api.HookIssueReviewed
   125  
   126  		d := new(SlackPayload)
   127  		pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved)
   128  		require.NoError(t, err)
   129  		require.NotNil(t, pl)
   130  		require.IsType(t, &SlackPayload{}, pl)
   131  
   132  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request review approved: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   133  	})
   134  
   135  	t.Run("Repository", func(t *testing.T) {
   136  		p := repositoryTestPayload()
   137  
   138  		d := new(SlackPayload)
   139  		pl, err := d.Repository(p)
   140  		require.NoError(t, err)
   141  		require.NotNil(t, pl)
   142  		require.IsType(t, &SlackPayload{}, pl)
   143  
   144  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Repository created by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   145  	})
   146  
   147  	t.Run("Package", func(t *testing.T) {
   148  		p := packageTestPayload()
   149  
   150  		d := new(SlackPayload)
   151  		pl, err := d.Package(p)
   152  		require.NoError(t, err)
   153  		require.NotNil(t, pl)
   154  		require.IsType(t, &SlackPayload{}, pl)
   155  
   156  		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)
   157  	})
   158  
   159  	t.Run("Wiki", func(t *testing.T) {
   160  		p := wikiTestPayload()
   161  
   162  		d := new(SlackPayload)
   163  		p.Action = api.HookWikiCreated
   164  		pl, err := d.Wiki(p)
   165  		require.NoError(t, err)
   166  		require.NotNil(t, pl)
   167  		require.IsType(t, &SlackPayload{}, pl)
   168  
   169  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New wiki page '<http://localhost:3000/test/repo/wiki/index|index>' (Wiki change comment) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   170  
   171  		p.Action = api.HookWikiEdited
   172  		pl, err = d.Wiki(p)
   173  		require.NoError(t, err)
   174  		require.NotNil(t, pl)
   175  		require.IsType(t, &SlackPayload{}, pl)
   176  
   177  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' edited (Wiki change comment) by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   178  
   179  		p.Action = api.HookWikiDeleted
   180  		pl, err = d.Wiki(p)
   181  		require.NoError(t, err)
   182  		require.NotNil(t, pl)
   183  		require.IsType(t, &SlackPayload{}, pl)
   184  
   185  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Wiki page '<http://localhost:3000/test/repo/wiki/index|index>' deleted by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   186  	})
   187  
   188  	t.Run("Release", func(t *testing.T) {
   189  		p := pullReleaseTestPayload()
   190  
   191  		d := new(SlackPayload)
   192  		pl, err := d.Release(p)
   193  		require.NoError(t, err)
   194  		require.NotNil(t, pl)
   195  		require.IsType(t, &SlackPayload{}, pl)
   196  
   197  		assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Release created: <http://localhost:3000/test/repo/releases/tag/v1.0|v1.0> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
   198  	})
   199  }
   200  
   201  func TestSlackJSONPayload(t *testing.T) {
   202  	p := pushTestPayload()
   203  
   204  	pl, err := new(SlackPayload).Push(p)
   205  	require.NoError(t, err)
   206  	require.NotNil(t, pl)
   207  	require.IsType(t, &SlackPayload{}, pl)
   208  
   209  	json, err := pl.JSONPayload()
   210  	require.NoError(t, err)
   211  	assert.NotEmpty(t, json)
   212  }
   213  
   214  func TestIsValidSlackChannel(t *testing.T) {
   215  	tt := []struct {
   216  		channelName string
   217  		expected    bool
   218  	}{
   219  		{"gitea", true},
   220  		{"#gitea", true},
   221  		{"  ", false},
   222  		{"#", false},
   223  		{" #", false},
   224  		{"gitea   ", false},
   225  		{"  gitea", false},
   226  	}
   227  
   228  	for _, v := range tt {
   229  		assert.Equal(t, v.expected, IsValidSlackChannel(v.channelName))
   230  	}
   231  }