mirror of https://github.com/usememos/memos.git
122 lines
2.3 KiB
Go
122 lines
2.3 KiB
Go
package email
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNewClient(t *testing.T) {
|
|
config := &Config{
|
|
SMTPHost: "smtp.example.com",
|
|
SMTPPort: 587,
|
|
SMTPUsername: "user@example.com",
|
|
SMTPPassword: "password",
|
|
FromEmail: "noreply@example.com",
|
|
FromName: "Test App",
|
|
UseTLS: true,
|
|
}
|
|
|
|
client := NewClient(config)
|
|
|
|
assert.NotNil(t, client)
|
|
assert.Equal(t, config, client.config)
|
|
}
|
|
|
|
func TestClientValidateConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config *Config
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid config",
|
|
config: &Config{
|
|
SMTPHost: "smtp.example.com",
|
|
SMTPPort: 587,
|
|
FromEmail: "test@example.com",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "nil config",
|
|
config: nil,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid config",
|
|
config: &Config{
|
|
SMTPHost: "",
|
|
SMTPPort: 587,
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
client := NewClient(tt.config)
|
|
err := client.validateConfig()
|
|
if tt.wantErr {
|
|
assert.Error(t, err)
|
|
} else {
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestClientSendValidation(t *testing.T) {
|
|
config := &Config{
|
|
SMTPHost: "smtp.example.com",
|
|
SMTPPort: 587,
|
|
FromEmail: "test@example.com",
|
|
}
|
|
client := NewClient(config)
|
|
|
|
tests := []struct {
|
|
name string
|
|
message *Message
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid message",
|
|
message: &Message{
|
|
To: []string{"recipient@example.com"},
|
|
Subject: "Test",
|
|
Body: "Test body",
|
|
},
|
|
wantErr: false, // Will fail on actual send, but passes validation
|
|
},
|
|
{
|
|
name: "nil message",
|
|
message: nil,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid message",
|
|
message: &Message{
|
|
To: []string{},
|
|
Subject: "Test",
|
|
Body: "Test",
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := client.Send(tt.message)
|
|
// We expect validation errors for invalid messages
|
|
// For valid messages, we'll get connection errors (which is expected in tests)
|
|
if tt.wantErr {
|
|
assert.Error(t, err)
|
|
// Should fail validation before attempting connection
|
|
assert.NotContains(t, err.Error(), "dial")
|
|
}
|
|
// Note: We don't assert NoError for valid messages because
|
|
// we don't have a real SMTP server in tests
|
|
})
|
|
}
|
|
}
|