get.porter.sh/porter@v1.3.0/pkg/exec/builder/flags_test.go (about)

     1  package builder
     2  
     3  import (
     4  	"os"
     5  	"sort"
     6  	"testing"
     7  
     8  	yaml "get.porter.sh/porter/pkg/yaml"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  var testStep = TestStep{}
    14  
    15  func TestFlags_UnmarshalYAML(t *testing.T) {
    16  	b, err := os.ReadFile("testdata/flags-input.yaml")
    17  	require.NoError(t, err, "could not read the input file")
    18  
    19  	var flags Flags
    20  	err = yaml.Unmarshal(b, &flags)
    21  	require.NoError(t, err, "could not unmarshal the flags")
    22  
    23  	assert.Contains(t, flags, NewFlag("int", "1"))
    24  	assert.Contains(t, flags, NewFlag("bool", "true"))
    25  	assert.Contains(t, flags, NewFlag("string", "abc"))
    26  	assert.Contains(t, flags, NewFlag("empty"))
    27  	assert.Contains(t, flags, NewFlag("repeated", "FOO=BAR", "STUFF=THINGS"))
    28  }
    29  
    30  func TestFlags_Sort(t *testing.T) {
    31  	flags := Flags{
    32  		NewFlag("b", "1"),
    33  		NewFlag("a", "2"),
    34  		NewFlag("c", "3"),
    35  	}
    36  
    37  	sort.Sort(flags)
    38  
    39  	assert.Equal(t, "a", flags[0].Name)
    40  	assert.Equal(t, "b", flags[1].Name)
    41  	assert.Equal(t, "c", flags[2].Name)
    42  }
    43  
    44  func TestFlag_ToSlice(t *testing.T) {
    45  	t.Run("short flag", func(t *testing.T) {
    46  		f := NewFlag("f", "abc")
    47  		args := f.ToSlice(testStep.GetDashes())
    48  		assert.Equal(t, []string{"-f", "abc"}, args)
    49  	})
    50  
    51  	t.Run("long flag", func(t *testing.T) {
    52  		f := NewFlag("full", "abc")
    53  		args := f.ToSlice(testStep.GetDashes())
    54  		assert.Equal(t, []string{"--full", "abc"}, args)
    55  	})
    56  
    57  	t.Run("valueless flag", func(t *testing.T) {
    58  		f := NewFlag("l")
    59  		args := f.ToSlice(testStep.GetDashes())
    60  		assert.Equal(t, []string{"-l"}, args)
    61  	})
    62  
    63  	dashes := Dashes{
    64  		Long:  "---",
    65  		Short: "-",
    66  	}
    67  	t.Run("flag with non-default dashes", func(t *testing.T) {
    68  		f := NewFlag("full", "abc")
    69  		args := f.ToSlice(dashes)
    70  		assert.Equal(t, []string{"---full", "abc"}, args)
    71  	})
    72  }
    73  
    74  func TestFlags_ToSlice(t *testing.T) {
    75  	flags := Flags{
    76  		NewFlag("bull", "2"),
    77  		NewFlag("a", "1"),
    78  	}
    79  
    80  	args := flags.ToSlice(testStep.GetDashes())
    81  
    82  	// Flags should be sorted and sliced up on a platter
    83  	assert.Equal(t, []string{"-a", "1", "--bull", "2"}, args)
    84  }
    85  
    86  func TestFlags_NonStringKeys(t *testing.T) {
    87  	flags := Flags{}
    88  	err := yaml.Unmarshal([]byte(`
    89  yes: ["y", "true"]
    90  true: ["y", "yes"]
    91  nil: ["no", "nah"]
    92  1.0: ["true", "yes"]
    93  1: ["yes"]
    94  `), &flags)
    95  	assert.NoError(t, err)
    96  	assert.Equal(t, 5, len(flags))
    97  }