github.com/volatiletech/authboss@v2.4.1+incompatible/defaults/smtp_mailer_test.go (about) 1 package defaults 2 3 import ( 4 "context" 5 "encoding/json" 6 "flag" 7 "fmt" 8 "io/ioutil" 9 "net/smtp" 10 "testing" 11 12 "github.com/volatiletech/authboss" 13 ) 14 15 var ( 16 flagTestSMTPMailer = flag.Bool("test-smtp-mailer", false, "Test the smtp mailer") 17 ) 18 19 func TestSMTPMailer(t *testing.T) { 20 t.Parallel() 21 22 if !*flagTestSMTPMailer { 23 t.Skip("SMTP Mailer Testing not enabled (-test-smtp-mailer flag)") 24 } 25 26 creds := struct { 27 Server string `json:"server,omitempty"` 28 Port int `json:"port,omitempty"` 29 Email string `json:"email,omitempty"` 30 Password string `json:"password,omitempty"` 31 }{} 32 33 b, err := ioutil.ReadFile("smtp_mailer_test.json") 34 if err != nil { 35 t.Fatal(`error reading file: "smtp_mailer_test.json`, err) 36 } 37 38 if err = json.Unmarshal(b, &creds); err != nil { 39 t.Fatal(err) 40 } 41 42 server := fmt.Sprintf("%s:%d", creds.Server, creds.Port) 43 mailer := NewSMTPMailer(server, smtp.PlainAuth("", creds.Email, creds.Password, creds.Server)) 44 45 mail := authboss.Email{ 46 From: creds.Email, 47 To: []string{creds.Email}, 48 Subject: "Authboss Test SMTP Mailer", 49 } 50 51 txtOnly := mail 52 txtOnly.Subject += ": Text Content" 53 txtOnly.TextBody = "Authboss\nSMTP\nTest\nWith\nNewlines" 54 55 if err = mailer.Send(context.Background(), txtOnly); err != nil { 56 t.Error(err) 57 } 58 59 htmlOnly := mail 60 htmlOnly.Subject += ": HTML Content" 61 htmlOnly.HTMLBody = "Authboss<br>Test<br>\nWith<br>Newlines\nand<br>breaks" 62 63 if err = mailer.Send(context.Background(), htmlOnly); err != nil { 64 t.Error(err) 65 } 66 67 mixed := mail 68 mixed.Subject += ": Mixed Content" 69 mixed.HTMLBody = htmlOnly.HTMLBody 70 mixed.TextBody = txtOnly.TextBody 71 72 if err = mailer.Send(context.Background(), mixed); err != nil { 73 t.Error(err) 74 } 75 } 76 77 func TestSMTPMailerPanic(t *testing.T) { 78 t.Parallel() 79 80 _ = NewSMTPMailer("server", nil) 81 82 recovered := false 83 defer func() { 84 recovered = recover() != nil 85 }() 86 87 NewSMTPMailer("", nil) 88 89 if !recovered { 90 t.Error("Should have panicked.") 91 } 92 }