diff --git a/viper.go b/viper.go index 5133de7..781ac1a 100644 --- a/viper.go +++ b/viper.go @@ -1195,9 +1195,13 @@ func (v *Viper) realKey(key string) string { func InConfig(key string) bool { return v.InConfig(key) } func (v *Viper) InConfig(key string) bool { // if the requested key is an alias, then return the proper key - key = v.realKey(key) + key = v.realKey(strings.ToLower(key)) - _, exists := v.config[key] + path := strings.Split(key, v.keyDelim) + lastKey := strings.ToLower(path[len(path)-1]) + deepestMap := deepSearch(v.config, path[0:len(path)-1]) + + _, exists := deepestMap[lastKey] return exists } diff --git a/viper_test.go b/viper_test.go index f8364a0..e3cc7c0 100644 --- a/viper_test.go +++ b/viper_test.go @@ -1031,6 +1031,17 @@ func TestIsSet(t *testing.T) { assert.True(t, v.IsSet("helloworld")) } +func TestInConfig(t *testing.T) { + v := New() + v.SetConfigType("yaml") + v.ReadConfig(bytes.NewBuffer(yamlExample)) + assert.True(t, v.InConfig("clothing.jacket")) + assert.False(t, v.InConfig("clothing.jackets")) + assert.False(t, v.InConfig("helloworld")) + v.Set("helloworld", "fubar") + assert.False(t, v.InConfig("helloworld")) +} + func TestDirsSearch(t *testing.T) { root, config, cleanup := initDirs(t)