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  }