//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)) }