|
|
|
|
@ -25,6 +25,7 @@ import (
@@ -25,6 +25,7 @@ import (
|
|
|
|
|
"code.gitea.io/gitea/modules/markup" |
|
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
|
"code.gitea.io/gitea/modules/storage" |
|
|
|
|
"code.gitea.io/gitea/modules/test" |
|
|
|
|
"code.gitea.io/gitea/services/attachment" |
|
|
|
|
sender_service "code.gitea.io/gitea/services/mailer/sender" |
|
|
|
|
|
|
|
|
|
@ -110,9 +111,8 @@ func TestComposeIssueComment(t *testing.T) {
@@ -110,9 +111,8 @@ func TestComposeIssueComment(t *testing.T) {
|
|
|
|
|
bodyTemplates = template.Must(template.New("issue/comment").Parse(bodyTpl)) |
|
|
|
|
|
|
|
|
|
recipients := []*user_model.User{{Name: "Test", Email: "test@gitea.com"}, {Name: "Test2", Email: "test2@gitea.com"}} |
|
|
|
|
msgs, err := composeIssueCommentMessages(&mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCommentIssue, |
|
|
|
|
msgs, err := composeIssueCommentMessages(t.Context(), &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCommentIssue, |
|
|
|
|
Content: fmt.Sprintf("test @%s %s#%d body", doer.Name, issue.Repo.FullName(), issue.Index), |
|
|
|
|
Comment: comment, |
|
|
|
|
}, "en-US", recipients, false, "issue comment") |
|
|
|
|
@ -150,6 +150,22 @@ func TestComposeIssueComment(t *testing.T) {
@@ -150,6 +150,22 @@ func TestComposeIssueComment(t *testing.T) {
|
|
|
|
|
assert.Contains(t, string(b), fmt.Sprintf(`href="%s"`, issue.HTMLURL())) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestMailMentionsComment(t *testing.T) { |
|
|
|
|
doer, _, issue, comment := prepareMailerTest(t) |
|
|
|
|
comment.Poster = doer |
|
|
|
|
subjectTemplates = texttmpl.Must(texttmpl.New("issue/comment").Parse(subjectTpl)) |
|
|
|
|
bodyTemplates = template.Must(template.New("issue/comment").Parse(bodyTpl)) |
|
|
|
|
mails := 0 |
|
|
|
|
|
|
|
|
|
defer test.MockVariableValue(&SendAsync, func(msgs ...*sender_service.Message) { |
|
|
|
|
mails = len(msgs) |
|
|
|
|
})() |
|
|
|
|
|
|
|
|
|
err := MailParticipantsComment(t.Context(), comment, activities_model.ActionCommentIssue, issue, []*user_model.User{}) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
assert.Equal(t, 3, mails) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestComposeIssueMessage(t *testing.T) { |
|
|
|
|
doer, _, issue, _ := prepareMailerTest(t) |
|
|
|
|
|
|
|
|
|
@ -157,9 +173,8 @@ func TestComposeIssueMessage(t *testing.T) {
@@ -157,9 +173,8 @@ func TestComposeIssueMessage(t *testing.T) {
|
|
|
|
|
bodyTemplates = template.Must(template.New("issue/new").Parse(bodyTpl)) |
|
|
|
|
|
|
|
|
|
recipients := []*user_model.User{{Name: "Test", Email: "test@gitea.com"}, {Name: "Test2", Email: "test2@gitea.com"}} |
|
|
|
|
msgs, err := composeIssueCommentMessages(&mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCreateIssue, |
|
|
|
|
msgs, err := composeIssueCommentMessages(t.Context(), &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCreateIssue, |
|
|
|
|
Content: "test body", |
|
|
|
|
}, "en-US", recipients, false, "issue create") |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
@ -204,32 +219,28 @@ func TestTemplateSelection(t *testing.T) {
@@ -204,32 +219,28 @@ func TestTemplateSelection(t *testing.T) {
|
|
|
|
|
assert.Contains(t, wholemsg, expBody) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
msg := testComposeIssueCommentMessage(t, &mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCreateIssue, |
|
|
|
|
msg := testComposeIssueCommentMessage(t, &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCreateIssue, |
|
|
|
|
Content: "test body", |
|
|
|
|
}, recipients, false, "TestTemplateSelection") |
|
|
|
|
expect(t, msg, "issue/new/subject", "issue/new/body") |
|
|
|
|
|
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCommentIssue, |
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCommentIssue, |
|
|
|
|
Content: "test body", Comment: comment, |
|
|
|
|
}, recipients, false, "TestTemplateSelection") |
|
|
|
|
expect(t, msg, "issue/default/subject", "issue/default/body") |
|
|
|
|
|
|
|
|
|
pull := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2, Repo: repo, Poster: doer}) |
|
|
|
|
comment = unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 4, Issue: pull}) |
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: pull, Doer: doer, ActionType: activities_model.ActionCommentPull, |
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailComment{ |
|
|
|
|
Issue: pull, Doer: doer, ActionType: activities_model.ActionCommentPull, |
|
|
|
|
Content: "test body", Comment: comment, |
|
|
|
|
}, recipients, false, "TestTemplateSelection") |
|
|
|
|
expect(t, msg, "pull/comment/subject", "pull/comment/body") |
|
|
|
|
|
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCloseIssue, |
|
|
|
|
msg = testComposeIssueCommentMessage(t, &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: activities_model.ActionCloseIssue, |
|
|
|
|
Content: "test body", Comment: comment, |
|
|
|
|
}, recipients, false, "TestTemplateSelection") |
|
|
|
|
expect(t, msg, "Re: [user2/repo1] issue1 (#1)", "issue/close/body") |
|
|
|
|
@ -246,9 +257,8 @@ func TestTemplateServices(t *testing.T) {
@@ -246,9 +257,8 @@ func TestTemplateServices(t *testing.T) {
|
|
|
|
|
bodyTemplates = template.Must(template.New("issue/default").Parse(tplBody)) |
|
|
|
|
|
|
|
|
|
recipients := []*user_model.User{{Name: "Test", Email: "test@gitea.com"}} |
|
|
|
|
msg := testComposeIssueCommentMessage(t, &mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
Issue: issue, Doer: doer, ActionType: actionType, |
|
|
|
|
msg := testComposeIssueCommentMessage(t, &mailComment{ |
|
|
|
|
Issue: issue, Doer: doer, ActionType: actionType, |
|
|
|
|
Content: "test body", Comment: comment, |
|
|
|
|
}, recipients, fromMention, "TestTemplateServices") |
|
|
|
|
|
|
|
|
|
@ -280,8 +290,8 @@ func TestTemplateServices(t *testing.T) {
@@ -280,8 +290,8 @@ func TestTemplateServices(t *testing.T) {
|
|
|
|
|
"//Re: //") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func testComposeIssueCommentMessage(t *testing.T, ctx *mailCommentContext, recipients []*user_model.User, fromMention bool, info string) *sender_service.Message { |
|
|
|
|
msgs, err := composeIssueCommentMessages(ctx, "en-US", recipients, fromMention, info) |
|
|
|
|
func testComposeIssueCommentMessage(t *testing.T, ctx *mailComment, recipients []*user_model.User, fromMention bool, info string) *sender_service.Message { |
|
|
|
|
msgs, err := composeIssueCommentMessages(t.Context(), ctx, "en-US", recipients, fromMention, info) |
|
|
|
|
assert.NoError(t, err) |
|
|
|
|
assert.Len(t, msgs, 1) |
|
|
|
|
return msgs[0] |
|
|
|
|
@ -290,10 +300,10 @@ func testComposeIssueCommentMessage(t *testing.T, ctx *mailCommentContext, recip
@@ -290,10 +300,10 @@ func testComposeIssueCommentMessage(t *testing.T, ctx *mailCommentContext, recip
|
|
|
|
|
func TestGenerateAdditionalHeaders(t *testing.T) { |
|
|
|
|
doer, _, issue, _ := prepareMailerTest(t) |
|
|
|
|
|
|
|
|
|
ctx := &mailCommentContext{Context: t.Context(), Issue: issue, Doer: doer} |
|
|
|
|
comment := &mailComment{Issue: issue, Doer: doer} |
|
|
|
|
recipient := &user_model.User{Name: "test", Email: "test@gitea.com"} |
|
|
|
|
|
|
|
|
|
headers := generateAdditionalHeaders(ctx, "dummy-reason", recipient) |
|
|
|
|
headers := generateAdditionalHeaders(comment, "dummy-reason", recipient) |
|
|
|
|
|
|
|
|
|
expected := map[string]string{ |
|
|
|
|
"List-ID": "user2/repo1 <repo1.user2.localhost>", |
|
|
|
|
@ -480,7 +490,7 @@ func TestFromDisplayName(t *testing.T) {
@@ -480,7 +490,7 @@ func TestFromDisplayName(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
func TestEmbedBase64Images(t *testing.T) { |
|
|
|
|
user, repo, issue, att1, att2 := prepareMailerBase64Test(t) |
|
|
|
|
ctx := &mailCommentContext{Context: t.Context(), Issue: issue, Doer: user} |
|
|
|
|
// comment := &mailComment{Issue: issue, Doer: user}
|
|
|
|
|
|
|
|
|
|
imgExternalURL := "https://via.placeholder.com/10" |
|
|
|
|
imgExternalImg := fmt.Sprintf(`<img src="%s"/>`, imgExternalURL) |
|
|
|
|
@ -509,8 +519,7 @@ func TestEmbedBase64Images(t *testing.T) {
@@ -509,8 +519,7 @@ func TestEmbedBase64Images(t *testing.T) {
|
|
|
|
|
require.NoError(t, issues_model.UpdateIssueCols(t.Context(), issue, "content")) |
|
|
|
|
|
|
|
|
|
recipients := []*user_model.User{{Name: "Test", Email: "test@gitea.com"}} |
|
|
|
|
msgs, err := composeIssueCommentMessages(&mailCommentContext{ |
|
|
|
|
Context: t.Context(), |
|
|
|
|
msgs, err := composeIssueCommentMessages(t.Context(), &mailComment{ |
|
|
|
|
Issue: issue, |
|
|
|
|
Doer: user, |
|
|
|
|
ActionType: activities_model.ActionCreateIssue, |
|
|
|
|
@ -526,7 +535,7 @@ func TestEmbedBase64Images(t *testing.T) {
@@ -526,7 +535,7 @@ func TestEmbedBase64Images(t *testing.T) {
|
|
|
|
|
mailBody := "<html><head></head><body><p>Test1</p>" + imgExternalImg + "<p>Test2</p>" + att1Img + "<p>Test3</p></body></html>" |
|
|
|
|
expectedMailBody := "<html><head></head><body><p>Test1</p>" + imgExternalImg + "<p>Test2</p>" + att1ImgBase64 + "<p>Test3</p></body></html>" |
|
|
|
|
b64embedder := newMailAttachmentBase64Embedder(user, repo, 1024) |
|
|
|
|
resultMailBody, err := b64embedder.Base64InlineImages(ctx, template.HTML(mailBody)) |
|
|
|
|
resultMailBody, err := b64embedder.Base64InlineImages(t.Context(), template.HTML(mailBody)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
assert.Equal(t, expectedMailBody, string(resultMailBody)) |
|
|
|
|
}) |
|
|
|
|
@ -534,13 +543,13 @@ func TestEmbedBase64Images(t *testing.T) {
@@ -534,13 +543,13 @@ func TestEmbedBase64Images(t *testing.T) {
|
|
|
|
|
t.Run("LimitedEmailBodySize", func(t *testing.T) { |
|
|
|
|
mailBody := fmt.Sprintf("<html><head></head><body>%s%s</body></html>", att1Img, att2Img) |
|
|
|
|
b64embedder := newMailAttachmentBase64Embedder(user, repo, 1024) |
|
|
|
|
resultMailBody, err := b64embedder.Base64InlineImages(ctx, template.HTML(mailBody)) |
|
|
|
|
resultMailBody, err := b64embedder.Base64InlineImages(t.Context(), template.HTML(mailBody)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
expected := fmt.Sprintf("<html><head></head><body>%s%s</body></html>", att1ImgBase64, att2Img) |
|
|
|
|
assert.Equal(t, expected, string(resultMailBody)) |
|
|
|
|
|
|
|
|
|
b64embedder = newMailAttachmentBase64Embedder(user, repo, 4096) |
|
|
|
|
resultMailBody, err = b64embedder.Base64InlineImages(ctx, template.HTML(mailBody)) |
|
|
|
|
resultMailBody, err = b64embedder.Base64InlineImages(t.Context(), template.HTML(mailBody)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
expected = fmt.Sprintf("<html><head></head><body>%s%s</body></html>", att1ImgBase64, att2ImgBase64) |
|
|
|
|
assert.Equal(t, expected, string(resultMailBody)) |
|
|
|
|
|