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  }