Files
sub2api/backend/internal/handler/admin/setting_handler_email_test.go
T
wucm667 c31fe2ed9e fix(admin): preserve saved SMTP TLS mode in test endpoints
保留测试邮件端点已保存的 SMTP TLS 配置,区分省略与显式 false。
2026-08-29 17:28:00 +08:00

59 lines
1.8 KiB
Go

//go:build unit
package admin
import (
"bytes"
"net/http"
"net/http/httptest"
"testing"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/require"
)
func bindSMTPRequest[T any](t *testing.T, body string) T {
t.Helper()
req := httptest.NewRequest(http.MethodPost, "/", bytes.NewBufferString(body))
req.Header.Set("Content-Type", "application/json")
c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request = req
var payload T
require.NoError(t, c.ShouldBindJSON(&payload))
return payload
}
func TestTestSMTPRequestUseTLSOmissionFallsBackToSavedSetting(t *testing.T) {
req := bindSMTPRequest[TestSMTPRequest](t, `{}`)
require.Nil(t, req.SMTPUseTLS)
require.True(t, resolveSMTPUseTLS(req.SMTPUseTLS, &service.SMTPConfig{UseTLS: true}))
}
func TestTestSMTPRequestExplicitFalseOverridesSavedUseTLS(t *testing.T) {
req := bindSMTPRequest[TestSMTPRequest](t, `{"smtp_use_tls":false}`)
require.NotNil(t, req.SMTPUseTLS)
require.False(t, resolveSMTPUseTLS(req.SMTPUseTLS, &service.SMTPConfig{UseTLS: true}))
}
func TestTestSMTPRequestExplicitTrueOverridesMissingSavedUseTLS(t *testing.T) {
req := bindSMTPRequest[TestSMTPRequest](t, `{"smtp_use_tls":true}`)
require.NotNil(t, req.SMTPUseTLS)
require.True(t, resolveSMTPUseTLS(req.SMTPUseTLS, nil))
}
func TestSendTestEmailRequestPreservesUseTLSOmissionSemantics(t *testing.T) {
omitted := bindSMTPRequest[SendTestEmailRequest](t, `{"email":"admin@example.com"}`)
explicitFalse := bindSMTPRequest[SendTestEmailRequest](t, `{"email":"admin@example.com","smtp_use_tls":false}`)
saved := &service.SMTPConfig{UseTLS: true}
require.True(t, resolveSMTPUseTLS(omitted.SMTPUseTLS, saved))
require.False(t, resolveSMTPUseTLS(explicitFalse.SMTPUseTLS, saved))
}