50 lines
949 B
Go
50 lines
949 B
Go
package mailx_test
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"sync"
|
||
|
|
|
||
|
|
mailx "code.yun.ink/pkg/mailx"
|
||
|
|
)
|
||
|
|
|
||
|
|
// mockSender 记录收到的消息与注入的 logger,用于测试 Manager,不产生真实网络请求
|
||
|
|
type mockSender struct {
|
||
|
|
name string
|
||
|
|
err error // 非 nil 时 Send 返回该错误
|
||
|
|
|
||
|
|
mu sync.Mutex
|
||
|
|
msgs []*mailx.Message
|
||
|
|
logger mailx.Logger
|
||
|
|
}
|
||
|
|
|
||
|
|
func newMockSender(name string) *mockSender {
|
||
|
|
return &mockSender{name: name}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *mockSender) Name() string { return m.name }
|
||
|
|
|
||
|
|
func (m *mockSender) Send(ctx context.Context, msg *mailx.Message) error {
|
||
|
|
m.mu.Lock()
|
||
|
|
defer m.mu.Unlock()
|
||
|
|
m.logger = mailx.LoggerFromContext(ctx)
|
||
|
|
if m.err != nil {
|
||
|
|
return m.err
|
||
|
|
}
|
||
|
|
m.msgs = append(m.msgs, msg)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *mockSender) count() int {
|
||
|
|
m.mu.Lock()
|
||
|
|
defer m.mu.Unlock()
|
||
|
|
return len(m.msgs)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *mockSender) lastLogger() mailx.Logger {
|
||
|
|
m.mu.Lock()
|
||
|
|
defer m.mu.Unlock()
|
||
|
|
return m.logger
|
||
|
|
}
|
||
|
|
|
||
|
|
var _ mailx.Sender = (*mockSender)(nil)
|