Files
artalkjs/internal/email/queue_test.go
qwqcode cf7725edba refactor(go): bump the module version and support go install (#979)
BREAKING CHANGE: The original Go module name was `github.com/ArtalkJS/Artalk`, which has now been modified to `github.com/artalkjs/artalk/v2` (all lowercase). This change may affect the CI pipeline or other areas if you are compiling the Artalk server and have specified the fixed Go module name. Regarding the original `-ldflags -X github.com/ArtalkJS/Artalk/internal/config.Version` and `CommitHash` definitions, please remove them, as they are now obsolete. The `Version` has been hardcoded into the Go code, and the `CommitHash` is now read from the Go build info via runtime/debug’s vcs.revision value. This change only affects the server developers and does not impact the frontend UI client.
2024-09-18 21:43:43 +08:00

91 lines
1.8 KiB
Go

package email
import (
"testing"
"time"
"github.com/artalkjs/artalk/v2/internal/config"
"github.com/stretchr/testify/assert"
)
func TestQueue(t *testing.T) {
testEmail := Email{
FromAddr: "artalkjs@gmail.com",
FromName: "ArtalkJS",
ToAddr: "example@emxaple.com",
Subject: "TestEmail",
Body: "This is a test email",
}
t.Run("Send", func(t *testing.T) {
sendSuccessHookTriggered := false
q := NewQueue(EmailConf{
EmailConf: config.EmailConf{},
Sender: &mockSender{
SendResult: true,
},
OnSendSuccess: func(email *Email) {
assert.Equal(t, testEmail, *email)
sendSuccessHookTriggered = true
},
})
q.Push(&testEmail)
time.Sleep(100 * time.Millisecond)
assert.True(t, sendSuccessHookTriggered, "Send success hook should be triggered")
})
t.Run("Send failed", func(t *testing.T) {
sendSuccessHookTriggered := false
q := NewQueue(EmailConf{
EmailConf: config.EmailConf{},
Sender: &mockSender{
SendResult: false,
},
OnSendSuccess: func(email *Email) {
assert.Equal(t, testEmail, email)
sendSuccessHookTriggered = true
},
})
q.Push(&testEmail)
time.Sleep(100 * time.Millisecond)
assert.False(t, sendSuccessHookTriggered, "Send success hook should not be triggered")
})
t.Run("Close", func(t *testing.T) {
q := NewQueue(EmailConf{
EmailConf: config.EmailConf{},
Sender: &mockSender{
SendResult: true,
},
})
q.Close()
time.Sleep(100 * time.Millisecond)
assert.True(t, q.closed, "Queue should be closed")
})
}
// -------------------------------------------------------------------
// Mock Sender
// -------------------------------------------------------------------
type mockSender struct {
SendResult bool
}
var _ Sender = (*mockSender)(nil)
func (s *mockSender) Send(email *Email) bool {
return s.SendResult
}