From 6d59e31dc58f39464a6b8737544e1c2465840629 Mon Sep 17 00:00:00 2001
From: Sergey Novichkov <sergey.novichkov@iqoption.com>
Date: Wed, 19 Dec 2018 08:28:16 +0300
Subject: [PATCH] Added dep search to InConfig method

---
 viper.go      |  8 ++++++--
 viper_test.go | 11 +++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)

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)