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  }