test(mailer): improve - send and fetch mail
continuous-integration/drone the build was successful Details

This commit is contained in:
Geno 2021-06-23 22:55:53 +02:00
parent 0e411ba5e2
commit 2502a3bf67
2 changed files with 63 additions and 3 deletions

View File

@ -4,6 +4,8 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/go-mail/mail"
) )
func TestSetupAndPing(t *testing.T) { func TestSetupAndPing(t *testing.T) {
@ -23,3 +25,30 @@ func TestSetupAndPing(t *testing.T) {
assert.Error(err) assert.Error(err)
mock.Close() mock.Close()
} }
func TestSend(t *testing.T) {
assert := assert.New(t)
mock, s := NewFakeServer()
assert.NotNil(mock)
// correct setup
err := s.Setup()
assert.NoError(err)
m := mail.NewMessage()
m.SetHeader("From", "alex@example.com")
m.SetHeader("To", "bob@example.com", "cora@example.com")
m.SetAddressHeader("Cc", "dan@example.com", "Dan")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "Hello Bob and Cora!")
m.AddAlternative("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
err = s.Dailer.DialAndSend(m)
assert.NoError(err)
msg := <-mock.MSGS
mock.Close()
assert.Equal("alex@example.com", msg.Header["From"][0])
assert.Contains(msg.Body, "Bob and Cora!")
}

View File

@ -12,6 +12,12 @@ import (
type fakeServer struct { type fakeServer struct {
s *Service s *Service
l net.Listener l net.Listener
MSGS chan msg
}
type msg struct {
Header textproto.MIMEHeader
Body string
} }
// NewFakeServer - to get mocked Service for mail-service // NewFakeServer - to get mocked Service for mail-service
@ -29,6 +35,7 @@ func NewFakeServer() (*fakeServer, *Service) {
func newFakeServer(s *Service) (*fakeServer, *Service) { func newFakeServer(s *Service) (*fakeServer, *Service) {
fs := &fakeServer{ fs := &fakeServer{
s: s, s: s,
MSGS: make(chan msg),
} }
l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", fs.s.SMTPHost, fs.s.SMTPPort)) l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", fs.s.SMTPHost, fs.s.SMTPPort))
if err != nil { if err != nil {
@ -84,6 +91,30 @@ func (fs *fakeServer) handle(conn net.Conn) {
case "QUIT": case "QUIT":
c.Cmd("221 Bye") c.Cmd("221 Bye")
return return
case "DATA":
c.Cmd("354 End data with <CR><LF>.<CR><LF>")
head, _ := c.ReadMIMEHeader()
data := ""
handleMsgData:
for {
s, _ := c.ReadLine()
switch s {
case ".":
break handleMsgData
default:
data = fmt.Sprintf("%s%s\n", data, s)
c.Cmd("250 Ok")
}
}
fs.MSGS <- msg{
Header: head,
Body: data,
}
default:
// fmt.Println(s)
// TODO : MAIL FROM: and RCPT TO:
c.Cmd("250 Ok")
} }
} }
} }