github.com/xgoffin/jenkins-library@v1.154.0/cmd/getDefaults_test.go (about) 1 package cmd 2 3 import ( 4 "io" 5 "io/ioutil" 6 "strings" 7 "testing" 8 9 "github.com/spf13/cobra" 10 flag "github.com/spf13/pflag" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func defaultsOpenFileMock(name string, tokens map[string]string) (io.ReadCloser, error) { 15 var r string 16 switch name { 17 case "TestAddCustomDefaults_default1": 18 r = "default1" 19 case "TestAddCustomDefaults_default2": 20 r = "default3" 21 default: 22 r = "" 23 } 24 return ioutil.NopCloser(strings.NewReader(r)), nil 25 } 26 27 func TestDefaultsCommand(t *testing.T) { 28 cmd := DefaultsCommand() 29 30 gotReq := []string{} 31 gotOpt := []string{} 32 33 cmd.Flags().VisitAll(func(pflag *flag.Flag) { 34 annotations, found := pflag.Annotations[cobra.BashCompOneRequiredFlag] 35 if found && annotations[0] == "true" { 36 gotReq = append(gotReq, pflag.Name) 37 } else { 38 gotOpt = append(gotOpt, pflag.Name) 39 } 40 }) 41 42 t.Run("Required flags", func(t *testing.T) { 43 exp := []string{"defaultsFile"} 44 assert.Equal(t, exp, gotReq, "required flags incorrect") 45 }) 46 47 t.Run("Optional flags", func(t *testing.T) { 48 exp := []string{"output", "outputFile"} 49 assert.Equal(t, exp, gotOpt, "optional flags incorrect") 50 }) 51 52 t.Run("Run", func(t *testing.T) { 53 t.Run("Success case", func(t *testing.T) { 54 defaultsOptions.openFile = defaultsOpenFileMock 55 defaultsOptions.defaultsFiles = []string{"test", "test"} 56 cmd.Run(cmd, []string{}) 57 }) 58 }) 59 } 60 61 func TestGenerateDefaults(t *testing.T) { 62 testParams := []struct { 63 name string 64 defaultsFiles []string 65 expected string 66 }{ 67 { 68 name: "Single defaults file", 69 defaultsFiles: []string{"test"}, 70 expected: `{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test"}`, 71 }, 72 { 73 name: "Multiple defaults files", 74 defaultsFiles: []string{"test1", "test2"}, 75 expected: `[{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test1"},` + 76 `{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test2"}]`, 77 }, 78 } 79 80 utils := newGetDefaultsUtilsUtils() 81 defaultsOptions.openFile = defaultsOpenFileMock 82 83 for _, test := range testParams { 84 t.Run(test.name, func(t *testing.T) { 85 defaultsOptions.defaultsFiles = test.defaultsFiles 86 result, _ := generateDefaults(utils) 87 assert.Equal(t, test.expected, string(result)) 88 }) 89 } 90 }