github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/publish/publish_test.go (about) 1 package publish 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/goreleaser/goreleaser/internal/pipe" 8 "github.com/goreleaser/goreleaser/internal/skips" 9 "github.com/goreleaser/goreleaser/internal/testctx" 10 "github.com/goreleaser/goreleaser/pkg/config" 11 "github.com/goreleaser/goreleaser/pkg/context" 12 "github.com/hashicorp/go-multierror" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestDescription(t *testing.T) { 17 require.NotEmpty(t, Pipe{}.String()) 18 } 19 20 func TestPublish(t *testing.T) { 21 ctx := testctx.NewWithCfg(config.Project{ 22 Release: config.Release{Disable: "true"}, 23 }, testctx.GitHubTokenType) 24 require.NoError(t, New().Run(ctx)) 25 } 26 27 func TestPublishSuccess(t *testing.T) { 28 ctx := testctx.New() 29 lastStep := &testPublisher{} 30 err := Pipe{ 31 pipeline: []Publisher{ 32 &testPublisher{}, 33 &testPublisher{shouldSkip: true}, 34 &testPublisher{ 35 shouldErr: true, 36 continuable: true, 37 }, 38 &testPublisher{shouldSkip: true}, 39 &testPublisher{}, 40 &testPublisher{shouldSkip: true}, 41 lastStep, 42 }, 43 }.Run(ctx) 44 require.Error(t, err) 45 merr := &multierror.Error{} 46 require.ErrorAs(t, err, &merr) 47 require.Equal(t, 1, merr.Len()) 48 require.True(t, lastStep.ran) 49 } 50 51 func TestPublishError(t *testing.T) { 52 ctx := testctx.New() 53 lastStep := &testPublisher{} 54 err := Pipe{ 55 pipeline: []Publisher{ 56 &testPublisher{}, 57 &testPublisher{shouldSkip: true}, 58 &testPublisher{ 59 shouldErr: true, 60 continuable: true, 61 }, 62 &testPublisher{}, 63 &testPublisher{shouldSkip: true}, 64 &testPublisher{}, 65 &testPublisher{shouldErr: true}, 66 lastStep, 67 }, 68 }.Run(ctx) 69 require.Error(t, err) 70 require.EqualError(t, err, "test: failed to publish artifacts: errored") 71 require.False(t, lastStep.ran) 72 } 73 74 func TestSkip(t *testing.T) { 75 t.Run("skip", func(t *testing.T) { 76 ctx := testctx.New(testctx.Skip(skips.Publish)) 77 require.True(t, Pipe{}.Skip(ctx)) 78 }) 79 80 t.Run("dont skip", func(t *testing.T) { 81 require.False(t, Pipe{}.Skip(testctx.New())) 82 }) 83 } 84 85 type testPublisher struct { 86 shouldErr bool 87 shouldSkip bool 88 continuable bool 89 ran bool 90 } 91 92 func (t *testPublisher) ContinueOnError() bool { return t.continuable } 93 func (t *testPublisher) String() string { return "test" } 94 func (t *testPublisher) Publish(_ *context.Context) error { 95 if t.shouldSkip { 96 return pipe.Skip("skipped") 97 } 98 if t.shouldErr { 99 return fmt.Errorf("errored") 100 } 101 t.ran = true 102 return nil 103 }