From db0bbd8f9701d85cccbbf878478ed720dd18e307 Mon Sep 17 00:00:00 2001 From: Mark Sagi-Kazar Date: Tue, 4 Jun 2024 13:51:18 +0200 Subject: [PATCH] feat: use new finder even when build tag is disabled Signed-off-by: Mark Sagi-Kazar --- file.go | 13 +++++++++++++ viper_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/file.go b/file.go index 101624d..96991ae 100644 --- a/file.go +++ b/file.go @@ -13,6 +13,19 @@ import ( // Search all configPaths for any config file. // Returns the first path that exists (and is a config file). func (v *Viper) findConfigFile() (string, error) { + if v.finder != nil { + results, err := v.finder.Find(v.fs) + if err != nil { + return "", err + } + + if len(results) == 0 { + return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)} + } + + return results[0], nil + } + v.logger.Info("searching for config in paths", "paths", v.configPaths) for _, cp := range v.configPaths { diff --git a/viper_test.go b/viper_test.go index 33e6cc7..df42582 100644 --- a/viper_test.go +++ b/viper_test.go @@ -22,6 +22,7 @@ import ( "github.com/fsnotify/fsnotify" "github.com/go-viper/mapstructure/v2" + "github.com/sagikazarmark/locafero" "github.com/spf13/afero" "github.com/spf13/cast" "github.com/spf13/pflag" @@ -415,6 +416,34 @@ func TestReadInConfig(t *testing.T) { assert.Equal(t, "value", v.Get("key")) }) + + t.Run("find file using a finder", func(t *testing.T) { + fs := afero.NewMemMapFs() + + err := fs.Mkdir(testutil.AbsFilePath(t, "/etc/viper"), 0o777) + require.NoError(t, err) + + _, err = fs.Create(testutil.AbsFilePath(t, "/etc/viper/config.yaml")) + require.NoError(t, err) + + finder := locafero.Finder{ + Paths: []string{"/etc/viper"}, + Names: locafero.NameWithExtensions("config", SupportedExts...), + Type: locafero.FileTypeFile, + } + + v := NewWithOptions(WithFinder(finder)) + + v.SetFs(fs) + + // These should be ineffective + v.AddConfigPath("/etc/something_else") + v.SetConfigName("not-config") + + filename, err := v.getConfigFile() + assert.Equal(t, testutil.AbsFilePath(t, "/etc/viper/config.yaml"), filename) + assert.NoError(t, err) + }) } func TestDefault(t *testing.T) {