2023-09-07 03:11:29 -04:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package mailer
import (
"context"
"strconv"
"strings"
"testing"
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
"github.com/stretchr/testify/assert"
)
func getTestUsers ( ) [ ] * user_model . User {
admin := new ( user_model . User )
admin . Name = "admin"
admin . IsAdmin = true
admin . Language = "en_US"
2023-09-20 00:18:10 -04:00
admin . Email = "admin@example.com"
2023-09-07 03:11:29 -04:00
newUser := new ( user_model . User )
newUser . Name = "new_user"
newUser . Language = "en_US"
newUser . IsAdmin = false
2023-09-20 00:18:10 -04:00
newUser . Email = "new_user@example.com"
2023-09-07 03:11:29 -04:00
newUser . LastLoginUnix = 1693648327
newUser . CreatedUnix = 1693648027
user_model . CreateUser ( db . DefaultContext , admin )
user_model . CreateUser ( db . DefaultContext , newUser )
users := make ( [ ] * user_model . User , 0 )
users = append ( users , admin )
users = append ( users , newUser )
return users
}
func cleanUpUsers ( ctx context . Context , users [ ] * user_model . User ) {
for _ , u := range users {
db . DeleteByID ( ctx , u . ID , new ( user_model . User ) )
}
}
func TestAdminNotificationMail_test ( t * testing . T ) {
mailService := setting . Mailer {
2023-09-20 00:18:10 -04:00
From : "test@example.com" ,
2023-09-07 03:11:29 -04:00
Protocol : "dummy" ,
}
setting . MailService = & mailService
setting . Domain = "localhost"
setting . AppSubURL = "http://localhost"
2023-09-20 00:18:10 -04:00
// test with SEND_NOTIFICATION_EMAIL_ON_NEW_USER enabled
setting . Admin . SendNotificationEmailOnNewUser = true
2023-09-07 03:11:29 -04:00
ctx := context . Background ( )
NewContext ( ctx )
users := getTestUsers ( )
oldSendAsyncs := sa
defer func ( ) {
sa = oldSendAsyncs
cleanUpUsers ( ctx , users )
} ( )
sa = func ( msgs [ ] * Message ) {
assert . Equal ( t , len ( msgs ) , 1 , "Test provides only one admin user, so only one email must be sent" )
assert . Equal ( t , msgs [ 0 ] . To , users [ 0 ] . Email , "checks if the recipient is the admin of the instance" )
manageUserURL := "/admin/users/" + strconv . FormatInt ( users [ 1 ] . ID , 10 )
assert . True ( t , strings . ContainsAny ( msgs [ 0 ] . Body , manageUserURL ) , "checks if the message contains the link to manage the newly created user from the admin panel" )
}
MailNewUser ( ctx , users [ 1 ] )
2023-09-20 00:18:10 -04:00
// test with SEND_NOTIFICATION_EMAIL_ON_NEW_USER disabled; emails shouldn't be sent
setting . Admin . SendNotificationEmailOnNewUser = false
2023-09-07 03:11:29 -04:00
sa = func ( msgs [ ] * Message ) {
2023-09-20 00:18:10 -04:00
assert . Equal ( t , 1 , 0 , "this shouldn't execute. MailNewUser must exit early since SEND_NOTIFICATION_EMAIL_ON_NEW_USER is disabled" )
2023-09-07 03:11:29 -04:00
}
MailNewUser ( ctx , users [ 1 ] )
}