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

     1  // Copyright 2020 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 TestMatrixPayload(t *testing.T) {
    17  	t.Run("Create", func(t *testing.T) {
    18  		p := createTestPayload()
    19  
    20  		d := new(MatrixPayload)
    21  		pl, err := d.Create(p)
    22  		require.NoError(t, err)
    23  		require.NotNil(t, pl)
    24  		require.IsType(t, &MatrixPayload{}, pl)
    25  
    26  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo):[test](http://localhost:3000/test/repo/src/branch/test)] branch created by user1", pl.(*MatrixPayload).Body)
    27  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>:<a href="http://localhost:3000/test/repo/src/branch/test">test</a>] branch created by user1`, pl.(*MatrixPayload).FormattedBody)
    28  	})
    29  
    30  	t.Run("Delete", func(t *testing.T) {
    31  		p := deleteTestPayload()
    32  
    33  		d := new(MatrixPayload)
    34  		pl, err := d.Delete(p)
    35  		require.NoError(t, err)
    36  		require.NotNil(t, pl)
    37  		require.IsType(t, &MatrixPayload{}, pl)
    38  
    39  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo):test] branch deleted by user1", pl.(*MatrixPayload).Body)
    40  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>:test] branch deleted by user1`, pl.(*MatrixPayload).FormattedBody)
    41  	})
    42  
    43  	t.Run("Fork", func(t *testing.T) {
    44  		p := forkTestPayload()
    45  
    46  		d := new(MatrixPayload)
    47  		pl, err := d.Fork(p)
    48  		require.NoError(t, err)
    49  		require.NotNil(t, pl)
    50  		require.IsType(t, &MatrixPayload{}, pl)
    51  
    52  		assert.Equal(t, "[test/repo2](http://localhost:3000/test/repo2) is forked to [test/repo](http://localhost:3000/test/repo)", pl.(*MatrixPayload).Body)
    53  		assert.Equal(t, `<a href="http://localhost:3000/test/repo2">test/repo2</a> is forked to <a href="http://localhost:3000/test/repo">test/repo</a>`, pl.(*MatrixPayload).FormattedBody)
    54  	})
    55  
    56  	t.Run("Push", func(t *testing.T) {
    57  		p := pushTestPayload()
    58  
    59  		d := new(MatrixPayload)
    60  		pl, err := d.Push(p)
    61  		require.NoError(t, err)
    62  		require.NotNil(t, pl)
    63  		require.IsType(t, &MatrixPayload{}, pl)
    64  
    65  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] user1 pushed 2 commits to [test](http://localhost:3000/test/repo/src/branch/test):\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778): commit message - user1\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778): commit message - user1", pl.(*MatrixPayload).Body)
    66  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] user1 pushed 2 commits to <a href="http://localhost:3000/test/repo/src/branch/test">test</a>:<br><a href="http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778">2020558</a>: commit message - user1<br><a href="http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778">2020558</a>: commit message - user1`, pl.(*MatrixPayload).FormattedBody)
    67  	})
    68  
    69  	t.Run("Issue", func(t *testing.T) {
    70  		p := issueTestPayload()
    71  
    72  		d := new(MatrixPayload)
    73  		p.Action = api.HookIssueOpened
    74  		pl, err := d.Issue(p)
    75  		require.NoError(t, err)
    76  		require.NotNil(t, pl)
    77  		require.IsType(t, &MatrixPayload{}, pl)
    78  
    79  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue opened: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
    80  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Issue opened: <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
    81  
    82  		p.Action = api.HookIssueClosed
    83  		pl, err = d.Issue(p)
    84  		require.NoError(t, err)
    85  		require.NotNil(t, pl)
    86  		require.IsType(t, &MatrixPayload{}, pl)
    87  
    88  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue closed: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
    89  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Issue closed: <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
    90  	})
    91  
    92  	t.Run("IssueComment", func(t *testing.T) {
    93  		p := issueCommentTestPayload()
    94  
    95  		d := new(MatrixPayload)
    96  		pl, err := d.IssueComment(p)
    97  		require.NoError(t, err)
    98  		require.NotNil(t, pl)
    99  		require.IsType(t, &MatrixPayload{}, pl)
   100  
   101  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on issue [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   102  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New comment on issue <a href="http://localhost:3000/test/repo/issues/2">#2 crash</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   103  	})
   104  
   105  	t.Run("PullRequest", func(t *testing.T) {
   106  		p := pullRequestTestPayload()
   107  
   108  		d := new(MatrixPayload)
   109  		pl, err := d.PullRequest(p)
   110  		require.NoError(t, err)
   111  		require.NotNil(t, pl)
   112  		require.IsType(t, &MatrixPayload{}, pl)
   113  
   114  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request opened: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   115  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Pull request opened: <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   116  	})
   117  
   118  	t.Run("PullRequestComment", func(t *testing.T) {
   119  		p := pullRequestCommentTestPayload()
   120  
   121  		d := new(MatrixPayload)
   122  		pl, err := d.IssueComment(p)
   123  		require.NoError(t, err)
   124  		require.NotNil(t, pl)
   125  		require.IsType(t, &MatrixPayload{}, pl)
   126  
   127  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on pull request [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   128  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New comment on pull request <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   129  	})
   130  
   131  	t.Run("Review", func(t *testing.T) {
   132  		p := pullRequestTestPayload()
   133  		p.Action = api.HookIssueReviewed
   134  
   135  		d := new(MatrixPayload)
   136  		pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved)
   137  		require.NoError(t, err)
   138  		require.NotNil(t, pl)
   139  		require.IsType(t, &MatrixPayload{}, pl)
   140  
   141  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request review approved: [#12 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   142  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Pull request review approved: <a href="http://localhost:3000/test/repo/pulls/12">#12 Fix bug</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   143  	})
   144  
   145  	t.Run("Repository", func(t *testing.T) {
   146  		p := repositoryTestPayload()
   147  
   148  		d := new(MatrixPayload)
   149  		pl, err := d.Repository(p)
   150  		require.NoError(t, err)
   151  		require.NotNil(t, pl)
   152  		require.IsType(t, &MatrixPayload{}, pl)
   153  
   154  		assert.Equal(t, `[[test/repo](http://localhost:3000/test/repo)] Repository created by [user1](https://try.gitea.io/user1)`, pl.(*MatrixPayload).Body)
   155  		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)
   156  	})
   157  
   158  	t.Run("Package", func(t *testing.T) {
   159  		p := packageTestPayload()
   160  
   161  		d := new(MatrixPayload)
   162  		pl, err := d.Package(p)
   163  		require.NoError(t, err)
   164  		require.NotNil(t, pl)
   165  		require.IsType(t, &MatrixPayload{}, pl)
   166  
   167  		assert.Equal(t, `[[GiteaContainer](http://localhost:3000/user1/-/packages/container/GiteaContainer/latest)] Package published by [user1](https://try.gitea.io/user1)`, pl.(*MatrixPayload).Body)
   168  		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)
   169  	})
   170  
   171  	t.Run("Wiki", func(t *testing.T) {
   172  		p := wikiTestPayload()
   173  
   174  		d := new(MatrixPayload)
   175  		p.Action = api.HookWikiCreated
   176  		pl, err := d.Wiki(p)
   177  		require.NoError(t, err)
   178  		require.NotNil(t, pl)
   179  		require.IsType(t, &MatrixPayload{}, pl)
   180  
   181  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New wiki page '[index](http://localhost:3000/test/repo/wiki/index)' (Wiki change comment) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   182  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] New wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' (Wiki change comment) by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   183  
   184  		p.Action = api.HookWikiEdited
   185  		pl, err = d.Wiki(p)
   186  		require.NoError(t, err)
   187  		require.NotNil(t, pl)
   188  		require.IsType(t, &MatrixPayload{}, pl)
   189  
   190  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Wiki page '[index](http://localhost:3000/test/repo/wiki/index)' edited (Wiki change comment) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   191  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' edited (Wiki change comment) by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   192  
   193  		p.Action = api.HookWikiDeleted
   194  		pl, err = d.Wiki(p)
   195  		require.NoError(t, err)
   196  		require.NotNil(t, pl)
   197  		require.IsType(t, &MatrixPayload{}, pl)
   198  
   199  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Wiki page '[index](http://localhost:3000/test/repo/wiki/index)' deleted by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   200  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index">index</a>' deleted by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   201  	})
   202  
   203  	t.Run("Release", func(t *testing.T) {
   204  		p := pullReleaseTestPayload()
   205  
   206  		d := new(MatrixPayload)
   207  		pl, err := d.Release(p)
   208  		require.NoError(t, err)
   209  		require.NotNil(t, pl)
   210  		require.IsType(t, &MatrixPayload{}, pl)
   211  
   212  		assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Release created: [v1.0](http://localhost:3000/test/repo/releases/tag/v1.0) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayload).Body)
   213  		assert.Equal(t, `[<a href="http://localhost:3000/test/repo">test/repo</a>] Release created: <a href="http://localhost:3000/test/repo/releases/tag/v1.0">v1.0</a> by <a href="https://try.gitea.io/user1">user1</a>`, pl.(*MatrixPayload).FormattedBody)
   214  	})
   215  }
   216  
   217  func TestMatrixJSONPayload(t *testing.T) {
   218  	p := pushTestPayload()
   219  
   220  	pl, err := new(MatrixPayload).Push(p)
   221  	require.NoError(t, err)
   222  	require.NotNil(t, pl)
   223  	require.IsType(t, &MatrixPayload{}, pl)
   224  
   225  	json, err := pl.JSONPayload()
   226  	require.NoError(t, err)
   227  	assert.NotEmpty(t, json)
   228  }
   229  
   230  func Test_getTxnID(t *testing.T) {
   231  	type args struct {
   232  		payload []byte
   233  	}
   234  	tests := []struct {
   235  		name    string
   236  		args    args
   237  		want    string
   238  		wantErr bool
   239  	}{
   240  		{
   241  			name:    "dummy payload",
   242  			args:    args{payload: []byte("Hello World")},
   243  			want:    "0a4d55a8d778e5022fab701977c5d840bbc486d0",
   244  			wantErr: false,
   245  		},
   246  	}
   247  	for _, tt := range tests {
   248  		t.Run(tt.name, func(t *testing.T) {
   249  			got, err := getMatrixTxnID(tt.args.payload)
   250  			if (err != nil) != tt.wantErr {
   251  				t.Errorf("getMatrixTxnID() error = %v, wantErr %v", err, tt.wantErr)
   252  				return
   253  			}
   254  			assert.Equal(t, tt.want, got)
   255  		})
   256  	}
   257  }