Files
cms-server/internal/email/email_test.go
Asai Neko 210b8b08ce
All checks were successful
Server Check Build (NixCN CMS) TeamCity build finished
Add test for all components
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-03-26 18:19:26 +08:00

95 lines
2.6 KiB
Go

package email
import (
"testing"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func setupEmailViper(host, user, pass, security string, port int) {
viper.Reset()
viper.Set("email.host", host)
viper.Set("email.port", port)
viper.Set("email.username", user)
viper.Set("email.password", pass)
viper.Set("email.security", security)
viper.Set("email.insecure_skip_verify", false)
}
func TestNewSMTPClientMissingHost(t *testing.T) {
viper.Reset()
defer viper.Reset()
_, err := new(Client).NewSMTPClient()
require.Error(t, err)
assert.Contains(t, err.Error(), "SMTP config not set")
}
func TestNewSMTPClientMissingPassword(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "", "plain", 587)
defer viper.Reset()
_, err := new(Client).NewSMTPClient()
require.Error(t, err)
assert.Contains(t, err.Error(), "SMTP basic auth requires email.password")
}
func TestNewSMTPClientUnknownSecurity(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "pass", "tls13", 587)
defer viper.Reset()
_, err := new(Client).NewSMTPClient()
require.Error(t, err)
assert.Contains(t, err.Error(), "unknown smtp security mode")
}
func TestNewSMTPClientSSL(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "pass", "ssl", 465)
defer viper.Reset()
c, err := new(Client).NewSMTPClient()
require.NoError(t, err)
assert.Equal(t, "ssl", c.security)
assert.True(t, c.dialer.SSL)
}
func TestNewSMTPClientStartTLS(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "pass", "starttls", 587)
defer viper.Reset()
c, err := new(Client).NewSMTPClient()
require.NoError(t, err)
assert.Equal(t, "starttls", c.security)
assert.False(t, c.dialer.SSL)
assert.NotNil(t, c.dialer.TLSConfig)
}
func TestNewSMTPClientPlain(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "pass", "plain", 25)
defer viper.Reset()
c, err := new(Client).NewSMTPClient()
require.NoError(t, err)
assert.Equal(t, "plain", c.security)
assert.False(t, c.dialer.SSL)
assert.Nil(t, c.dialer.TLSConfig)
}
func TestNewSMTPClientEmptySecurity(t *testing.T) {
setupEmailViper("smtp.example.com", "user@example.com", "pass", "", 25)
defer viper.Reset()
c, err := new(Client).NewSMTPClient()
require.NoError(t, err)
assert.Nil(t, c.dialer.TLSConfig)
}
func TestSendUninitializedDialer(t *testing.T) {
c := &Client{}
_, err := c.Send("from@test.com", "to@test.com", "subject", "<p>html</p>")
require.Error(t, err)
assert.Contains(t, err.Error(), "SMTP dialer not initialized")
}