airshipctl/cmd/root_test.go
Ian Howell 51b1e86ad9 Fix flag loading order
Prior to this change, flags associated with the Config object were being
read too early (that is, before cobra had parsed them). They are now
read just in time for command execution.

Change-Id: I0affca9429867eb25db40f8323403e0f6976b47b
2020-01-15 13:04:16 -06:00

95 lines
2.1 KiB
Go

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"
"opendev.org/airship/airshipctl/cmd/bootstrap"
"opendev.org/airship/airshipctl/pkg/environment"
"opendev.org/airship/airshipctl/testutil"
)
func TestRoot(t *testing.T) {
tests := []*testutil.CmdTest{
{
Name: "rootCmd-with-no-defaults",
CmdLine: "",
Cmd: getVanillaRootCmd(t),
},
{
Name: "rootCmd-with-defaults",
CmdLine: "",
Cmd: getDefaultRootCmd(t),
},
{
Name: "specialized-rootCmd-with-bootstrap",
CmdLine: "",
Cmd: getSpecializedRootCmd(t),
},
}
for _, tt := range tests {
testutil.RunTest(t, tt)
}
}
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)
require.NoError(t, err, "Could not create root commands")
return rootCmd
}
func getDefaultRootCmd(t *testing.T) *cobra.Command {
t.Helper()
rootCmd, _, err := cmd.NewAirshipCTLCommand(nil)
require.NoError(t, err, "Could not create root commands")
return rootCmd
}
func getSpecializedRootCmd(t *testing.T) *cobra.Command {
rootCmd := getVanillaRootCmd(t)
rootCmd.AddCommand(bootstrap.NewBootstrapCommand(&environment.AirshipCTLSettings{}))
return rootCmd
}