github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/frontend/default-frontend_test.go (about)

     1  package frontend
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/criteo/command-launcher/internal/command"
     8  	"github.com/spf13/cobra"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func Test_FormatExamples(t *testing.T) {
    13  	exampleText := formatExamples(nil)
    14  	assert.Equal(t, "", exampleText)
    15  
    16  	exampleText = formatExamples([]command.ExampleEntry{})
    17  	assert.Equal(t, "", exampleText)
    18  
    19  	exampleText = formatExamples([]command.ExampleEntry{
    20  		{
    21  			Scenario: "scenario 1",
    22  			Command:  "test -O opt arg1 arg2",
    23  		},
    24  	})
    25  	assert.Equal(t,
    26  		`  # scenario 1
    27    test -O opt arg1 arg2
    28  `, exampleText)
    29  }
    30  
    31  func Test_ParseFlagDefinition(t *testing.T) {
    32  	name, short, desc, flagType, defaultValue := parseFlagDefinition("test\t An test flag definition without short form")
    33  	assert.Equal(t, "test", name)
    34  	assert.Equal(t, "", short)
    35  	assert.Equal(t, "An test flag definition without short form", desc)
    36  	assert.Equal(t, "string", flagType)
    37  	assert.Equal(t, "", defaultValue)
    38  
    39  	name, short, desc, flagType, defaultValue = parseFlagDefinition("test\t t \tAn test flag definition with short form")
    40  	assert.Equal(t, "test", name)
    41  	assert.Equal(t, "t", short)
    42  	assert.Equal(t, "An test flag definition with short form", desc)
    43  	assert.Equal(t, "string", flagType)
    44  	assert.Equal(t, "", defaultValue)
    45  
    46  	name, short, desc, flagType, defaultValue = parseFlagDefinition("test\t t \tAn test flag definition with short form\t string\t ok")
    47  	assert.Equal(t, "test", name)
    48  	assert.Equal(t, "t", short)
    49  	assert.Equal(t, "An test flag definition with short form", desc)
    50  	assert.Equal(t, "string", flagType)
    51  	assert.Equal(t, "ok", defaultValue)
    52  
    53  	name, short, desc, flagType, defaultValue = parseFlagDefinition("test")
    54  	assert.Equal(t, "test", name)
    55  	assert.Equal(t, "", short)
    56  	assert.Equal(t, "", desc)
    57  	assert.Equal(t, "string", flagType)
    58  	assert.Equal(t, "", defaultValue)
    59  
    60  	name, short, desc, flagType, defaultValue = parseFlagDefinition("test\t t\tA test flag description\tbool")
    61  	assert.Equal(t, "test", name)
    62  	assert.Equal(t, "t", short)
    63  	assert.Equal(t, "A test flag description", desc)
    64  	assert.Equal(t, "bool", flagType)
    65  
    66  }
    67  
    68  func Test_ParseCmdArgToEnv(t *testing.T) {
    69  	cmd := &cobra.Command{
    70  		DisableFlagParsing: true,
    71  		Use:                "cmd",
    72  		Short:              "short",
    73  		Long:               "long",
    74  		Run: func(c *cobra.Command, args []string) {
    75  		},
    76  	}
    77  	cmd.Flags().StringP("flag1", "a", "", "description")
    78  	cmd.Flags().StringP("flag2", "b", "", "description")
    79  	cmd.Flags().BoolP("flag3", "c", false, "description")
    80  	cmd.Flags().BoolP("flag-with-dash", "d", false, "description")
    81  
    82  	envList, envTable, originalArgs, err := parseCmdArgsToEnv(cmd, []string{"--flag1", "v1", "-b", "v2", "-c", "--flag-with-dash", "arg1", "arg2"}, "CDT")
    83  	assert.Nil(t, err)
    84  
    85  	assert.True(t, findEnv(envList, "CDT_FLAG_FLAG1", "v1"))
    86  	assert.True(t, findEnv(envList, "CDT_FLAG_FLAG2", "v2"))
    87  	assert.True(t, findEnv(envList, "CDT_FLAG_FLAG3", "true"))
    88  	assert.True(t, findEnv(envList, "CDT_FLAG_FLAG_WITH_DASH", "true"))
    89  
    90  	assert.True(t, findEnv(envList, "CDT_ARG_1", "arg1"))
    91  	assert.True(t, findEnv(envList, "CDT_ARG_2", "arg2"))
    92  
    93  	assert.Equal(t, envTable["CDT_FLAG_FLAG1"], "v1")
    94  	assert.Equal(t, envTable["CDT_FLAG_FLAG2"], "v2")
    95  	assert.Equal(t, envTable["CDT_FLAG_FLAG3"], "true")
    96  	assert.Equal(t, envTable["CDT_FLAG_FLAG_WITH_DASH"], "true")
    97  
    98  	assert.Equal(t, envTable["CDT_ARG_1"], "arg1")
    99  	assert.Equal(t, envTable["CDT_ARG_2"], "arg2")
   100  
   101  	fmt.Println(originalArgs)
   102  	assert.Equal(t, len(originalArgs), 8)
   103  }
   104  
   105  func findEnv(envTable []string, key string, value string) bool {
   106  	for _, v := range envTable {
   107  		if v == fmt.Sprintf("%s=%s", key, value) {
   108  			return true
   109  		}
   110  	}
   111  	return false
   112  }