github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/smtp/smtp_test.go (about) 1 package smtp 2 3 import ( 4 "strconv" 5 "testing" 6 7 "github.com/goreleaser/goreleaser/internal/testctx" 8 "github.com/goreleaser/goreleaser/pkg/config" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestStringer(t *testing.T) { 13 require.NotEmpty(t, Pipe{}.String()) 14 } 15 16 func TestSkip(t *testing.T) { 17 t.Run("skip", func(t *testing.T) { 18 require.True(t, Pipe{}.Skip(testctx.New())) 19 }) 20 21 t.Run("dont skip", func(t *testing.T) { 22 ctx := testctx.NewWithCfg(config.Project{ 23 Announce: config.Announce{ 24 SMTP: config.SMTP{ 25 Enabled: true, 26 }, 27 }, 28 }) 29 require.False(t, Pipe{}.Skip(ctx)) 30 }) 31 } 32 33 func TestDefault(t *testing.T) { 34 ctx := testctx.NewWithCfg(config.Project{ 35 Announce: config.Announce{ 36 SMTP: config.SMTP{ 37 Enabled: true, 38 }, 39 }, 40 }) 41 require.NoError(t, Pipe{}.Default(ctx)) 42 require.Equal(t, defaultBodyTemplate, ctx.Config.Announce.SMTP.BodyTemplate) 43 require.Equal(t, defaultSubjectTemplate, ctx.Config.Announce.SMTP.SubjectTemplate) 44 } 45 46 func TestGetConfig(t *testing.T) { 47 t.Run("from env", func(t *testing.T) { 48 expect := Config{ 49 Host: "hostname", 50 Port: 123, 51 Username: "user", 52 Password: "secret", 53 } 54 t.Setenv("SMTP_HOST", expect.Host) 55 t.Setenv("SMTP_USERNAME", expect.Username) 56 t.Setenv("SMTP_PASSWORD", expect.Password) 57 t.Setenv("SMTP_PORT", strconv.Itoa(expect.Port)) 58 cfg, err := getConfig(config.SMTP{}) 59 require.NoError(t, err) 60 require.Equal(t, expect, cfg) 61 }) 62 63 t.Run("mixed", func(t *testing.T) { 64 expect := Config{ 65 Host: "hostname", 66 Port: 123, 67 Username: "user", 68 Password: "secret", 69 } 70 t.Setenv("SMTP_HOST", expect.Host) 71 t.Setenv("SMTP_PASSWORD", expect.Password) 72 cfg, err := getConfig(config.SMTP{ 73 Port: expect.Port, 74 Username: expect.Username, 75 }) 76 require.NoError(t, err) 77 require.Equal(t, expect, cfg) 78 }) 79 80 t.Run("from conf", func(t *testing.T) { 81 expect := Config{ 82 Host: "hostname", 83 Port: 123, 84 Username: "user", 85 Password: "secret", 86 } 87 t.Setenv("SMTP_PASSWORD", expect.Password) 88 cfg, err := getConfig(config.SMTP{ 89 Host: expect.Host, 90 Port: expect.Port, 91 Username: expect.Username, 92 }) 93 require.NoError(t, err) 94 require.Equal(t, expect, cfg) 95 }) 96 97 t.Run("no port", func(t *testing.T) { 98 t.Setenv("SMTP_HOST", "host") 99 t.Setenv("SMTP_PASSWORD", "pwd") 100 _, err := getConfig(config.SMTP{ 101 Username: "user", 102 }) 103 require.ErrorIs(t, err, errNoPort) 104 }) 105 106 t.Run("no username", func(t *testing.T) { 107 t.Setenv("SMTP_HOST", "host") 108 t.Setenv("SMTP_PASSWORD", "pwd") 109 _, err := getConfig(config.SMTP{ 110 Port: 10, 111 }) 112 require.ErrorIs(t, err, errNoUsername) 113 }) 114 115 t.Run("no host", func(t *testing.T) { 116 t.Setenv("SMTP_PASSWORD", "pwd") 117 _, err := getConfig(config.SMTP{ 118 Port: 10, 119 Username: "user", 120 }) 121 require.ErrorIs(t, err, errNoHost) 122 }) 123 124 t.Run("no password", func(t *testing.T) { 125 _, err := getConfig(config.SMTP{ 126 Port: 10, 127 Username: "user", 128 Host: "host", 129 }) 130 require.EqualError(t, err, "SMTP: env: environment variable \"SMTP_PASSWORD\" should not be empty") 131 }) 132 }