mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 06:21:11 +00:00 
			
		
		
		
	Sends email with information on the new user (time of creation and time of last sign-in) and a link to manage the new user from the admin panel closes: https://codeberg.org/forgejo/forgejo/issues/480 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/1371 Co-authored-by: Aravinth Manivannan <realaravinth@batsense.net> Co-committed-by: Aravinth Manivannan <realaravinth@batsense.net> (cherry picked from commitc721aa828b) (cherry picked from commit6487efcb9d) Conflicts: modules/notification/base/notifier.go modules/notification/base/null.go modules/notification/notification.go https://codeberg.org/forgejo/forgejo/pulls/1422 (cherry picked from commit7ea66ee1c5) Conflicts: services/notify/notifier.go services/notify/notify.go services/notify/null.go https://codeberg.org/forgejo/forgejo/pulls/1469 (cherry picked from commit7d2d997011) (cherry picked from commit435a54f140) (cherry picked from commit8ec7b3e448) [GITEA] notifies admins on new user registration (squash) performance bottleneck Refs: https://codeberg.org/forgejo/forgejo/issues/1479 (cherry picked from commit97ac9147ff) (cherry picked from commit19f295c16b) (cherry picked from commit3367dcb2cf) [GITEA] notifies admins on new user registration (squash) cosmetic changes Co-authored-by: delvh <dev.lh@web.de> (cherry picked from commit9f1670e040) (cherry picked from commitde5bb2a224) (cherry picked from commit8f8e52f31a) (cherry picked from commite0d5130312) (cherry picked from commitf1288d6d9b) (cherry picked from commitf664f41658) (cherry picked from commite44e6c7e47)
		
			
				
	
	
		
			88 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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"
 | |
| 	admin.Email = "admin@example.com"
 | |
| 
 | |
| 	newUser := new(user_model.User)
 | |
| 	newUser.Name = "new_user"
 | |
| 	newUser.Language = "en_US"
 | |
| 	newUser.IsAdmin = false
 | |
| 	newUser.Email = "new_user@example.com"
 | |
| 	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{
 | |
| 		From:     "test@example.com",
 | |
| 		Protocol: "dummy",
 | |
| 	}
 | |
| 
 | |
| 	setting.MailService = &mailService
 | |
| 	setting.Domain = "localhost"
 | |
| 	setting.AppSubURL = "http://localhost"
 | |
| 
 | |
| 	// test with SEND_NOTIFICATION_EMAIL_ON_NEW_USER enabled
 | |
| 	setting.Admin.SendNotificationEmailOnNewUser = true
 | |
| 
 | |
| 	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])
 | |
| 
 | |
| 	// test with SEND_NOTIFICATION_EMAIL_ON_NEW_USER disabled; emails shouldn't be sent
 | |
| 	setting.Admin.SendNotificationEmailOnNewUser = false
 | |
| 	sa = func(msgs []*Message) {
 | |
| 		assert.Equal(t, 1, 0, "this shouldn't execute. MailNewUser must exit early since SEND_NOTIFICATION_EMAIL_ON_NEW_USER is disabled")
 | |
| 	}
 | |
| 
 | |
| 	MailNewUser(ctx, users[1])
 | |
| }
 |