diff --git a/cmd/root.go b/cmd/root.go index ef846170a..4e0d0f137 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -38,14 +38,15 @@ func NewRootCmd(out io.Writer) (*cobra.Command, *environment.AirshipCTLSettings, SilenceUsage: true, PersistentPreRun: func(cmd *cobra.Command, args []string) { log.Init(settings.Debug, cmd.OutOrStderr()) + + // Load or Initialize airship Config + settings.InitConfig() }, } rootCmd.SetOutput(out) rootCmd.AddCommand(NewVersionCommand()) settings.InitFlags(rootCmd) - // Load or Initialize airship Config - settings.InitConfig() return rootCmd, settings, nil } diff --git a/cmd/root_test.go b/cmd/root_test.go index a87d11583..6f56cdf95 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -1,9 +1,11 @@ package cmd_test import ( + "bytes" "testing" "github.com/spf13/cobra" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "opendev.org/airship/airshipctl/cmd" @@ -36,6 +38,41 @@ func TestRoot(t *testing.T) { } } +func TestFlagLoading(t *testing.T) { + tests := []struct { + name string + args []string + expected string + }{ + { + name: "default, no flags", + args: []string{}, + expected: "$HOME/.airship/config", + }, + { + name: "alternate airshipconfig", + args: []string{"--airshipconf", "/custom/path/to/airshipconfig"}, + expected: "/custom/path/to/airshipconfig", + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(subTest *testing.T) { + // We don't care about the output of this test, so toss + // it into a thowaway &bytes.buffer{} + rootCmd, settings, err := cmd.NewRootCmd(&bytes.Buffer{}) + require.NoError(t, err) + rootCmd.SetArgs(tt.args) + + err = rootCmd.Execute() + require.NoError(t, err) + + assert.Equal(t, settings.AirshipConfigPath(), tt.expected) + }) + } +} + func getVanillaRootCmd(t *testing.T) *cobra.Command { t.Helper() rootCmd, _, err := cmd.NewRootCmd(nil)