diff --git a/mailer/main_test.go b/mailer/main_test.go index 374bb39..d5ad93c 100644 --- a/mailer/main_test.go +++ b/mailer/main_test.go @@ -4,6 +4,8 @@ import ( "testing" "github.com/stretchr/testify/assert" + + "github.com/go-mail/mail" ) func TestSetupAndPing(t *testing.T) { @@ -23,3 +25,30 @@ func TestSetupAndPing(t *testing.T) { assert.Error(err) 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 Bob and Cora!") + + 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!") + +} diff --git a/mailer/test.go b/mailer/test.go index 60bc881..51fe70b 100644 --- a/mailer/test.go +++ b/mailer/test.go @@ -10,8 +10,14 @@ import ( ) type fakeServer struct { - s *Service - l net.Listener + s *Service + l net.Listener + MSGS chan msg +} + +type msg struct { + Header textproto.MIMEHeader + Body string } // NewFakeServer - to get mocked Service for mail-service @@ -28,7 +34,8 @@ func NewFakeServer() (*fakeServer, *Service) { func newFakeServer(s *Service) (*fakeServer, *Service) { 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)) if err != nil { @@ -84,6 +91,30 @@ func (fs *fakeServer) handle(conn net.Conn) { case "QUIT": c.Cmd("221 Bye") return + case "DATA": + c.Cmd("354 End data with .") + 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") } } }