91 lines
1.8 KiB
Go
91 lines
1.8 KiB
Go
package email
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/ArtalkJS/Artalk/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
|
|
}
|