github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/mattermost/mattermost_test.go (about) 1 package mattermost 2 3 import ( 4 "encoding/json" 5 "io" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/goreleaser/goreleaser/internal/testctx" 13 "github.com/goreleaser/goreleaser/internal/testlib" 14 "github.com/goreleaser/goreleaser/pkg/config" 15 ) 16 17 func TestStringer(t *testing.T) { 18 require.Equal(t, "mattermost", Pipe{}.String()) 19 } 20 21 func TestDefault(t *testing.T) { 22 ctx := testctx.New() 23 require.NoError(t, Pipe{}.Default(ctx)) 24 require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Mattermost.MessageTemplate) 25 } 26 27 func TestAnnounceInvalidTemplate(t *testing.T) { 28 ctx := testctx.NewWithCfg(config.Project{ 29 Announce: config.Announce{ 30 Mattermost: config.Mattermost{ 31 MessageTemplate: "{{ .Foo }", 32 }, 33 }, 34 }) 35 testlib.RequireTemplateError(t, Pipe{}.Announce(ctx)) 36 } 37 38 func TestAnnounceMissingEnv(t *testing.T) { 39 ctx := testctx.NewWithCfg(config.Project{ 40 Announce: config.Announce{ 41 Mattermost: config.Mattermost{}, 42 }, 43 }) 44 require.NoError(t, Pipe{}.Default(ctx)) 45 require.EqualError(t, Pipe{}.Announce(ctx), `mattermost: env: environment variable "MATTERMOST_WEBHOOK" should not be empty`) 46 } 47 48 func TestSkip(t *testing.T) { 49 t.Run("skip", func(t *testing.T) { 50 require.True(t, Pipe{}.Skip(testctx.New())) 51 }) 52 53 t.Run("dont skip", func(t *testing.T) { 54 ctx := testctx.NewWithCfg(config.Project{ 55 Announce: config.Announce{ 56 Mattermost: config.Mattermost{ 57 Enabled: true, 58 }, 59 }, 60 }) 61 require.False(t, Pipe{}.Skip(ctx)) 62 }) 63 } 64 65 func TestPostWebhook(t *testing.T) { 66 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 67 rc := &incomingWebhookRequest{} 68 69 body, _ := io.ReadAll(r.Body) 70 err := json.Unmarshal(body, rc) 71 require.NoError(t, err) 72 require.Equal(t, defaultColor, rc.Attachments[0].Color) 73 require.Equal(t, "Honk v1.0.0 is out!", rc.Attachments[0].Title) 74 require.Equal(t, "Honk v1.0.0 is out! Check it out at https://github.com/honk/honk/releases/tag/v1.0.0", rc.Attachments[0].Text) 75 76 w.WriteHeader(200) 77 _, err = w.Write([]byte{}) 78 require.NoError(t, err) 79 })) 80 defer ts.Close() 81 82 ctx := testctx.NewWithCfg(config.Project{ 83 ProjectName: "Honk", 84 Announce: config.Announce{ 85 Mattermost: config.Mattermost{ 86 Enabled: true, 87 }, 88 }, 89 }) 90 91 ctx.Git.CurrentTag = "v1.0.0" 92 ctx.ReleaseURL = "https://github.com/honk/honk/releases/tag/v1.0.0" 93 ctx.Git.URL = "https://github.com/honk/honk" 94 95 t.Setenv("MATTERMOST_WEBHOOK", ts.URL) 96 97 require.NoError(t, Pipe{}.Default(ctx)) 98 require.NoError(t, Pipe{}.Announce(ctx)) 99 }