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

     1  // Copyright 2021 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 TestMSTeamsPayload(t *testing.T) {
    17  	t.Run("Create", func(t *testing.T) {
    18  		p := createTestPayload()
    19  
    20  		d := new(MSTeamsPayload)
    21  		pl, err := d.Create(p)
    22  		require.NoError(t, err)
    23  		require.NotNil(t, pl)
    24  		require.IsType(t, &MSTeamsPayload{}, pl)
    25  
    26  		assert.Equal(t, "[test/repo] branch test created", pl.(*MSTeamsPayload).Title)
    27  		assert.Equal(t, "[test/repo] branch test created", pl.(*MSTeamsPayload).Summary)
    28  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
    29  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
    30  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
    31  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
    32  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
    33  			if fact.Name == "Repository:" {
    34  				assert.Equal(t, p.Repo.FullName, fact.Value)
    35  			} else if fact.Name == "branch:" {
    36  				assert.Equal(t, "test", fact.Value)
    37  			} else {
    38  				t.Fail()
    39  			}
    40  		}
    41  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
    42  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
    43  		assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
    44  	})
    45  
    46  	t.Run("Delete", func(t *testing.T) {
    47  		p := deleteTestPayload()
    48  
    49  		d := new(MSTeamsPayload)
    50  		pl, err := d.Delete(p)
    51  		require.NoError(t, err)
    52  		require.NotNil(t, pl)
    53  		require.IsType(t, &MSTeamsPayload{}, pl)
    54  
    55  		assert.Equal(t, "[test/repo] branch test deleted", pl.(*MSTeamsPayload).Title)
    56  		assert.Equal(t, "[test/repo] branch test deleted", pl.(*MSTeamsPayload).Summary)
    57  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
    58  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
    59  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
    60  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
    61  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
    62  			if fact.Name == "Repository:" {
    63  				assert.Equal(t, p.Repo.FullName, fact.Value)
    64  			} else if fact.Name == "branch:" {
    65  				assert.Equal(t, "test", fact.Value)
    66  			} else {
    67  				t.Fail()
    68  			}
    69  		}
    70  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
    71  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
    72  		assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
    73  	})
    74  
    75  	t.Run("Fork", func(t *testing.T) {
    76  		p := forkTestPayload()
    77  
    78  		d := new(MSTeamsPayload)
    79  		pl, err := d.Fork(p)
    80  		require.NoError(t, err)
    81  		require.NotNil(t, pl)
    82  		require.IsType(t, &MSTeamsPayload{}, pl)
    83  
    84  		assert.Equal(t, "test/repo2 is forked to test/repo", pl.(*MSTeamsPayload).Title)
    85  		assert.Equal(t, "test/repo2 is forked to test/repo", pl.(*MSTeamsPayload).Summary)
    86  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
    87  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
    88  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
    89  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
    90  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
    91  			if fact.Name == "Repository:" {
    92  				assert.Equal(t, p.Repo.FullName, fact.Value)
    93  			} else if fact.Name == "Forkee:" {
    94  				assert.Equal(t, p.Forkee.FullName, fact.Value)
    95  			} else {
    96  				t.Fail()
    97  			}
    98  		}
    99  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   100  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   101  		assert.Equal(t, "http://localhost:3000/test/repo", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   102  	})
   103  
   104  	t.Run("Push", func(t *testing.T) {
   105  		p := pushTestPayload()
   106  
   107  		d := new(MSTeamsPayload)
   108  		pl, err := d.Push(p)
   109  		require.NoError(t, err)
   110  		require.NotNil(t, pl)
   111  		require.IsType(t, &MSTeamsPayload{}, pl)
   112  
   113  		assert.Equal(t, "[test/repo:test] 2 new commits", pl.(*MSTeamsPayload).Title)
   114  		assert.Equal(t, "[test/repo:test] 2 new commits", pl.(*MSTeamsPayload).Summary)
   115  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   116  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   117  		assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1\n\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1", pl.(*MSTeamsPayload).Sections[0].Text)
   118  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   119  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   120  			if fact.Name == "Repository:" {
   121  				assert.Equal(t, p.Repo.FullName, fact.Value)
   122  			} else if fact.Name == "Commit count:" {
   123  				assert.Equal(t, "2", fact.Value)
   124  			} else {
   125  				t.Fail()
   126  			}
   127  		}
   128  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   129  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   130  		assert.Equal(t, "http://localhost:3000/test/repo/src/test", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   131  	})
   132  
   133  	t.Run("Issue", func(t *testing.T) {
   134  		p := issueTestPayload()
   135  
   136  		d := new(MSTeamsPayload)
   137  		p.Action = api.HookIssueOpened
   138  		pl, err := d.Issue(p)
   139  		require.NoError(t, err)
   140  		require.NotNil(t, pl)
   141  		require.IsType(t, &MSTeamsPayload{}, pl)
   142  
   143  		assert.Equal(t, "[test/repo] Issue opened: #2 crash", pl.(*MSTeamsPayload).Title)
   144  		assert.Equal(t, "[test/repo] Issue opened: #2 crash", pl.(*MSTeamsPayload).Summary)
   145  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   146  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   147  		assert.Equal(t, "issue body", pl.(*MSTeamsPayload).Sections[0].Text)
   148  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   149  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   150  			if fact.Name == "Repository:" {
   151  				assert.Equal(t, p.Repository.FullName, fact.Value)
   152  			} else if fact.Name == "Issue #:" {
   153  				assert.Equal(t, "2", fact.Value)
   154  			} else {
   155  				t.Fail()
   156  			}
   157  		}
   158  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   159  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   160  		assert.Equal(t, "http://localhost:3000/test/repo/issues/2", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   161  
   162  		p.Action = api.HookIssueClosed
   163  		pl, err = d.Issue(p)
   164  		require.NoError(t, err)
   165  		require.NotNil(t, pl)
   166  		require.IsType(t, &MSTeamsPayload{}, pl)
   167  
   168  		assert.Equal(t, "[test/repo] Issue closed: #2 crash", pl.(*MSTeamsPayload).Title)
   169  		assert.Equal(t, "[test/repo] Issue closed: #2 crash", pl.(*MSTeamsPayload).Summary)
   170  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   171  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   172  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
   173  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   174  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   175  			if fact.Name == "Repository:" {
   176  				assert.Equal(t, p.Repository.FullName, fact.Value)
   177  			} else if fact.Name == "Issue #:" {
   178  				assert.Equal(t, "2", fact.Value)
   179  			} else {
   180  				t.Fail()
   181  			}
   182  		}
   183  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   184  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   185  		assert.Equal(t, "http://localhost:3000/test/repo/issues/2", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   186  	})
   187  
   188  	t.Run("IssueComment", func(t *testing.T) {
   189  		p := issueCommentTestPayload()
   190  
   191  		d := new(MSTeamsPayload)
   192  		pl, err := d.IssueComment(p)
   193  		require.NoError(t, err)
   194  		require.NotNil(t, pl)
   195  		require.IsType(t, &MSTeamsPayload{}, pl)
   196  
   197  		assert.Equal(t, "[test/repo] New comment on issue #2 crash", pl.(*MSTeamsPayload).Title)
   198  		assert.Equal(t, "[test/repo] New comment on issue #2 crash", pl.(*MSTeamsPayload).Summary)
   199  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   200  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   201  		assert.Equal(t, "more info needed", pl.(*MSTeamsPayload).Sections[0].Text)
   202  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   203  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   204  			if fact.Name == "Repository:" {
   205  				assert.Equal(t, p.Repository.FullName, fact.Value)
   206  			} else if fact.Name == "Issue #:" {
   207  				assert.Equal(t, "2", fact.Value)
   208  			} else {
   209  				t.Fail()
   210  			}
   211  		}
   212  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   213  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   214  		assert.Equal(t, "http://localhost:3000/test/repo/issues/2#issuecomment-4", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   215  	})
   216  
   217  	t.Run("PullRequest", func(t *testing.T) {
   218  		p := pullRequestTestPayload()
   219  
   220  		d := new(MSTeamsPayload)
   221  		pl, err := d.PullRequest(p)
   222  		require.NoError(t, err)
   223  		require.NotNil(t, pl)
   224  		require.IsType(t, &MSTeamsPayload{}, pl)
   225  
   226  		assert.Equal(t, "[test/repo] Pull request opened: #12 Fix bug", pl.(*MSTeamsPayload).Title)
   227  		assert.Equal(t, "[test/repo] Pull request opened: #12 Fix bug", pl.(*MSTeamsPayload).Summary)
   228  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   229  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   230  		assert.Equal(t, "fixes bug #2", pl.(*MSTeamsPayload).Sections[0].Text)
   231  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   232  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   233  			if fact.Name == "Repository:" {
   234  				assert.Equal(t, p.Repository.FullName, fact.Value)
   235  			} else if fact.Name == "Pull request #:" {
   236  				assert.Equal(t, "12", fact.Value)
   237  			} else {
   238  				t.Fail()
   239  			}
   240  		}
   241  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   242  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   243  		assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   244  	})
   245  
   246  	t.Run("PullRequestComment", func(t *testing.T) {
   247  		p := pullRequestCommentTestPayload()
   248  
   249  		d := new(MSTeamsPayload)
   250  		pl, err := d.IssueComment(p)
   251  		require.NoError(t, err)
   252  		require.NotNil(t, pl)
   253  		require.IsType(t, &MSTeamsPayload{}, pl)
   254  
   255  		assert.Equal(t, "[test/repo] New comment on pull request #12 Fix bug", pl.(*MSTeamsPayload).Title)
   256  		assert.Equal(t, "[test/repo] New comment on pull request #12 Fix bug", pl.(*MSTeamsPayload).Summary)
   257  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   258  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   259  		assert.Equal(t, "changes requested", pl.(*MSTeamsPayload).Sections[0].Text)
   260  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   261  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   262  			if fact.Name == "Repository:" {
   263  				assert.Equal(t, p.Repository.FullName, fact.Value)
   264  			} else if fact.Name == "Issue #:" {
   265  				assert.Equal(t, "12", fact.Value)
   266  			} else {
   267  				t.Fail()
   268  			}
   269  		}
   270  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   271  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   272  		assert.Equal(t, "http://localhost:3000/test/repo/pulls/12#issuecomment-4", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   273  	})
   274  
   275  	t.Run("Review", func(t *testing.T) {
   276  		p := pullRequestTestPayload()
   277  		p.Action = api.HookIssueReviewed
   278  
   279  		d := new(MSTeamsPayload)
   280  		pl, err := d.Review(p, webhook_module.HookEventPullRequestReviewApproved)
   281  		require.NoError(t, err)
   282  		require.NotNil(t, pl)
   283  		require.IsType(t, &MSTeamsPayload{}, pl)
   284  
   285  		assert.Equal(t, "[test/repo] Pull request review approved: #12 Fix bug", pl.(*MSTeamsPayload).Title)
   286  		assert.Equal(t, "[test/repo] Pull request review approved: #12 Fix bug", pl.(*MSTeamsPayload).Summary)
   287  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   288  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   289  		assert.Equal(t, "good job", pl.(*MSTeamsPayload).Sections[0].Text)
   290  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   291  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   292  			if fact.Name == "Repository:" {
   293  				assert.Equal(t, p.Repository.FullName, fact.Value)
   294  			} else if fact.Name == "Pull request #:" {
   295  				assert.Equal(t, "12", fact.Value)
   296  			} else {
   297  				t.Fail()
   298  			}
   299  		}
   300  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   301  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   302  		assert.Equal(t, "http://localhost:3000/test/repo/pulls/12", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   303  	})
   304  
   305  	t.Run("Repository", func(t *testing.T) {
   306  		p := repositoryTestPayload()
   307  
   308  		d := new(MSTeamsPayload)
   309  		pl, err := d.Repository(p)
   310  		require.NoError(t, err)
   311  		require.NotNil(t, pl)
   312  		require.IsType(t, &MSTeamsPayload{}, pl)
   313  
   314  		assert.Equal(t, "[test/repo] Repository created", pl.(*MSTeamsPayload).Title)
   315  		assert.Equal(t, "[test/repo] Repository created", pl.(*MSTeamsPayload).Summary)
   316  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   317  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   318  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
   319  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 1)
   320  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   321  			if fact.Name == "Repository:" {
   322  				assert.Equal(t, p.Repository.FullName, fact.Value)
   323  			} else {
   324  				t.Fail()
   325  			}
   326  		}
   327  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   328  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   329  		assert.Equal(t, "http://localhost:3000/test/repo", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   330  	})
   331  
   332  	t.Run("Package", func(t *testing.T) {
   333  		p := packageTestPayload()
   334  
   335  		d := new(MSTeamsPayload)
   336  		pl, err := d.Package(p)
   337  		require.NoError(t, err)
   338  		require.NotNil(t, pl)
   339  		require.IsType(t, &MSTeamsPayload{}, pl)
   340  
   341  		assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*MSTeamsPayload).Title)
   342  		assert.Equal(t, "Package created: GiteaContainer:latest", pl.(*MSTeamsPayload).Summary)
   343  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   344  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   345  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
   346  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 1)
   347  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   348  			if fact.Name == "Package:" {
   349  				assert.Equal(t, p.Package.Name, fact.Value)
   350  			} else {
   351  				t.Fail()
   352  			}
   353  		}
   354  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   355  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   356  		assert.Equal(t, "http://localhost:3000/user1/-/packages/container/GiteaContainer/latest", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   357  	})
   358  
   359  	t.Run("Wiki", func(t *testing.T) {
   360  		p := wikiTestPayload()
   361  
   362  		d := new(MSTeamsPayload)
   363  		p.Action = api.HookWikiCreated
   364  		pl, err := d.Wiki(p)
   365  		require.NoError(t, err)
   366  		require.NotNil(t, pl)
   367  		require.IsType(t, &MSTeamsPayload{}, pl)
   368  
   369  		assert.Equal(t, "[test/repo] New wiki page 'index' (Wiki change comment)", pl.(*MSTeamsPayload).Title)
   370  		assert.Equal(t, "[test/repo] New wiki page 'index' (Wiki change comment)", pl.(*MSTeamsPayload).Summary)
   371  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   372  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   373  		assert.Equal(t, "", pl.(*MSTeamsPayload).Sections[0].Text)
   374  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   375  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   376  			if fact.Name == "Repository:" {
   377  				assert.Equal(t, p.Repository.FullName, fact.Value)
   378  			} else {
   379  				t.Fail()
   380  			}
   381  		}
   382  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   383  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   384  		assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   385  
   386  		p.Action = api.HookWikiEdited
   387  		pl, err = d.Wiki(p)
   388  		require.NoError(t, err)
   389  		require.NotNil(t, pl)
   390  		require.IsType(t, &MSTeamsPayload{}, pl)
   391  
   392  		assert.Equal(t, "[test/repo] Wiki page 'index' edited (Wiki change comment)", pl.(*MSTeamsPayload).Title)
   393  		assert.Equal(t, "[test/repo] Wiki page 'index' edited (Wiki change comment)", pl.(*MSTeamsPayload).Summary)
   394  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   395  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   396  		assert.Equal(t, "", pl.(*MSTeamsPayload).Sections[0].Text)
   397  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   398  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   399  			if fact.Name == "Repository:" {
   400  				assert.Equal(t, p.Repository.FullName, fact.Value)
   401  			} else {
   402  				t.Fail()
   403  			}
   404  		}
   405  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   406  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   407  		assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   408  
   409  		p.Action = api.HookWikiDeleted
   410  		pl, err = d.Wiki(p)
   411  		require.NoError(t, err)
   412  		require.NotNil(t, pl)
   413  		require.IsType(t, &MSTeamsPayload{}, pl)
   414  
   415  		assert.Equal(t, "[test/repo] Wiki page 'index' deleted", pl.(*MSTeamsPayload).Title)
   416  		assert.Equal(t, "[test/repo] Wiki page 'index' deleted", pl.(*MSTeamsPayload).Summary)
   417  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   418  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   419  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
   420  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   421  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   422  			if fact.Name == "Repository:" {
   423  				assert.Equal(t, p.Repository.FullName, fact.Value)
   424  			} else {
   425  				t.Fail()
   426  			}
   427  		}
   428  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   429  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   430  		assert.Equal(t, "http://localhost:3000/test/repo/wiki/index", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   431  	})
   432  
   433  	t.Run("Release", func(t *testing.T) {
   434  		p := pullReleaseTestPayload()
   435  
   436  		d := new(MSTeamsPayload)
   437  		pl, err := d.Release(p)
   438  		require.NoError(t, err)
   439  		require.NotNil(t, pl)
   440  		require.IsType(t, &MSTeamsPayload{}, pl)
   441  
   442  		assert.Equal(t, "[test/repo] Release created: v1.0", pl.(*MSTeamsPayload).Title)
   443  		assert.Equal(t, "[test/repo] Release created: v1.0", pl.(*MSTeamsPayload).Summary)
   444  		assert.Len(t, pl.(*MSTeamsPayload).Sections, 1)
   445  		assert.Equal(t, "user1", pl.(*MSTeamsPayload).Sections[0].ActivitySubtitle)
   446  		assert.Empty(t, pl.(*MSTeamsPayload).Sections[0].Text)
   447  		assert.Len(t, pl.(*MSTeamsPayload).Sections[0].Facts, 2)
   448  		for _, fact := range pl.(*MSTeamsPayload).Sections[0].Facts {
   449  			if fact.Name == "Repository:" {
   450  				assert.Equal(t, p.Repository.FullName, fact.Value)
   451  			} else if fact.Name == "Tag:" {
   452  				assert.Equal(t, "v1.0", fact.Value)
   453  			} else {
   454  				t.Fail()
   455  			}
   456  		}
   457  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction, 1)
   458  		assert.Len(t, pl.(*MSTeamsPayload).PotentialAction[0].Targets, 1)
   459  		assert.Equal(t, "http://localhost:3000/test/repo/releases/tag/v1.0", pl.(*MSTeamsPayload).PotentialAction[0].Targets[0].URI)
   460  	})
   461  }
   462  
   463  func TestMSTeamsJSONPayload(t *testing.T) {
   464  	p := pushTestPayload()
   465  
   466  	pl, err := new(MSTeamsPayload).Push(p)
   467  	require.NoError(t, err)
   468  	require.NotNil(t, pl)
   469  	require.IsType(t, &MSTeamsPayload{}, pl)
   470  
   471  	json, err := pl.JSONPayload()
   472  	require.NoError(t, err)
   473  	assert.NotEmpty(t, json)
   474  }