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  }