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.
91 lines
1.8 KiB
Go
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
|
|
}
|