| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // Copyright 2023 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package incoming
-
- import (
- "strings"
- "testing"
-
- "github.com/jhillyerd/enmime"
- "github.com/stretchr/testify/assert"
- )
-
- func TestIsAutomaticReply(t *testing.T) {
- cases := []struct {
- Headers map[string]string
- Expected bool
- }{
- {
- Headers: map[string]string{},
- Expected: false,
- },
- {
- Headers: map[string]string{
- "Auto-Submitted": "no",
- },
- Expected: false,
- },
- {
- Headers: map[string]string{
- "Auto-Submitted": "yes",
- },
- Expected: true,
- },
- {
- Headers: map[string]string{
- "X-Autoreply": "no",
- },
- Expected: false,
- },
- {
- Headers: map[string]string{
- "X-Autoreply": "yes",
- },
- Expected: true,
- },
- {
- Headers: map[string]string{
- "X-Autorespond": "yes",
- },
- Expected: true,
- },
- }
-
- for _, c := range cases {
- b := enmime.Builder().
- From("Dummy", "dummy@gitea.io").
- To("Dummy", "dummy@gitea.io")
- for k, v := range c.Headers {
- b = b.Header(k, v)
- }
- root, err := b.Build()
- assert.NoError(t, err)
- env, err := enmime.EnvelopeFromPart(root)
- assert.NoError(t, err)
-
- assert.Equal(t, c.Expected, isAutomaticReply(env))
- }
- }
-
- func TestGetContentFromMailReader(t *testing.T) {
- mailString := "Content-Type: multipart/mixed; boundary=message-boundary\r\n" +
- "\r\n" +
- "--message-boundary\r\n" +
- "Content-Type: multipart/alternative; boundary=text-boundary\r\n" +
- "\r\n" +
- "--text-boundary\r\n" +
- "Content-Type: text/plain\r\n" +
- "Content-Disposition: inline\r\n" +
- "\r\n" +
- "mail content\r\n" +
- "--text-boundary--\r\n" +
- "--message-boundary\r\n" +
- "Content-Type: text/plain\r\n" +
- "Content-Disposition: attachment; filename=attachment.txt\r\n" +
- "\r\n" +
- "attachment content\r\n" +
- "--message-boundary--\r\n"
-
- env, err := enmime.ReadEnvelope(strings.NewReader(mailString))
- assert.NoError(t, err)
- content := getContentFromMailReader(env)
- assert.Equal(t, "mail content", content.Content)
- assert.Len(t, content.Attachments, 1)
- assert.Equal(t, "attachment.txt", content.Attachments[0].Name)
- assert.Equal(t, []byte("attachment content"), content.Attachments[0].Content)
-
- mailString = "Content-Type: multipart/mixed; boundary=message-boundary\r\n" +
- "\r\n" +
- "--message-boundary\r\n" +
- "Content-Type: multipart/alternative; boundary=text-boundary\r\n" +
- "\r\n" +
- "--text-boundary\r\n" +
- "Content-Type: text/html\r\n" +
- "Content-Disposition: inline\r\n" +
- "\r\n" +
- "<p>mail content</p>\r\n" +
- "--text-boundary--\r\n" +
- "--message-boundary--\r\n"
-
- env, err = enmime.ReadEnvelope(strings.NewReader(mailString))
- assert.NoError(t, err)
- content = getContentFromMailReader(env)
- assert.Equal(t, "mail content", content.Content)
- assert.Empty(t, content.Attachments)
-
- mailString = "Content-Type: multipart/mixed; boundary=message-boundary\r\n" +
- "\r\n" +
- "--message-boundary\r\n" +
- "Content-Type: multipart/alternative; boundary=text-boundary\r\n" +
- "\r\n" +
- "--text-boundary\r\n" +
- "Content-Type: text/plain\r\n" +
- "Content-Disposition: inline\r\n" +
- "\r\n" +
- "mail content without signature\r\n" +
- "--\r\n" +
- "signature\r\n" +
- "--text-boundary--\r\n" +
- "--message-boundary--\r\n"
-
- env, err = enmime.ReadEnvelope(strings.NewReader(mailString))
- assert.NoError(t, err)
- content = getContentFromMailReader(env)
- assert.NoError(t, err)
- assert.Equal(t, "mail content without signature", content.Content)
- assert.Empty(t, content.Attachments)
- }
|