6
0
mirror of https://github.com/grdl/git-get.git synced 2026-02-08 05:14:19 +00:00

Refactor config provider using viper

This commit is contained in:
Grzegorz Dlugoszewski
2020-06-04 11:38:01 +02:00
parent 205eecc073
commit f2d8496136
7 changed files with 142 additions and 130 deletions

View File

@@ -3,141 +3,153 @@ package pkg
import (
"os"
"path"
"strings"
"testing"
"github.com/go-git/go-git/v5/config"
"github.com/spf13/viper"
)
func newConfigWithFullGitconfig() *Conf {
gitconfig := config.NewConfig()
const (
EnvDefaultHost = "GITGET_DEFAULTHOST"
EnvReposRoot = "GITGET_REPOSROOT"
)
gitget := gitconfig.Raw.Section(CfgSection)
gitget.AddOption(CfgReposRoot, "file.root")
gitget.AddOption(CfgDefaultHost, "file.host")
func newConfigWithFullGitconfig() *gitconfig {
cfg := config.NewConfig()
return &Conf{
gitconfig: gitconfig,
gitget := cfg.Raw.Section(GitgetPrefix)
gitget.AddOption(KeyReposRoot, "file.root")
gitget.AddOption(KeyDefaultHost, "file.host")
return &gitconfig{
Config: cfg,
}
}
func newConfigWithEmptyGitgetSection() *Conf {
gitconfig := config.NewConfig()
func newConfigWithEmptyGitgetSection() *gitconfig {
cfg := config.NewConfig()
_ = gitconfig.Raw.Section(CfgSection)
_ = cfg.Raw.Section(GitgetPrefix)
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func newConfigWithEmptyValues() *Conf {
gitconfig := config.NewConfig()
func newConfigWithEmptyValues() *gitconfig {
cfg := config.NewConfig()
gitget := gitconfig.Raw.Section(CfgSection)
gitget.AddOption(CfgReposRoot, "")
gitget.AddOption(CfgDefaultHost, " ")
gitget := cfg.Raw.Section(GitgetPrefix)
gitget.AddOption(KeyReposRoot, "")
gitget.AddOption(KeyDefaultHost, " ")
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func newConfigWithoutGitgetSection() *Conf {
gitconfig := config.NewConfig()
func newConfigWithoutGitgetSection() *gitconfig {
cfg := config.NewConfig()
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func newConfigWithEmptyGitconfig() *Conf {
return &Conf{
gitconfig: nil,
func newConfigWithEmptyGitconfig() *gitconfig {
return &gitconfig{
Config: nil,
}
}
func newConfigWithEnvVars() *Conf {
func newConfigWithEnvVars() *gitconfig {
_ = os.Setenv(EnvDefaultHost, "env.host")
_ = os.Setenv(EnvReposRoot, "env.root")
return &Conf{
gitconfig: nil,
return &gitconfig{
Config: nil,
}
}
func newConfigWithGitconfigAndEnvVars() *Conf {
gitconfig := config.NewConfig()
func newConfigWithGitconfigAndEnvVars() *gitconfig {
cfg := config.NewConfig()
gitget := gitconfig.Raw.Section(CfgSection)
gitget.AddOption(CfgReposRoot, "file.root")
gitget.AddOption(CfgDefaultHost, "file.host")
gitget := cfg.Raw.Section(GitgetPrefix)
gitget.AddOption(KeyReposRoot, "file.root")
gitget.AddOption(KeyDefaultHost, "file.host")
_ = os.Setenv(EnvDefaultHost, "env.host")
_ = os.Setenv(EnvReposRoot, "env.root")
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func newConfigWithEmptySectionAndEnvVars() *Conf {
gitconfig := config.NewConfig()
func newConfigWithEmptySectionAndEnvVars() *gitconfig {
cfg := config.NewConfig()
_ = gitconfig.Raw.Section(CfgSection)
_ = cfg.Raw.Section(GitgetPrefix)
_ = os.Setenv(EnvDefaultHost, "env.host")
_ = os.Setenv(EnvReposRoot, "env.root")
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func newConfigWithMixed() *Conf {
gitconfig := config.NewConfig()
func newConfigWithMixed() *gitconfig {
cfg := config.NewConfig()
gitget := gitconfig.Raw.Section(CfgSection)
gitget.AddOption(CfgReposRoot, "file.root")
gitget.AddOption(CfgDefaultHost, "file.host")
gitget := cfg.Raw.Section(GitgetPrefix)
gitget.AddOption(KeyReposRoot, "file.root")
gitget.AddOption(KeyDefaultHost, "file.host")
_ = os.Setenv(EnvDefaultHost, "env.host")
return &Conf{
gitconfig: gitconfig,
return &gitconfig{
Config: cfg,
}
}
func TestConfig(t *testing.T) {
defReposRoot := path.Join(home(), DefaultReposRootSubpath)
defReposRoot := path.Join(home(), DefReposRoot)
var tests = []struct {
makeConfig func() *Conf
makeConfig func() *gitconfig
wantReposRoot string
wantDefaultHost string
}{
{newConfigWithFullGitconfig, "file.root", "file.host"},
{newConfigWithoutGitgetSection, defReposRoot, DefaultHost},
{newConfigWithEmptyGitconfig, defReposRoot, DefaultHost},
{newConfigWithoutGitgetSection, defReposRoot, DefDefaultHost},
{newConfigWithEmptyGitconfig, defReposRoot, DefDefaultHost},
{newConfigWithEnvVars, "env.root", "env.host"},
{newConfigWithGitconfigAndEnvVars, "env.root", "env.host"},
{newConfigWithEmptySectionAndEnvVars, "env.root", "env.host"},
{newConfigWithEmptyGitgetSection, defReposRoot, DefaultHost},
{newConfigWithEmptyValues, defReposRoot, DefaultHost},
{newConfigWithEmptyGitgetSection, defReposRoot, DefDefaultHost},
{newConfigWithEmptyValues, defReposRoot, DefDefaultHost},
{newConfigWithMixed, "file.root", "env.host"},
}
for _, test := range tests {
viper.SetEnvPrefix(strings.ToUpper(GitgetPrefix))
viper.AutomaticEnv()
cfg := test.makeConfig()
setMissingValues(cfg)
if cfg.ReposRoot() != test.wantReposRoot {
t.Errorf("Wrong reposRoot value, got: %+v; want: %+v", cfg.ReposRoot(), test.wantReposRoot)
if viper.GetString(KeyDefaultHost) != test.wantDefaultHost {
t.Errorf("Wrong %s value, got: %s; want: %s", KeyDefaultHost, viper.GetString(KeyDefaultHost), test.wantDefaultHost)
}
if cfg.DefaultHost() != test.wantDefaultHost {
t.Errorf("Wrong defaultHost value, got: %+v; want: %+v", cfg.DefaultHost(), test.wantDefaultHost)
if viper.GetString(KeyReposRoot) != test.wantReposRoot {
t.Errorf("Wrong %s value, got: %s; want: %s", KeyReposRoot, viper.GetString(KeyReposRoot), test.wantReposRoot)
}
// Unset env variables after each test so they don't affect other tests
// Unset env variables and reset viper registry after each test
viper.Reset()
err := os.Unsetenv(EnvDefaultHost)
checkFatal(t, err)
err = os.Unsetenv(EnvReposRoot)