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 }