github.com/goreleaser/goreleaser@v1.25.1/cmd/root_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	goversion "github.com/caarlos0/go-version"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  var testversion = goversion.Info{
    12  	GitVersion: "1.2.3",
    13  }
    14  
    15  func TestRootCmd(t *testing.T) {
    16  	mem := &exitMemento{}
    17  	Execute(testversion, mem.Exit, []string{"-h"})
    18  	require.Equal(t, 0, mem.code)
    19  }
    20  
    21  func TestRootCmdHelp(t *testing.T) {
    22  	mem := &exitMemento{}
    23  	cmd := newRootCmd(testversion, mem.Exit).cmd
    24  	cmd.SetArgs([]string{"-h"})
    25  	require.NoError(t, cmd.Execute())
    26  	require.Equal(t, 0, mem.code)
    27  }
    28  
    29  func TestRootCmdVersion(t *testing.T) {
    30  	var b bytes.Buffer
    31  	mem := &exitMemento{}
    32  	cmd := newRootCmd(testversion, mem.Exit).cmd
    33  	cmd.SetOut(&b)
    34  	cmd.SetArgs([]string{"-v"})
    35  	require.NoError(t, cmd.Execute())
    36  	require.Contains(t, b.String(), "1.2.3")
    37  	require.Equal(t, 0, mem.code)
    38  }
    39  
    40  func TestRootCmdExitCode(t *testing.T) {
    41  	mem := &exitMemento{}
    42  	cmd := newRootCmd(testversion, mem.Exit)
    43  	args := []string{"check", "--deprecated", "-f", "testdata/good.yml"}
    44  	cmd.Execute(args)
    45  	require.Equal(t, 2, mem.code)
    46  }
    47  
    48  func TestRootRelease(t *testing.T) {
    49  	setup(t)
    50  	mem := &exitMemento{}
    51  	cmd := newRootCmd(testversion, mem.Exit)
    52  	cmd.Execute([]string{})
    53  	require.Equal(t, 1, mem.code)
    54  }
    55  
    56  func TestRootReleaseDebug(t *testing.T) {
    57  	setup(t)
    58  	mem := &exitMemento{}
    59  	cmd := newRootCmd(testversion, mem.Exit)
    60  	cmd.Execute([]string{"r", "--debug"})
    61  	require.Equal(t, 1, mem.code)
    62  }
    63  
    64  func TestShouldPrependRelease(t *testing.T) {
    65  	result := func(args []string) bool {
    66  		return shouldPrependRelease(newRootCmd(testversion, func(_ int) {}).cmd, args)
    67  	}
    68  
    69  	t.Run("no args", func(t *testing.T) {
    70  		require.True(t, result([]string{}))
    71  	})
    72  
    73  	t.Run("release args", func(t *testing.T) {
    74  		require.True(t, result([]string{"--skip-validate"}))
    75  	})
    76  
    77  	t.Run("several release args", func(t *testing.T) {
    78  		require.True(t, result([]string{"--skip-validate", "--snapshot"}))
    79  	})
    80  
    81  	for _, s := range []string{"--help", "-h", "-v", "--version"} {
    82  		t.Run(s, func(t *testing.T) {
    83  			require.False(t, result([]string{s}))
    84  		})
    85  	}
    86  
    87  	t.Run("check", func(t *testing.T) {
    88  		require.False(t, result([]string{"check", "-f", "testdata/good.yml"}))
    89  	})
    90  
    91  	t.Run("help", func(t *testing.T) {
    92  		require.False(t, result([]string{"help"}))
    93  	})
    94  
    95  	t.Run("__complete", func(t *testing.T) {
    96  		require.False(t, result([]string{"__complete"}))
    97  	})
    98  
    99  	t.Run("__completeNoDesc", func(t *testing.T) {
   100  		require.False(t, result([]string{"__completeNoDesc"}))
   101  	})
   102  }