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 }