mirror of
https://github.com/grdl/git-get.git
synced 2026-02-04 17:24:49 +00:00
118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
package cfg
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var (
|
|
envVarName = strings.ToUpper(fmt.Sprintf("%s_%s", GitgetPrefix, KeyDefaultHost))
|
|
fromGitconfig = "value.from.gitconfig"
|
|
fromEnv = "value.from.env"
|
|
fromFlag = "value.from.flag"
|
|
)
|
|
|
|
func TestConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
configMaker func(*testing.T)
|
|
key string
|
|
want string
|
|
}{
|
|
{
|
|
name: "no config",
|
|
configMaker: testConfigEmpty,
|
|
key: KeyDefaultHost,
|
|
want: Defaults[KeyDefaultHost],
|
|
},
|
|
{
|
|
name: "value only in gitconfig",
|
|
configMaker: testConfigOnlyInGitconfig,
|
|
key: KeyDefaultHost,
|
|
want: fromGitconfig,
|
|
},
|
|
{
|
|
name: "value only in env var",
|
|
configMaker: testConfigOnlyInEnvVar,
|
|
key: KeyDefaultHost,
|
|
want: fromEnv,
|
|
},
|
|
{
|
|
name: "value in gitconfig and env var",
|
|
configMaker: testConfigInGitconfigAndEnvVar,
|
|
key: KeyDefaultHost,
|
|
want: fromEnv,
|
|
},
|
|
{
|
|
name: "value in flag",
|
|
configMaker: testConfigInFlag,
|
|
key: KeyDefaultHost,
|
|
want: fromFlag,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
test.configMaker(t)
|
|
|
|
got := viper.GetString(test.key)
|
|
if got != test.want {
|
|
t.Errorf("expected %q; got %q", test.want, got)
|
|
}
|
|
|
|
// Clear env variables and reset viper registry after each test so they impact other tests.
|
|
os.Clearenv()
|
|
viper.Reset()
|
|
})
|
|
}
|
|
}
|
|
|
|
type gitconfigEmpty struct{}
|
|
|
|
func (c *gitconfigEmpty) Get(key string) string {
|
|
return ""
|
|
}
|
|
|
|
type gitconfigValid struct{}
|
|
|
|
func (c *gitconfigValid) Get(key string) string {
|
|
return fromGitconfig
|
|
}
|
|
|
|
func testConfigEmpty(t *testing.T) {
|
|
Init(&gitconfigEmpty{})
|
|
}
|
|
|
|
func testConfigOnlyInGitconfig(t *testing.T) {
|
|
Init(&gitconfigValid{})
|
|
}
|
|
|
|
func testConfigOnlyInEnvVar(t *testing.T) {
|
|
os.Setenv(envVarName, fromEnv)
|
|
|
|
Init(&gitconfigEmpty{})
|
|
}
|
|
|
|
func testConfigInGitconfigAndEnvVar(t *testing.T) {
|
|
os.Setenv(envVarName, fromEnv)
|
|
|
|
Init(&gitconfigValid{})
|
|
}
|
|
|
|
func testConfigInFlag(t *testing.T) {
|
|
os.Setenv(envVarName, fromEnv)
|
|
|
|
cmd := cobra.Command{}
|
|
cmd.PersistentFlags().String(KeyDefaultHost, Defaults[KeyDefaultHost], "")
|
|
viper.BindPFlag(KeyDefaultHost, cmd.PersistentFlags().Lookup(KeyDefaultHost))
|
|
|
|
cmd.SetArgs([]string{"--" + KeyDefaultHost, fromFlag})
|
|
cmd.Execute()
|
|
Init(&gitconfigValid{})
|
|
}
|