github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/command/ui_test.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/mitchellh/cli" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestCommand_Ui(t *testing.T) { 13 14 type testCaseSetupFn func(*testing.T) 15 16 cases := []struct { 17 Name string 18 SetupFn testCaseSetupFn 19 Args []string 20 ExpectedURL string 21 }{ 22 { 23 Name: "default values", 24 ExpectedURL: "http://127.0.0.1:4646", 25 }, 26 { 27 Name: "set namespace via flag", 28 Args: []string{"-namespace=dev"}, 29 ExpectedURL: "http://127.0.0.1:4646?namespace=dev", 30 }, 31 { 32 Name: "set region via flag", 33 Args: []string{"-region=earth"}, 34 ExpectedURL: "http://127.0.0.1:4646?region=earth", 35 }, 36 { 37 Name: "set region and namespace via flag", 38 Args: []string{"-region=earth", "-namespace=dev"}, 39 ExpectedURL: "http://127.0.0.1:4646?namespace=dev®ion=earth", 40 }, 41 { 42 Name: "set namespace via env var", 43 SetupFn: func(t *testing.T) { 44 t.Setenv("NOMAD_NAMESPACE", "dev") 45 }, 46 ExpectedURL: "http://127.0.0.1:4646?namespace=dev", 47 }, 48 { 49 Name: "set region via env var", 50 SetupFn: func(t *testing.T) { 51 t.Setenv("NOMAD_REGION", "earth") 52 }, 53 ExpectedURL: "http://127.0.0.1:4646?region=earth", 54 }, 55 { 56 Name: "set region and namespace via env var", 57 SetupFn: func(t *testing.T) { 58 t.Setenv("NOMAD_REGION", "earth") 59 t.Setenv("NOMAD_NAMESPACE", "dev") 60 }, 61 ExpectedURL: "http://127.0.0.1:4646?namespace=dev®ion=earth", 62 }, 63 { 64 Name: "set region and namespace via env var", 65 SetupFn: func(t *testing.T) { 66 t.Setenv("NOMAD_REGION", "earth") 67 t.Setenv("NOMAD_NAMESPACE", "dev") 68 }, 69 ExpectedURL: "http://127.0.0.1:4646?namespace=dev®ion=earth", 70 }, 71 { 72 Name: "flags have higher precedence", 73 SetupFn: func(t *testing.T) { 74 t.Setenv("NOMAD_REGION", "earth") 75 t.Setenv("NOMAD_NAMESPACE", "dev") 76 }, 77 Args: []string{ 78 "-region=mars", 79 "-namespace=prod", 80 }, 81 ExpectedURL: "http://127.0.0.1:4646?namespace=prod®ion=mars", 82 }, 83 } 84 85 for _, tc := range cases { 86 t.Run(tc.Name, func(t *testing.T) { 87 // Make sure environment variables are clean. 88 t.Setenv("NOMAD_NAMESPACE", "") 89 t.Setenv("NOMAD_REGION", "") 90 91 // Setup fake CLI UI and test case 92 ui := cli.NewMockUi() 93 cmd := &UiCommand{Meta: Meta{Ui: ui}} 94 95 if tc.SetupFn != nil { 96 tc.SetupFn(t) 97 } 98 99 // Don't try to open a browser. 100 args := append(tc.Args, "-show-url") 101 102 if code := cmd.Run(args); code != 0 { 103 require.Equal(t, 0, code, "expected exit code 0, got %d", code) 104 } 105 106 got := ui.OutputWriter.String() 107 expected := fmt.Sprintf("URL for web UI: %s", tc.ExpectedURL) 108 require.Equal(t, expected, strings.TrimSpace(got)) 109 }) 110 } 111 }