From cbc92421b1817ce38d1e3454e7ae100f8a0a445a Mon Sep 17 00:00:00 2001 From: GuillaumeBAECHLER <guillaume.baechler@dailymotion.com> Date: Tue, 25 Mar 2025 15:18:36 +0100 Subject: [PATCH] fix(config): get config type from v.configType or config file ext --- viper.go | 8 ++++---- viper_test.go | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/viper.go b/viper.go index f900e58..374fe74 100644 --- a/viper.go +++ b/viper.go @@ -1535,8 +1535,8 @@ func (v *Viper) MergeInConfig() error { func ReadConfig(in io.Reader) error { return v.ReadConfig(in) } func (v *Viper) ReadConfig(in io.Reader) error { - if v.configType == "" { - return errors.New("cannot decode configuration: config type is not set") + if v.getConfigType() == "" { + return errors.New("cannot decode configuration: unable to get config type from configType or file extension") } v.config = make(map[string]any) @@ -1547,8 +1547,8 @@ func (v *Viper) ReadConfig(in io.Reader) error { func MergeConfig(in io.Reader) error { return v.MergeConfig(in) } func (v *Viper) MergeConfig(in io.Reader) error { - if v.configType == "" { - return errors.New("cannot decode configuration: config type is not set") + if v.getConfigType() == "" { + return errors.New("cannot decode configuration: unable to get config type from configType or file extension") } cfg := make(map[string]any) diff --git a/viper_test.go b/viper_test.go index c0c0e7c..f7e0787 100644 --- a/viper_test.go +++ b/viper_test.go @@ -1542,6 +1542,14 @@ func TestReadConfig(t *testing.T) { }) } +func TestReadConfigWithSetConfigFile(t *testing.T) { + v := New() + v.SetConfigFile("config.yaml") // Dummy value to infer config type from file extension + err := v.ReadConfig(bytes.NewBuffer(yamlMergeExampleSrc)) + require.NoError(t, err) + assert.Equal(t, 45000, v.GetInt("hello.pop")) +} + func TestIsSet(t *testing.T) { v := New() v.SetConfigType("yaml") @@ -2059,6 +2067,14 @@ func TestMergeConfig(t *testing.T) { assert.Equal(t, "bar", v.GetString("fu")) } +func TestMergeConfigWithSetConfigFile(t *testing.T) { + v := New() + v.SetConfigFile("config.yaml") // Dummy value to infer config type from file extension + err := v.MergeConfig(bytes.NewBuffer(yamlMergeExampleSrc)) + require.NoError(t, err) + assert.Equal(t, 45000, v.GetInt("hello.pop")) +} + func TestMergeConfigOverrideType(t *testing.T) { v := New() v.SetConfigType("json")