Make AllSettings include set-but-empty keys

This commit is contained in:
Albert Vaca Cintora 2022-04-19 21:19:35 +02:00
parent 1cc3fa065c
commit 42406af567
2 changed files with 32 additions and 2 deletions

View file

@ -1825,8 +1825,8 @@ func (v *Viper) AllSettings() map[string]interface{} {
for _, k := range v.AllKeys() { for _, k := range v.AllKeys() {
value := v.Get(k) value := v.Get(k)
if value == nil { if value == nil {
// should not happen, since AllKeys() returns only keys holding a value, // Key set but empty, include it in the output as a null value
// check just in case anything changes m[k] = nil
continue continue
} }

View file

@ -1818,3 +1818,33 @@ func TestKnownKeys(t *testing.T) {
t.Error("SetKnown didn't mark key as known") t.Error("SetKnown didn't mark key as known")
} }
} }
func TestEmptySection(t *testing.T) {
var yamlWithEnvVars = `
key:
subkey:
another_key:
`
v := New()
initConfig(v, "yaml", yamlWithEnvVars)
v.SetKnown("is_known")
v.SetDefault("has_default", true)
// AllKeys includes empty keys
keys := v.AllKeys()
assert.NotContains(t, keys, "key") // Only empty leaf nodes are returned
assert.Contains(t, keys, "key.subkey")
assert.Contains(t, keys, "another_key")
assert.NotContains(t, keys, "is_known")
assert.Contains(t, keys, "has_default")
// AllSettings includes empty keys
vars := v.AllSettings()
assert.NotContains(t, vars, "key") // Only empty leaf nodes are returned
assert.Contains(t, vars, "key.subkey")
assert.Contains(t, vars, "another_key")
assert.NotContains(t, vars, "is_known")
assert.Contains(t, vars, "has_default")
}