2019-07-17 22:02:42 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-07-17 22:02:42 +03:00
2019-09-24 08:02:49 +03:00
package mailer
2019-07-17 22:02:42 +03:00
import (
2019-11-07 16:34:28 +03:00
"bytes"
2022-03-22 18:22:54 +03:00
"context"
2022-02-04 02:01:16 +03:00
"fmt"
2019-07-17 22:02:42 +03:00
"html/template"
2023-01-14 18:57:10 +03:00
"regexp"
2022-02-04 02:01:16 +03:00
"strings"
2019-07-17 22:02:42 +03:00
"testing"
2019-11-07 16:34:28 +03:00
texttmpl "text/template"
2019-07-17 22:02:42 +03:00
2022-08-25 05:31:57 +03:00
activities_model "code.gitea.io/gitea/models/activities"
2022-04-08 12:11:15 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-07-17 22:02:42 +03:00
"code.gitea.io/gitea/modules/setting"
2022-02-06 18:44:30 +03:00
2019-07-17 22:02:42 +03:00
"github.com/stretchr/testify/assert"
)
2019-11-07 16:34:28 +03:00
const subjectTpl = `
{ { . SubjectPrefix } } [ { { . Repo } } ] @ { { . Doer . Name } } # { { . Issue . Index } } - { { . Issue . Title } }
`
const bodyTpl = `
2019-07-17 22:02:42 +03:00
< ! DOCTYPE html >
< html >
< head >
< meta http - equiv = "Content-Type" content = "text/html; charset=utf-8" / >
< title > { { . Subject } } < / title >
< / head >
< body >
< p > { { . Body } } < / p >
< p >
-- -
< br >
< a href = "{{.Link}}" > View it on Gitea < / a > .
< / p >
< / body >
< / html >
`
2022-06-13 12:37:59 +03:00
func prepareMailerTest ( t * testing . T ) ( doer * user_model . User , repo * repo_model . Repository , issue * issues_model . Issue , comment * issues_model . Comment ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-01-20 20:46:10 +03:00
mailService := setting . Mailer {
2019-09-24 08:02:49 +03:00
From : "test@gitea.com" ,
}
2019-07-17 22:02:42 +03:00
2019-09-24 08:02:49 +03:00
setting . MailService = & mailService
setting . Domain = "localhost"
2019-07-17 22:02:42 +03:00
2022-08-16 05:22:25 +03:00
doer = unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
repo = unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 , Owner : doer } )
issue = unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 , Repo : repo , Poster : doer } )
2022-04-08 12:11:15 +03:00
assert . NoError ( t , issue . LoadRepo ( db . DefaultContext ) )
2022-08-16 05:22:25 +03:00
comment = unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : 2 , Issue : issue } )
2022-06-20 13:02:49 +03:00
return doer , repo , issue , comment
2021-05-22 09:47:16 +03:00
}
func TestComposeIssueCommentMessage ( t * testing . T ) {
doer , _ , issue , comment := prepareMailerTest ( t )
2019-07-17 22:02:42 +03:00
2023-01-14 18:57:10 +03:00
setting . IncomingEmail . Enabled = true
defer func ( ) { setting . IncomingEmail . Enabled = false } ( )
2022-08-08 21:04:28 +03:00
subjectTemplates = texttmpl . Must ( texttmpl . New ( "issue/comment" ) . Parse ( subjectTpl ) )
bodyTemplates = template . Must ( template . New ( "issue/comment" ) . Parse ( bodyTpl ) )
2019-07-17 22:02:42 +03:00
2021-11-24 12:49:20 +03:00
recipients := [ ] * user_model . User { { Name : "Test" , Email : "test@gitea.com" } , { Name : "Test2" , Email : "test2@gitea.com" } }
2022-01-20 20:46:10 +03:00
msgs , err := composeIssueCommentMessages ( & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : issue , Doer : doer , ActionType : activities_model . ActionCommentIssue ,
2022-01-20 20:46:10 +03:00
Content : "test body" , Comment : comment ,
} , "en-US" , recipients , false , "issue comment" )
2021-04-20 01:25:08 +03:00
assert . NoError ( t , err )
2019-11-18 11:08:20 +03:00
assert . Len ( t , msgs , 2 )
2020-01-16 20:55:36 +03:00
gomailMsg := msgs [ 0 ] . ToMessage ( )
2023-01-14 18:57:10 +03:00
replyTo := gomailMsg . GetHeader ( "Reply-To" ) [ 0 ]
subject := gomailMsg . GetHeader ( "Subject" ) [ 0 ]
assert . Len ( t , gomailMsg . GetHeader ( "To" ) , 1 , "exactly one recipient is expected in the To field" )
tokenRegex := regexp . MustCompile ( ` \Aincoming\+(.+)@localhost\z ` )
assert . Regexp ( t , tokenRegex , replyTo )
token := tokenRegex . FindAllStringSubmatch ( replyTo , 1 ) [ 0 ] [ 1 ]
assert . Equal ( t , "Re: " , subject [ : 4 ] , "Comment reply subject should contain Re:" )
assert . Equal ( t , "Re: [user2/repo1] @user2 #1 - issue1" , subject )
assert . Equal ( t , "<user2/repo1/issues/1@localhost>" , gomailMsg . GetHeader ( "In-Reply-To" ) [ 0 ] , "In-Reply-To header doesn't match" )
assert . ElementsMatch ( t , [ ] string { "<user2/repo1/issues/1@localhost>" , "<reply-" + token + "@localhost>" } , gomailMsg . GetHeader ( "References" ) , "References header doesn't match" )
assert . Equal ( t , "<user2/repo1/issues/1/comment/2@localhost>" , gomailMsg . GetHeader ( "Message-ID" ) [ 0 ] , "Message-ID header doesn't match" )
assert . Equal ( t , "<mailto:" + replyTo + ">" , gomailMsg . GetHeader ( "List-Post" ) [ 0 ] )
assert . Len ( t , gomailMsg . GetHeader ( "List-Unsubscribe" ) , 2 ) // url + mailto
2019-07-17 22:02:42 +03:00
}
func TestComposeIssueMessage ( t * testing . T ) {
2021-05-22 09:47:16 +03:00
doer , _ , issue , _ := prepareMailerTest ( t )
2019-07-17 22:02:42 +03:00
2022-08-08 21:04:28 +03:00
subjectTemplates = texttmpl . Must ( texttmpl . New ( "issue/new" ) . Parse ( subjectTpl ) )
bodyTemplates = template . Must ( template . New ( "issue/new" ) . Parse ( bodyTpl ) )
2019-07-17 22:02:42 +03:00
2021-11-24 12:49:20 +03:00
recipients := [ ] * user_model . User { { Name : "Test" , Email : "test@gitea.com" } , { Name : "Test2" , Email : "test2@gitea.com" } }
2022-01-20 20:46:10 +03:00
msgs , err := composeIssueCommentMessages ( & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : issue , Doer : doer , ActionType : activities_model . ActionCreateIssue ,
2022-01-20 20:46:10 +03:00
Content : "test body" ,
} , "en-US" , recipients , false , "issue create" )
2021-04-20 01:25:08 +03:00
assert . NoError ( t , err )
2019-11-18 11:08:20 +03:00
assert . Len ( t , msgs , 2 )
2019-07-17 22:02:42 +03:00
2020-01-16 20:55:36 +03:00
gomailMsg := msgs [ 0 ] . ToMessage ( )
mailto := gomailMsg . GetHeader ( "To" )
subject := gomailMsg . GetHeader ( "Subject" )
messageID := gomailMsg . GetHeader ( "Message-ID" )
2021-10-01 18:24:43 +03:00
inReplyTo := gomailMsg . GetHeader ( "In-Reply-To" )
references := gomailMsg . GetHeader ( "References" )
2019-07-17 22:02:42 +03:00
2019-11-18 11:08:20 +03:00
assert . Len ( t , mailto , 1 , "exactly one recipient is expected in the To field" )
2019-11-07 16:34:28 +03:00
assert . Equal ( t , "[user2/repo1] @user2 #1 - issue1" , subject [ 0 ] )
2021-10-01 18:24:43 +03:00
assert . Equal ( t , "<user2/repo1/issues/1@localhost>" , inReplyTo [ 0 ] , "In-Reply-To header doesn't match" )
assert . Equal ( t , "<user2/repo1/issues/1@localhost>" , references [ 0 ] , "References header doesn't match" )
assert . Equal ( t , "<user2/repo1/issues/1@localhost>" , messageID [ 0 ] , "Message-ID header doesn't match" )
2023-01-14 18:57:10 +03:00
assert . Empty ( t , gomailMsg . GetHeader ( "List-Post" ) ) // incoming mail feature disabled
assert . Len ( t , gomailMsg . GetHeader ( "List-Unsubscribe" ) , 1 ) // url without mailto
2019-07-17 22:02:42 +03:00
}
2019-11-07 16:34:28 +03:00
func TestTemplateSelection ( t * testing . T ) {
2021-05-22 09:47:16 +03:00
doer , repo , issue , comment := prepareMailerTest ( t )
2021-11-24 12:49:20 +03:00
recipients := [ ] * user_model . User { { Name : "Test" , Email : "test@gitea.com" } }
2019-11-07 16:34:28 +03:00
2022-08-08 21:04:28 +03:00
subjectTemplates = texttmpl . Must ( texttmpl . New ( "issue/default" ) . Parse ( "issue/default/subject" ) )
texttmpl . Must ( subjectTemplates . New ( "issue/new" ) . Parse ( "issue/new/subject" ) )
texttmpl . Must ( subjectTemplates . New ( "pull/comment" ) . Parse ( "pull/comment/subject" ) )
texttmpl . Must ( subjectTemplates . New ( "issue/close" ) . Parse ( "" ) ) // Must default to fallback subject
2019-11-07 16:34:28 +03:00
2022-08-08 21:04:28 +03:00
bodyTemplates = template . Must ( template . New ( "issue/default" ) . Parse ( "issue/default/body" ) )
template . Must ( bodyTemplates . New ( "issue/new" ) . Parse ( "issue/new/body" ) )
template . Must ( bodyTemplates . New ( "pull/comment" ) . Parse ( "pull/comment/body" ) )
template . Must ( bodyTemplates . New ( "issue/close" ) . Parse ( "issue/close/body" ) )
2019-11-07 16:34:28 +03:00
expect := func ( t * testing . T , msg * Message , expSubject , expBody string ) {
2020-01-16 20:55:36 +03:00
subject := msg . ToMessage ( ) . GetHeader ( "Subject" )
2019-11-07 16:34:28 +03:00
msgbuf := new ( bytes . Buffer )
2020-01-16 20:55:36 +03:00
_ , _ = msg . ToMessage ( ) . WriteTo ( msgbuf )
2019-11-07 16:34:28 +03:00
wholemsg := msgbuf . String ( )
assert . Equal ( t , [ ] string { expSubject } , subject )
assert . Contains ( t , wholemsg , expBody )
}
2022-01-20 20:46:10 +03:00
msg := testComposeIssueCommentMessage ( t , & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : issue , Doer : doer , ActionType : activities_model . ActionCreateIssue ,
2022-01-20 20:46:10 +03:00
Content : "test body" ,
} , recipients , false , "TestTemplateSelection" )
2019-11-07 16:34:28 +03:00
expect ( t , msg , "issue/new/subject" , "issue/new/body" )
2022-01-20 20:46:10 +03:00
msg = testComposeIssueCommentMessage ( t , & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : issue , Doer : doer , ActionType : activities_model . ActionCommentIssue ,
2022-01-20 20:46:10 +03:00
Content : "test body" , Comment : comment ,
} , recipients , false , "TestTemplateSelection" )
2019-11-07 16:34:28 +03:00
expect ( t , msg , "issue/default/subject" , "issue/default/body" )
2022-08-16 05:22:25 +03:00
pull := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 , Repo : repo , Poster : doer } )
comment = unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : 4 , Issue : pull } )
2022-01-20 20:46:10 +03:00
msg = testComposeIssueCommentMessage ( t , & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : pull , Doer : doer , ActionType : activities_model . ActionCommentPull ,
2022-01-20 20:46:10 +03:00
Content : "test body" , Comment : comment ,
} , recipients , false , "TestTemplateSelection" )
2019-11-07 16:34:28 +03:00
expect ( t , msg , "pull/comment/subject" , "pull/comment/body" )
2022-01-20 20:46:10 +03:00
msg = testComposeIssueCommentMessage ( t , & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
2022-08-25 05:31:57 +03:00
Issue : issue , Doer : doer , ActionType : activities_model . ActionCloseIssue ,
2022-01-20 20:46:10 +03:00
Content : "test body" , Comment : comment ,
} , recipients , false , "TestTemplateSelection" )
2019-11-18 11:08:20 +03:00
expect ( t , msg , "Re: [user2/repo1] issue1 (#1)" , "issue/close/body" )
2019-11-07 16:34:28 +03:00
}
func TestTemplateServices ( t * testing . T ) {
2021-05-22 09:47:16 +03:00
doer , _ , issue , comment := prepareMailerTest ( t )
2022-04-08 12:11:15 +03:00
assert . NoError ( t , issue . LoadRepo ( db . DefaultContext ) )
2019-11-07 16:34:28 +03:00
2022-06-13 12:37:59 +03:00
expect := func ( t * testing . T , issue * issues_model . Issue , comment * issues_model . Comment , doer * user_model . User ,
2022-08-25 05:31:57 +03:00
actionType activities_model . ActionType , fromMention bool , tplSubject , tplBody , expSubject , expBody string ,
2022-01-20 20:46:10 +03:00
) {
2022-08-08 21:04:28 +03:00
subjectTemplates = texttmpl . Must ( texttmpl . New ( "issue/default" ) . Parse ( tplSubject ) )
bodyTemplates = template . Must ( template . New ( "issue/default" ) . Parse ( tplBody ) )
2019-11-07 16:34:28 +03:00
2021-11-24 12:49:20 +03:00
recipients := [ ] * user_model . User { { Name : "Test" , Email : "test@gitea.com" } }
2022-01-20 20:46:10 +03:00
msg := testComposeIssueCommentMessage ( t , & mailCommentContext {
2022-03-22 18:22:54 +03:00
Context : context . TODO ( ) , // TODO: use a correct context
Issue : issue , Doer : doer , ActionType : actionType ,
2022-01-20 20:46:10 +03:00
Content : "test body" , Comment : comment ,
} , recipients , fromMention , "TestTemplateServices" )
2019-11-07 16:34:28 +03:00
2020-01-16 20:55:36 +03:00
subject := msg . ToMessage ( ) . GetHeader ( "Subject" )
2019-11-07 16:34:28 +03:00
msgbuf := new ( bytes . Buffer )
2020-01-16 20:55:36 +03:00
_ , _ = msg . ToMessage ( ) . WriteTo ( msgbuf )
2019-11-07 16:34:28 +03:00
wholemsg := msgbuf . String ( )
assert . Equal ( t , [ ] string { expSubject } , subject )
assert . Contains ( t , wholemsg , "\r\n" + expBody + "\r\n" )
}
2022-08-25 05:31:57 +03:00
expect ( t , issue , comment , doer , activities_model . ActionCommentIssue , false ,
2019-11-07 16:34:28 +03:00
"{{.SubjectPrefix}}[{{.Repo}}]: @{{.Doer.Name}} commented on #{{.Issue.Index}} - {{.Issue.Title}}" ,
"//{{.ActionType}},{{.ActionName}},{{if .IsMention}}norender{{end}}//" ,
"Re: [user2/repo1]: @user2 commented on #1 - issue1" ,
"//issue,comment,//" )
2022-08-25 05:31:57 +03:00
expect ( t , issue , comment , doer , activities_model . ActionCommentIssue , true ,
2019-11-07 16:34:28 +03:00
"{{if .IsMention}}must render{{end}}" ,
"//subject is: {{.Subject}}//" ,
"must render" ,
"//subject is: must render//" )
2022-08-25 05:31:57 +03:00
expect ( t , issue , comment , doer , activities_model . ActionCommentIssue , true ,
2019-11-07 16:34:28 +03:00
"{{.FallbackSubject}}" ,
"//{{.SubjectPrefix}}//" ,
"Re: [user2/repo1] issue1 (#1)" ,
"//Re: //" )
}
2019-11-18 11:08:20 +03:00
2021-11-24 12:49:20 +03:00
func testComposeIssueCommentMessage ( t * testing . T , ctx * mailCommentContext , recipients [ ] * user_model . User , fromMention bool , info string ) * Message {
2021-05-22 09:47:16 +03:00
msgs , err := composeIssueCommentMessages ( ctx , "en-US" , recipients , fromMention , info )
2021-04-20 01:25:08 +03:00
assert . NoError ( t , err )
2019-11-18 11:08:20 +03:00
assert . Len ( t , msgs , 1 )
return msgs [ 0 ]
}
2021-05-22 09:47:16 +03:00
func TestGenerateAdditionalHeaders ( t * testing . T ) {
doer , _ , issue , _ := prepareMailerTest ( t )
2022-03-22 18:22:54 +03:00
ctx := & mailCommentContext { Context : context . TODO ( ) /* TODO: use a correct context */ , Issue : issue , Doer : doer }
2021-11-24 12:49:20 +03:00
recipient := & user_model . User { Name : "Test" , Email : "test@gitea.com" }
2021-05-22 09:47:16 +03:00
headers := generateAdditionalHeaders ( ctx , "dummy-reason" , recipient )
expected := map [ string ] string {
"List-ID" : "user2/repo1 <repo1.user2.localhost>" ,
"List-Archive" : "<https://try.gitea.io/user2/repo1>" ,
"X-Gitea-Reason" : "dummy-reason" ,
"X-Gitea-Sender" : "< U<se>r Tw<o > ><" ,
"X-Gitea-Recipient" : "Test" ,
"X-Gitea-Recipient-Address" : "test@gitea.com" ,
"X-Gitea-Repository" : "repo1" ,
"X-Gitea-Repository-Path" : "user2/repo1" ,
"X-Gitea-Repository-Link" : "https://try.gitea.io/user2/repo1" ,
"X-Gitea-Issue-ID" : "1" ,
"X-Gitea-Issue-Link" : "https://try.gitea.io/user2/repo1/issues/1" ,
}
for key , value := range expected {
if assert . Contains ( t , headers , key ) {
assert . Equal ( t , value , headers [ key ] )
}
}
}
2022-02-04 02:01:16 +03:00
func Test_createReference ( t * testing . T ) {
_ , _ , issue , comment := prepareMailerTest ( t )
_ , _ , pullIssue , _ := prepareMailerTest ( t )
pullIssue . IsPull = true
type args struct {
2022-06-13 12:37:59 +03:00
issue * issues_model . Issue
comment * issues_model . Comment
2022-08-25 05:31:57 +03:00
actionType activities_model . ActionType
2022-02-04 02:01:16 +03:00
}
tests := [ ] struct {
name string
args args
prefix string
} {
{
name : "Open Issue" ,
args : args {
issue : issue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionCreateIssue ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/issues/%d@%s>" , issue . Repo . FullName ( ) , issue . Index , setting . Domain ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Open Pull" ,
args : args {
issue : pullIssue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionCreatePullRequest ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d@%s>" , issue . Repo . FullName ( ) , issue . Index , setting . Domain ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Comment Issue" ,
args : args {
issue : issue ,
comment : comment ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionCommentIssue ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/issues/%d/comment/%d@%s>" , issue . Repo . FullName ( ) , issue . Index , comment . ID , setting . Domain ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Comment Pull" ,
args : args {
issue : pullIssue ,
comment : comment ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionCommentPull ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d/comment/%d@%s>" , issue . Repo . FullName ( ) , issue . Index , comment . ID , setting . Domain ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Close Issue" ,
args : args {
issue : issue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionCloseIssue ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/issues/%d/close/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Close Pull" ,
args : args {
issue : pullIssue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionClosePullRequest ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d/close/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Reopen Issue" ,
args : args {
issue : issue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionReopenIssue ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/issues/%d/reopen/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Reopen Pull" ,
args : args {
issue : pullIssue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionReopenPullRequest ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d/reopen/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Merge Pull" ,
args : args {
issue : pullIssue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionMergePullRequest ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d/merge/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
{
name : "Ready Pull" ,
args : args {
issue : pullIssue ,
2022-08-25 05:31:57 +03:00
actionType : activities_model . ActionPullRequestReadyForReview ,
2022-02-04 02:01:16 +03:00
} ,
2023-01-14 18:57:10 +03:00
prefix : fmt . Sprintf ( "<%s/pulls/%d/ready/" , issue . Repo . FullName ( ) , issue . Index ) ,
2022-02-04 02:01:16 +03:00
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
got := createReference ( tt . args . issue , tt . args . comment , tt . args . actionType )
if ! strings . HasPrefix ( got , tt . prefix ) {
t . Errorf ( "createReference() = %v, want %v" , got , tt . prefix )
}
} )
}
}