Add inbucket docker image to allow local and automated testing of emails (#4901)
* add docker container for inbucket * Add way to get the emails using inbucket and add a test for reset password * add config setting to send emails * update TestEmailTest update * add another test and fix wrong assert * update per review fix lint change senders email * Revert config.json to default values for EmailSettings section * update test * add setup to make the test run
Этот коммит содержится в:
коммит произвёл
Harrison Healey
родитель
97a51b0e31
Коммит
dc54e640c2
@@ -160,6 +160,22 @@ func TestRecycleDatabaseConnection(t *testing.T) {
|
||||
func TestEmailTest(t *testing.T) {
|
||||
th := Setup().InitBasic().InitSystemAdmin()
|
||||
|
||||
SendEmailNotifications := utils.Cfg.EmailSettings.SendEmailNotifications
|
||||
SMTPServer := utils.Cfg.EmailSettings.SMTPServer
|
||||
SMTPPort := utils.Cfg.EmailSettings.SMTPPort
|
||||
FeedbackEmail := utils.Cfg.EmailSettings.FeedbackEmail
|
||||
defer func() {
|
||||
utils.Cfg.EmailSettings.SendEmailNotifications = SendEmailNotifications
|
||||
utils.Cfg.EmailSettings.SMTPServer = SMTPServer
|
||||
utils.Cfg.EmailSettings.SMTPPort = SMTPPort
|
||||
utils.Cfg.EmailSettings.FeedbackEmail = FeedbackEmail
|
||||
}()
|
||||
|
||||
utils.Cfg.EmailSettings.SendEmailNotifications = false
|
||||
utils.Cfg.EmailSettings.SMTPServer = ""
|
||||
utils.Cfg.EmailSettings.SMTPPort = ""
|
||||
utils.Cfg.EmailSettings.FeedbackEmail = ""
|
||||
|
||||
if _, err := th.BasicClient.TestEmail(utils.Cfg); err == nil {
|
||||
t.Fatal("Shouldn't have permissions")
|
||||
}
|
||||
|
||||
@@ -59,6 +59,10 @@ func Setup() *TestHelper {
|
||||
utils.InitTranslations(utils.Cfg.LocalizationSettings)
|
||||
utils.Cfg.TeamSettings.MaxUsersPerTeam = 50
|
||||
*utils.Cfg.RateLimitSettings.Enable = false
|
||||
utils.Cfg.EmailSettings.SendEmailNotifications = true
|
||||
utils.Cfg.EmailSettings.SMTPServer = "dockerhost"
|
||||
utils.Cfg.EmailSettings.SMTPPort = "2500"
|
||||
utils.Cfg.EmailSettings.FeedbackEmail = "test@example.com"
|
||||
utils.DisableDebugLogForTest()
|
||||
app.NewServer()
|
||||
app.InitStores()
|
||||
|
||||
@@ -857,11 +857,45 @@ func TestEmailMention(t *testing.T) {
|
||||
th := Setup().InitBasic()
|
||||
Client := th.BasicClient
|
||||
channel1 := th.BasicChannel
|
||||
Client.Must(Client.AddChannelMember(channel1.Id, th.BasicUser2.Id))
|
||||
|
||||
post1 := &model.Post{ChannelId: channel1.Id, Message: th.BasicUser.Username}
|
||||
th.LoginBasic2()
|
||||
//Set the notification properties
|
||||
data := make(map[string]string)
|
||||
data["user_id"] = th.BasicUser2.Id
|
||||
data["email"] = "true"
|
||||
data["desktop"] = "all"
|
||||
data["desktop_sound"] = "false"
|
||||
data["comments"] = "any"
|
||||
Client.Must(Client.UpdateUserNotify(data))
|
||||
|
||||
store.Must(app.Srv.Store.Preference().Save(&model.Preferences{{
|
||||
UserId: th.BasicUser2.Id,
|
||||
Category: model.PREFERENCE_CATEGORY_NOTIFICATIONS,
|
||||
Name: model.PREFERENCE_NAME_EMAIL_INTERVAL,
|
||||
Value: "0",
|
||||
}}))
|
||||
|
||||
//Delete all the messages before create a mention post
|
||||
utils.DeleteMailBox(th.BasicUser2.Email)
|
||||
|
||||
//Send a mention message from user1 to user2
|
||||
th.LoginBasic()
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
post1 := &model.Post{ChannelId: channel1.Id, Message: "@" + th.BasicUser2.Username + " this is a test"}
|
||||
post1 = Client.Must(Client.CreatePost(post1)).Data.(*model.Post)
|
||||
|
||||
// No easy way to verify the email was sent, but this will at least cause the server to throw errors if the code is broken
|
||||
//Check if the email was send to the rigth email address and the mention
|
||||
if resultsMailbox, err := utils.GetMailBox(th.BasicUser2.Email); err != nil && !strings.ContainsAny(resultsMailbox[0].To[0], th.BasicUser2.Email) {
|
||||
t.Fatal("Wrong To recipient")
|
||||
} else {
|
||||
if resultsEmail, err := utils.GetMessageFromMailbox(th.BasicUser2.Email, resultsMailbox[0].ID); err == nil {
|
||||
if !strings.Contains(resultsEmail.Body.Text, post1.Message) {
|
||||
t.Log(resultsEmail.Body.Text)
|
||||
t.Fatal("Received wrong Message")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1284,6 +1284,9 @@ func TestResetPassword(t *testing.T) {
|
||||
LinkUserToTeam(user, team)
|
||||
store.Must(app.Srv.Store.User().VerifyEmail(user.Id))
|
||||
|
||||
//Delete all the messages before check the reset password
|
||||
utils.DeleteMailBox(user.Email)
|
||||
|
||||
Client.Must(Client.SendPasswordReset(user.Email))
|
||||
|
||||
var recovery *model.PasswordRecovery
|
||||
@@ -1293,6 +1296,19 @@ func TestResetPassword(t *testing.T) {
|
||||
recovery = result.Data.(*model.PasswordRecovery)
|
||||
}
|
||||
|
||||
//Check if the email was send to the rigth email address and the recovery key match
|
||||
if resultsMailbox, err := utils.GetMailBox(user.Email); err != nil && !strings.ContainsAny(resultsMailbox[0].To[0], user.Email) {
|
||||
t.Fatal("Wrong To recipient")
|
||||
} else {
|
||||
if resultsEmail, err := utils.GetMessageFromMailbox(user.Email, resultsMailbox[0].ID); err == nil {
|
||||
if !strings.Contains(resultsEmail.Body.Text, recovery.Code) {
|
||||
t.Log(resultsEmail.Body.Text)
|
||||
t.Log(recovery.Code)
|
||||
t.Fatal("Received wrong recovery code")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := Client.ResetPassword(recovery.Code, ""); err == nil {
|
||||
t.Fatal("Should have errored - no password")
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user