mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-05-13 06:20:24 +00:00
chore: add unit test
This commit is contained in:
parent
feabaab4bd
commit
db4b2f9802
3 changed files with 129 additions and 0 deletions
5
services/mailer/fixtures/TestMailNewRelease/watch.yml
Normal file
5
services/mailer/fixtures/TestMailNewRelease/watch.yml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
-
|
||||
id: 1001
|
||||
user_id: 11
|
||||
repo_id: 41
|
||||
mode: 1
|
||||
122
services/mailer/mail_release_test.go
Normal file
122
services/mailer/mail_release_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
|
|
@ -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"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue