setting_handler_email_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //go:build unit
  2. package admin
  3. import (
  4. "bytes"
  5. "net/http"
  6. "net/http/httptest"
  7. "testing"
  8. "github.com/Wei-Shaw/sub2api/internal/service"
  9. "github.com/gin-gonic/gin"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func bindSMTPRequest[T any](t *testing.T, body string) T {
  13. t.Helper()
  14. req := httptest.NewRequest(http.MethodPost, "/", bytes.NewBufferString(body))
  15. req.Header.Set("Content-Type", "application/json")
  16. c, _ := gin.CreateTestContext(httptest.NewRecorder())
  17. c.Request = req
  18. var payload T
  19. require.NoError(t, c.ShouldBindJSON(&payload))
  20. return payload
  21. }
  22. func TestTestSMTPRequestUseTLSOmissionFallsBackToSavedSetting(t *testing.T) {
  23. req := bindSMTPRequest[TestSMTPRequest](t, `{}`)
  24. require.Nil(t, req.SMTPUseTLS)
  25. require.True(t, resolveSMTPUseTLS(req.SMTPUseTLS, &service.SMTPConfig{UseTLS: true}))
  26. }
  27. func TestTestSMTPRequestExplicitFalseOverridesSavedUseTLS(t *testing.T) {
  28. req := bindSMTPRequest[TestSMTPRequest](t, `{"smtp_use_tls":false}`)
  29. require.NotNil(t, req.SMTPUseTLS)
  30. require.False(t, resolveSMTPUseTLS(req.SMTPUseTLS, &service.SMTPConfig{UseTLS: true}))
  31. }
  32. func TestTestSMTPRequestExplicitTrueOverridesMissingSavedUseTLS(t *testing.T) {
  33. req := bindSMTPRequest[TestSMTPRequest](t, `{"smtp_use_tls":true}`)
  34. require.NotNil(t, req.SMTPUseTLS)
  35. require.True(t, resolveSMTPUseTLS(req.SMTPUseTLS, nil))
  36. }
  37. func TestSendTestEmailRequestPreservesUseTLSOmissionSemantics(t *testing.T) {
  38. omitted := bindSMTPRequest[SendTestEmailRequest](t, `{"email":"admin@example.com"}`)
  39. explicitFalse := bindSMTPRequest[SendTestEmailRequest](t, `{"email":"admin@example.com","smtp_use_tls":false}`)
  40. saved := &service.SMTPConfig{UseTLS: true}
  41. require.True(t, resolveSMTPUseTLS(omitted.SMTPUseTLS, saved))
  42. require.False(t, resolveSMTPUseTLS(explicitFalse.SMTPUseTLS, saved))
  43. }