2019-12-28 16:55:09 +08:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2019-12-28 16:55:09 +08:00
package webhook
import (
2024-03-07 23:18:38 +01:00
"context"
2019-12-28 16:55:09 +08:00
"testing"
2024-03-07 23:18:38 +01:00
webhook_model "code.gitea.io/gitea/models/webhook"
"code.gitea.io/gitea/modules/json"
2019-12-28 16:55:09 +08:00
api "code.gitea.io/gitea/modules/structs"
2023-01-01 16:23:15 +01:00
webhook_module "code.gitea.io/gitea/modules/webhook"
2021-06-21 04:12:19 +02:00
2019-12-28 16:55:09 +08:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
2021-06-21 04:12:19 +02:00
func TestTelegramPayload ( t * testing . T ) {
2024-03-07 23:18:38 +01:00
tc := telegramConvertor { }
2024-03-17 15:11:28 +01:00
t . Run ( "Correct webhook params" , func ( t * testing . T ) {
2024-07-10 19:37:16 +08:00
p := createTelegramPayloadHTML ( ` <a href=".">testMsg</a> <bad> ` )
assert . Equal ( t , TelegramPayload {
Message : ` <a href="." rel="nofollow">testMsg</a> ` ,
ParseMode : "HTML" ,
DisableWebPreview : true ,
} , p )
2024-03-17 15:11:28 +01:00
} )
2021-06-21 04:12:19 +02:00
t . Run ( "Create" , func ( t * testing . T ) {
p := createTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Create ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] branch <a href="http://localhost:3000/test/repo/src/test" rel="nofollow">test</a> created ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Delete" , func ( t * testing . T ) {
p := deleteTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Delete ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] branch <a href="http://localhost:3000/test/repo/src/test" rel="nofollow">test</a> deleted ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Fork" , func ( t * testing . T ) {
p := forkTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Fork ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` test/repo2 is forked to <a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a> ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Push" , func ( t * testing . T ) {
p := pushTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Push ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > : < a href = "http://localhost:3000/test/repo/src/test" rel = "nofollow" > test < / a > ] 2 new commits
[ < a href = "http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778" rel = "nofollow" > 2020558 < / a > ] commit message - user1
[ < a href = "http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778" rel = "nofollow" > 2020558 < / a > ] commit message - user1 ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Issue" , func ( t * testing . T ) {
p := issueTestPayload ( )
p . Action = api . HookIssueOpened
2024-03-07 23:18:38 +01:00
pl , err := tc . Issue ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > ] Issue opened : < a href = "http://localhost:3000/test/repo/issues/2" rel = "nofollow" > # 2 crash < / a > by < a href = "https://try.gitea.io/user1" rel = "nofollow" > user1 < / a >
issue body ` , pl . Message )
2021-06-21 04:12:19 +02:00
p . Action = api . HookIssueClosed
2024-03-07 23:18:38 +01:00
pl , err = tc . Issue ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] Issue closed: <a href="http://localhost:3000/test/repo/issues/2" rel="nofollow">#2 crash</a> by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "IssueComment" , func ( t * testing . T ) {
p := issueCommentTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . IssueComment ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2019-12-28 16:55:09 +08:00
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > ] New comment on issue < a href = "http://localhost:3000/test/repo/issues/2" rel = "nofollow" > # 2 crash < / a > by < a href = "https://try.gitea.io/user1" rel = "nofollow" > user1 < / a >
more info needed ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "PullRequest" , func ( t * testing . T ) {
p := pullRequestTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . PullRequest ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > ] Pull request opened : < a href = "http://localhost:3000/test/repo/pulls/12" rel = "nofollow" > # 12 Fix bug < / a > by < a href = "https://try.gitea.io/user1" rel = "nofollow" > user1 < / a >
fixes bug # 2 ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "PullRequestComment" , func ( t * testing . T ) {
p := pullRequestCommentTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . IssueComment ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > ] New comment on pull request < a href = "http://localhost:3000/test/repo/pulls/12" rel = "nofollow" > # 12 Fix bug < / a > by < a href = "https://try.gitea.io/user1" rel = "nofollow" > user1 < / a >
changes requested ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Review" , func ( t * testing . T ) {
p := pullRequestTestPayload ( )
p . Action = api . HookIssueReviewed
2024-03-07 23:18:38 +01:00
pl , err := tc . Review ( p , webhook_module . HookEventPullRequestReviewApproved )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ test / repo ] Pull request review approved : # 12 Fix bug
good job ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
t . Run ( "Repository" , func ( t * testing . T ) {
p := repositoryTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Repository ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] Repository created ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
2023-11-17 12:17:33 +01:00
t . Run ( "Package" , func ( t * testing . T ) {
p := packageTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Package ( p )
2023-11-17 12:17:33 +01:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` Package created: <a href="http://localhost:3000/user1/-/packages/container/GiteaContainer/latest" rel="nofollow">GiteaContainer:latest</a> by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2023-11-17 12:17:33 +01:00
} )
2022-09-04 21:54:23 +02:00
t . Run ( "Wiki" , func ( t * testing . T ) {
p := wikiTestPayload ( )
p . Action = api . HookWikiCreated
2024-03-07 23:18:38 +01:00
pl , err := tc . Wiki ( p )
2022-09-04 21:54:23 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] New wiki page '<a href="http://localhost:3000/test/repo/wiki/index" rel="nofollow">index</a>' (Wiki change comment) by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2022-09-04 21:54:23 +02:00
p . Action = api . HookWikiEdited
2024-03-07 23:18:38 +01:00
pl , err = tc . Wiki ( p )
2022-09-04 21:54:23 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index" rel="nofollow">index</a>' edited (Wiki change comment) by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2022-09-04 21:54:23 +02:00
p . Action = api . HookWikiDeleted
2024-03-07 23:18:38 +01:00
pl , err = tc . Wiki ( p )
2022-09-04 21:54:23 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] Wiki page '<a href="http://localhost:3000/test/repo/wiki/index" rel="nofollow">index</a>' deleted by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2022-09-04 21:54:23 +02:00
} )
2021-06-21 04:12:19 +02:00
t . Run ( "Release" , func ( t * testing . T ) {
p := pullReleaseTestPayload ( )
2024-03-07 23:18:38 +01:00
pl , err := tc . Release ( p )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [<a href="http://localhost:3000/test/repo" rel="nofollow">test/repo</a>] Release created: <a href="http://localhost:3000/test/repo/releases/tag/v1.0" rel="nofollow">v1.0</a> by <a href="https://try.gitea.io/user1" rel="nofollow">user1</a> ` , pl . Message )
2021-06-21 04:12:19 +02:00
} )
}
func TestTelegramJSONPayload ( t * testing . T ) {
p := pushTestPayload ( )
2024-03-07 23:18:38 +01:00
data , err := p . JSONPayload ( )
2020-07-19 05:53:40 -04:00
require . NoError ( t , err )
2019-12-28 16:55:09 +08:00
2024-03-07 23:18:38 +01:00
hook := & webhook_model . Webhook {
RepoID : 3 ,
IsActive : true ,
Type : webhook_module . TELEGRAM ,
URL : "https://telegram.example.com/" ,
Meta : ` ` ,
HTTPMethod : "POST" ,
}
task := & webhook_model . HookTask {
HookID : hook . ID ,
EventType : webhook_module . HookEventPush ,
PayloadContent : string ( data ) ,
PayloadVersion : 2 ,
}
req , reqBody , err := newTelegramRequest ( context . Background ( ) , hook , task )
require . NotNil ( t , req )
require . NotNil ( t , reqBody )
2021-06-21 04:12:19 +02:00
require . NoError ( t , err )
2024-03-07 23:18:38 +01:00
assert . Equal ( t , "POST" , req . Method )
assert . Equal ( t , "https://telegram.example.com/" , req . URL . String ( ) )
assert . Equal ( t , "sha256=" , req . Header . Get ( "X-Hub-Signature-256" ) )
assert . Equal ( t , "application/json" , req . Header . Get ( "Content-Type" ) )
var body TelegramPayload
err = json . NewDecoder ( req . Body ) . Decode ( & body )
assert . NoError ( t , err )
2024-07-10 19:37:16 +08:00
assert . Equal ( t , ` [ < a href = "http://localhost:3000/test/repo" rel = "nofollow" > test / repo < / a > : < a href = "http://localhost:3000/test/repo/src/test" rel = "nofollow" > test < / a > ] 2 new commits
[ < a href = "http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778" rel = "nofollow" > 2020558 < / a > ] commit message - user1
[ < a href = "http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778" rel = "nofollow" > 2020558 < / a > ] commit message - user1 ` , body . Message )
2019-12-28 16:55:09 +08:00
}