6
0
mirror of https://github.com/grdl/git-get.git synced 2026-02-04 18:34:51 +00:00
Files
git-get/pkg/cfg/config_test.go
2020-06-30 21:25:42 +02:00

118 lines
2.5 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) {
viper.SetDefault(test.key, Defaults[KeyDefaultHost])
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) {
Init(&gitconfigEmpty{})
os.Setenv(envVarName, fromEnv)
}
func testConfigInGitconfigAndEnvVar(t *testing.T) {
Init(&gitconfigValid{})
os.Setenv(envVarName, fromEnv)
}
func testConfigInFlag(t *testing.T) {
Init(&gitconfigValid{})
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()
}