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&region=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&region=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&region=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&region=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  }