github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/tests/plugin_tests/test_send_mail_plugin/main.go (about)

     1  // Copyright (c) 2015-present Xenia, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  	"strings"
     9  
    10  	"github.com/xzl8028/xenia-server/model"
    11  	"github.com/xzl8028/xenia-server/plugin"
    12  	"github.com/xzl8028/xenia-server/services/mailservice"
    13  )
    14  
    15  type MyPlugin struct {
    16  	plugin.XeniaPlugin
    17  }
    18  
    19  func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
    20  	to := "{{.BasicUser.Email}}"
    21  	subject := "testing plugin api sending email"
    22  	body := "this is a test."
    23  
    24  	if err := p.API.SendMail(to, subject, body); err != nil {
    25  		return nil, err.Error()
    26  	}
    27  
    28  	// Check if we received the email
    29  	var resultsMailbox mailservice.JSONMessageHeaderInbucket
    30  	if errMail := mailservice.RetryInbucket(5, func() error {
    31  		var err error
    32  		resultsMailbox, err = mailservice.GetMailBox(to)
    33  		return err
    34  	}); errMail != nil {
    35  		return nil, errMail.Error()
    36  	}
    37  	if len(resultsMailbox) == 0 {
    38  		return nil, fmt.Sprintf("No mailbox results. Should be %v", len(resultsMailbox))
    39  	}
    40  	if !strings.ContainsAny(resultsMailbox[len(resultsMailbox)-1].To[0], to) {
    41  		return nil, "Result doesn't contain recipient"
    42  	}
    43  
    44  	resultsEmail, err1 := mailservice.GetMessageFromMailbox(to, resultsMailbox[len(resultsMailbox)-1].ID)
    45  	if err1 != nil {
    46  		return nil, err1.Error()
    47  	}
    48  	if resultsEmail.Subject != subject {
    49  		return nil, fmt.Sprintf("subject differs: %v vs %s", resultsEmail.Subject, subject)
    50  	}
    51  	if resultsEmail.Body.Text != body {
    52  		return nil, fmt.Sprintf("body differs: %v vs %s", resultsEmail.Body.Text, body)
    53  	}
    54  	return nil, ""
    55  }
    56  
    57  func main() {
    58  	plugin.ClientMain(&MyPlugin{})
    59  }