diff --git a/internal/pipe/webhook/webhook.go b/internal/pipe/webhook/webhook.go index 7d98c0578..cda0766cb 100644 --- a/internal/pipe/webhook/webhook.go +++ b/internal/pipe/webhook/webhook.go @@ -46,6 +46,9 @@ func (p Pipe) Default(ctx *context.Context) error { if ctx.Config.Announce.Webhook.ContentType == "" { ctx.Config.Announce.Webhook.ContentType = DefaultContentType } + if len(ctx.Config.Announce.Webhook.ExpectedStatusCodes) == 0 { + ctx.Config.Announce.Webhook.ExpectedStatusCodes = defaultExepctedStatusCodes + } return nil } @@ -76,11 +79,6 @@ func (p Pipe) Announce(ctx *context.Context) error { return fmt.Errorf("webhook: %w", err) } - expectedStatusCodes := ctx.Config.Announce.Webhook.ExpectedStatusCodes - if len(expectedStatusCodes) == 0 { - expectedStatusCodes = defaultExepctedStatusCodes - } - log.Infof("posting: '%s'", msg) customTransport := http.DefaultTransport.(*http.Transport).Clone() @@ -117,7 +115,7 @@ func (p Pipe) Announce(ctx *context.Context) error { } defer resp.Body.Close() - if !slices.Contains(expectedStatusCodes, resp.StatusCode) { + if !slices.Contains(ctx.Config.Announce.Webhook.ExpectedStatusCodes, resp.StatusCode) { io.Copy(io.Discard, resp.Body) return fmt.Errorf("request failed with status %v", resp.Status) } diff --git a/internal/pipe/webhook/webhook_test.go b/internal/pipe/webhook/webhook_test.go index 18897df2e..45e4e8056 100644 --- a/internal/pipe/webhook/webhook_test.go +++ b/internal/pipe/webhook/webhook_test.go @@ -27,6 +27,7 @@ func TestNoEndpoint(t *testing.T) { Webhook: config.Webhook{}, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.EqualError(t, Pipe{}.Announce(ctx), `webhook: no endpoint url`) } @@ -50,6 +51,7 @@ func TestAnnounceInvalidMessageTemplate(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) testlib.RequireTemplateError(t, Pipe{}.Announce(ctx)) } @@ -87,6 +89,7 @@ func TestAnnounceWebhook(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Announce(ctx)) } @@ -118,6 +121,7 @@ func TestAnnounceTLSWebhook(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Announce(ctx)) } @@ -145,6 +149,7 @@ func TestAnnounceTLSCheckCertWebhook(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.Error(t, Pipe{}.Announce(ctx)) } @@ -182,6 +187,7 @@ func TestAnnounceBasicAuthWebhook(t *testing.T) { }, }) t.Setenv("BASIC_AUTH_HEADER_VALUE", fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte("user:pass")))) + require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Announce(ctx)) } @@ -220,6 +226,7 @@ func TestAnnounceAdditionalHeadersWebhook(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Announce(ctx)) } @@ -253,6 +260,7 @@ func TestAnnounceExepectedStatusCodesWebhook(t *testing.T) { }, }, }) + require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Announce(ctx)) } @@ -272,3 +280,33 @@ func TestSkip(t *testing.T) { require.False(t, Pipe{}.Skip(ctx)) }) } + +func TestDefault(t *testing.T) { + t.Run("empty", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Announce: config.Announce{ + Webhook: config.Webhook{}, + }, + }) + require.NoError(t, Pipe{}.Default(ctx)) + actual := ctx.Config.Announce.Webhook + require.NotEmpty(t, actual.MessageTemplate) + require.NotEmpty(t, actual.ContentType) + require.NotEmpty(t, actual.ExpectedStatusCodes) + }) + t.Run("not empty", func(t *testing.T) { + expected := config.Webhook{ + MessageTemplate: "foo", + ContentType: "text", + ExpectedStatusCodes: []int{200}, + } + ctx := testctx.NewWithCfg(config.Project{ + Announce: config.Announce{ + Webhook: expected, + }, + }) + require.NoError(t, Pipe{}.Default(ctx)) + actual := ctx.Config.Announce.Webhook + require.Equal(t, expected, actual) + }) +}