github.com/jacobsoderblom/buffalo@v0.11.0/mail/smtp_sender_test.go (about)

     1  package mail_test
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/gobuffalo/buffalo/mail"
     8  	"github.com/gobuffalo/buffalo/render"
     9  	"github.com/gobuffalo/x/fakesmtp"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  var sender mail.Sender
    14  var rend *render.Engine
    15  var smtpServer *fakesmtp.Server
    16  
    17  const smtpPort = "2002"
    18  
    19  func init() {
    20  	rend = render.New(render.Options{})
    21  	smtpServer, _ = fakesmtp.New(smtpPort)
    22  	sender, _ = mail.NewSMTPSender("127.0.0.1", smtpPort, "username", "password")
    23  
    24  	go smtpServer.Start(smtpPort)
    25  }
    26  
    27  func TestSendPlain(t *testing.T) {
    28  	smtpServer.Clear()
    29  	r := require.New(t)
    30  
    31  	m := mail.NewMessage()
    32  	m.From = "mark@example.com"
    33  	m.To = []string{"something@something.com"}
    34  	m.Subject = "Cool Message"
    35  	m.CC = []string{"other@other.com", "my@other.com"}
    36  	m.Bcc = []string{"secret@other.com"}
    37  
    38  	m.AddAttachment("someFile.txt", "text/plain", bytes.NewBuffer([]byte("hello")))
    39  	m.AddBody(rend.String("Hello <%= Name %>"), render.Data{"Name": "Antonio"})
    40  	r.Equal(m.Bodies[0].Content, "Hello Antonio")
    41  
    42  	m.SetHeader("X-SMTPAPI", `{"send_at": 1409348513}`)
    43  
    44  	err := sender.Send(m)
    45  	r.Nil(err)
    46  
    47  	lastMessage := smtpServer.LastMessage()
    48  
    49  	r.Contains(lastMessage, "FROM:<mark@example.com>")
    50  	r.Contains(lastMessage, "RCPT TO:<other@other.com>")
    51  	r.Contains(lastMessage, "RCPT TO:<my@other.com>")
    52  	r.Contains(lastMessage, "RCPT TO:<secret@other.com>")
    53  	r.Contains(lastMessage, "Subject: Cool Message")
    54  	r.Contains(lastMessage, "Cc: other@other.com, my@other.com")
    55  	r.Contains(lastMessage, "Content-Type: text/plain")
    56  	r.Contains(lastMessage, "Hello Antonio")
    57  	r.Contains(lastMessage, "Content-Disposition: attachment; filename=\"someFile.txt\"")
    58  	r.Contains(lastMessage, "aGVsbG8=") //base64 of the file content
    59  	r.Contains(lastMessage, `X-SMTPAPI: {"send_at": 1409348513}`)
    60  }