github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/cmd/release_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/goreleaser/goreleaser/pkg/config"
     8  	"github.com/goreleaser/goreleaser/pkg/context"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestRelease(t *testing.T) {
    13  	setup(t)
    14  	cmd := newReleaseCmd()
    15  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2", "--deprecated"})
    16  	require.NoError(t, cmd.cmd.Execute())
    17  }
    18  
    19  func TestReleaseAutoSnapshot(t *testing.T) {
    20  	t.Run("clean", func(t *testing.T) {
    21  		setup(t)
    22  		cmd := newReleaseCmd()
    23  		cmd.cmd.SetArgs([]string{"--auto-snapshot", "--skip-publish"})
    24  		require.NoError(t, cmd.cmd.Execute())
    25  		require.FileExists(t, "dist/fake_0.0.2_checksums.txt", "should not have run with --snapshot")
    26  	})
    27  
    28  	t.Run("dirty", func(t *testing.T) {
    29  		setup(t)
    30  		createFile(t, "foo", "force dirty tree")
    31  		cmd := newReleaseCmd()
    32  		cmd.cmd.SetArgs([]string{"--auto-snapshot", "--skip-publish"})
    33  		require.NoError(t, cmd.cmd.Execute())
    34  		matches, err := filepath.Glob("./dist/fake_0.0.2-SNAPSHOT-*_checksums.txt")
    35  		require.NoError(t, err)
    36  		require.Len(t, matches, 1, "should have implied --snapshot")
    37  	})
    38  }
    39  
    40  func TestReleaseInvalidConfig(t *testing.T) {
    41  	setup(t)
    42  	createFile(t, "goreleaser.yml", "foo: bar")
    43  	cmd := newReleaseCmd()
    44  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2", "--deprecated"})
    45  	require.EqualError(t, cmd.cmd.Execute(), "yaml: unmarshal errors:\n  line 1: field foo not found in type config.Project")
    46  }
    47  
    48  func TestReleaseBrokenProject(t *testing.T) {
    49  	setup(t)
    50  	createFile(t, "main.go", "not a valid go file")
    51  	cmd := newReleaseCmd()
    52  	cmd.cmd.SetArgs([]string{"--snapshot", "--timeout=1m", "--parallelism=2"})
    53  	require.EqualError(t, cmd.cmd.Execute(), "failed to parse dir: .: main.go:1:1: expected 'package', found not")
    54  }
    55  
    56  func TestReleaseFlags(t *testing.T) {
    57  	setup := func(opts releaseOpts) *context.Context {
    58  		return setupReleaseContext(context.New(config.Project{}), opts)
    59  	}
    60  
    61  	t.Run("snapshot", func(t *testing.T) {
    62  		ctx := setup(releaseOpts{
    63  			snapshot: true,
    64  		})
    65  		require.True(t, ctx.Snapshot)
    66  		require.True(t, ctx.SkipPublish)
    67  		require.True(t, ctx.SkipValidate)
    68  		require.True(t, ctx.SkipAnnounce)
    69  	})
    70  
    71  	t.Run("skips", func(t *testing.T) {
    72  		ctx := setup(releaseOpts{
    73  			skipPublish:  true,
    74  			skipSign:     true,
    75  			skipValidate: true,
    76  		})
    77  		require.True(t, ctx.SkipSign)
    78  		require.True(t, ctx.SkipPublish)
    79  		require.True(t, ctx.SkipValidate)
    80  		require.True(t, ctx.SkipAnnounce)
    81  	})
    82  
    83  	t.Run("parallelism", func(t *testing.T) {
    84  		require.Equal(t, 1, setup(releaseOpts{
    85  			parallelism: 1,
    86  		}).Parallelism)
    87  	})
    88  
    89  	t.Run("notes", func(t *testing.T) {
    90  		notes := "foo.md"
    91  		header := "header.md"
    92  		footer := "footer.md"
    93  		ctx := setup(releaseOpts{
    94  			releaseNotesFile:  notes,
    95  			releaseHeaderFile: header,
    96  			releaseFooterFile: footer,
    97  		})
    98  		require.Equal(t, notes, ctx.ReleaseNotesFile)
    99  		require.Equal(t, header, ctx.ReleaseHeaderFile)
   100  		require.Equal(t, footer, ctx.ReleaseFooterFile)
   101  	})
   102  
   103  	t.Run("templated notes", func(t *testing.T) {
   104  		notes := "foo.md"
   105  		header := "header.md"
   106  		footer := "footer.md"
   107  		ctx := setup(releaseOpts{
   108  			releaseNotesTmpl:  notes,
   109  			releaseHeaderTmpl: header,
   110  			releaseFooterTmpl: footer,
   111  		})
   112  		require.Equal(t, notes, ctx.ReleaseNotesTmpl)
   113  		require.Equal(t, header, ctx.ReleaseHeaderTmpl)
   114  		require.Equal(t, footer, ctx.ReleaseFooterTmpl)
   115  	})
   116  
   117  	t.Run("rm dist", func(t *testing.T) {
   118  		require.True(t, setup(releaseOpts{
   119  			rmDist: true,
   120  		}).RmDist)
   121  	})
   122  }