Skip to content

Commit

Permalink
fixes #32 applying defaults to a blank file causes panic
Browse files Browse the repository at this point in the history
  • Loading branch information
andy-miracl committed Mar 7, 2018
1 parent e3e3d83 commit 19f02dd
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
3 changes: 3 additions & 0 deletions schema.go
Expand Up @@ -106,6 +106,9 @@ func applyDefaultsRecursive(ctx context, pData interface{}, schema interface{})
if !ok {
return makeContextError(ctx, "Node should be an 'object'")
}
if dataProps == nil {
return nil
}
var schemaProps map[string]interface{}
if props, ok := schemaNode["properties"]; ok {
schemaProps = props.(map[string]interface{})
Expand Down
46 changes: 46 additions & 0 deletions schema_test.go
Expand Up @@ -182,6 +182,38 @@ func TestApplyDefaults_ObjectPropertyDefault(t *testing.T) {
assert.Equal(t, map[string]interface{}{"val": 1}, data)
}

func TestApplyDefaults_ObjectPropertyNilMap(t *testing.T) {
var data map[string]interface{}
schema := map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"val": map[string]interface{}{
"type": "integer",
"default": 1,
},
},
}
err := applyDefaults(&data, schema)
assert.Nil(t, err)
assert.Equal(t, map[string]interface{}(nil), data)
}

func TestApplyDefaults_ObjectPropertyEmptyMap(t *testing.T) {
data := map[string]interface{}{}
schema := map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"val": map[string]interface{}{
"type": "integer",
"default": 1,
},
},
}
err := applyDefaults(&data, schema)
assert.Nil(t, err)
assert.Equal(t, map[string]interface{}{"val": 1}, data)
}

func TestApplyDefaults_ObjectPropertyDefaultNotApplied(t *testing.T) {
data := map[string]interface{}{"other": 1}
schema := map[string]interface{}{
Expand Down Expand Up @@ -294,6 +326,20 @@ func TestApplyDefaults_ArrayDefault(t *testing.T) {
assert.Equal(t, []interface{}{}, data)
}

func TestApplyDefaults_ArrayElementDefaultNil(t *testing.T) {
var data []interface{}
schema := map[string]interface{}{
"type": "array",
"items": map[string]interface{}{
"type": "integer",
"default": 1,
},
}
err := applyDefaults(&data, schema)
assert.Nil(t, err)
assert.Equal(t, []interface{}(nil), data)
}

func TestApplyDefaults_ArrayElementDefault(t *testing.T) {
data := []interface{}{nil}
schema := map[string]interface{}{
Expand Down

0 comments on commit 19f02dd

Please sign in to comment.