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  }