chore: add unit test

This commit is contained in:
Gusted 2026-02-21 16:00:11 +01:00 committed by Mathieu Fenniak
parent feabaab4bd
commit db4b2f9802
3 changed files with 129 additions and 0 deletions

View file

@ -0,0 +1,5 @@
-
id: 1001
user_id: 11
repo_id: 41
mode: 1

View file

@ -0,0 +1,122 @@
// Copyright 2026 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: GPL-3.0-or-later
package mailer_test
import (
"testing"
"forgejo.org/models/db"
repo_model "forgejo.org/models/repo"
"forgejo.org/models/unittest"
user_model "forgejo.org/models/user"
"forgejo.org/modules/gitrepo"
"forgejo.org/services/mailer"
release_service "forgejo.org/services/release"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestMailNewRelease(t *testing.T) {
defer unittest.OverrideFixtures("services/mailer/fixtures/TestMailNewRelease")()
defer require.NoError(t, unittest.PrepareTestDatabase())
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
user11 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 11})
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo)
require.NoError(t, err)
defer gitRepo.Close()
t.Run("Normal", func(t *testing.T) {
called := false
defer mailer.MockMailSettings(func(msgs ...*mailer.Message) {
assert.Len(t, msgs, 2)
if user1.EmailTo() == msgs[0].To {
assert.Equal(t, user11.EmailTo(), msgs[1].To)
} else {
assert.Equal(t, user11.EmailTo(), msgs[0].To)
assert.Equal(t, user1.EmailTo(), msgs[1].To)
}
assert.Equal(t, "v0.1 in user2/repo1 released", msgs[0].Subject)
called = true
})()
require.NoError(t, release_service.CreateRelease(gitRepo, &repo_model.Release{
RepoID: repo.ID,
Repo: repo,
PublisherID: user2.ID,
Publisher: user2,
TagName: "v0.1",
Target: "master",
Title: "v0.1 is released",
Note: "v0.1 is released",
}, "", []*release_service.AttachmentChange{}))
assert.True(t, called)
})
t.Run("Non-active user", func(t *testing.T) {
_, err := db.GetEngine(db.DefaultContext).Exec("UPDATE user SET is_active=false WHERE id=11")
require.NoError(t, err)
t.Cleanup(func() {
_, err := db.GetEngine(db.DefaultContext).Exec("UPDATE user SET is_active=true WHERE id=11")
require.NoError(t, err)
})
called := false
defer mailer.MockMailSettings(func(msgs ...*mailer.Message) {
assert.Len(t, msgs, 1)
assert.Equal(t, user1.EmailTo(), msgs[0].To)
assert.Equal(t, "v0.2 in user2/repo1 released", msgs[0].Subject)
called = true
})()
require.NoError(t, release_service.CreateRelease(gitRepo, &repo_model.Release{
RepoID: repo.ID,
Repo: repo,
PublisherID: user2.ID,
Publisher: user2,
TagName: "v0.2",
Target: "master",
Title: "v0.2 is released",
Note: "v0.2 is released",
}, "", []*release_service.AttachmentChange{}))
assert.True(t, called)
})
t.Run("No permissions for releases", func(t *testing.T) {
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 41})
gitRepo, err := gitrepo.OpenRepository(t.Context(), repo)
require.NoError(t, err)
defer gitRepo.Close()
called := false
defer mailer.MockMailSettings(func(msgs ...*mailer.Message) {
called = true
})()
require.NoError(t, release_service.CreateRelease(gitRepo, &repo_model.Release{
RepoID: repo.ID,
Repo: repo,
PublisherID: user2.ID,
Publisher: user2,
TagName: "v0.2",
Target: "master",
Title: "v0.2 is released",
Note: "v0.2 is released",
}, "", []*release_service.AttachmentChange{}))
assert.False(t, called)
})
}

View file

@ -12,6 +12,7 @@ import (
"forgejo.org/modules/templates"
"forgejo.org/modules/test"
"forgejo.org/modules/translation"
notify_service "forgejo.org/services/notify"
_ "forgejo.org/models/actions"
@ -35,6 +36,7 @@ func MockMailSettings(send func(msgs ...*Message)) func() {
mailService := setting.Mailer{
From: "test@gitea.com",
}
notify_service.RegisterNotifier(NewNotifier())
cleanups := []func(){
test.MockVariableValue(&setting.MailService, &mailService),
test.MockVariableValue(&setting.Domain, "localhost"),