Fix logic when skipping schema input

The Required||Optional logic in schemaMap.Input was incorrect, causing
it to always request input. Fix the logic, and the associated tests
which were passing "just because".
This commit is contained in:
James Bardin 2017-03-17 14:43:37 -04:00
parent d55e1bcf58
commit efd0f5b0db
2 changed files with 24 additions and 12 deletions

View File

@ -477,7 +477,9 @@ func (m schemaMap) Input(
// Skip things that don't require config, if that is even valid
// for a provider schema.
if !v.Required && !v.Optional {
// Required XOR Optional must always be true to validate, so we only
// need to check one.
if v.Optional {
continue
}

View File

@ -3173,7 +3173,7 @@ func TestSchemaMap_Input(t *testing.T) {
* String decode
*/
"uses input on optional field with no config": {
"no input on optional field with no config": {
Schema: map[string]*Schema{
"availability_zone": &Schema{
Type: TypeString,
@ -3181,15 +3181,9 @@ func TestSchemaMap_Input(t *testing.T) {
},
},
Input: map[string]string{
"availability_zone": "foo",
},
Result: map[string]interface{}{
"availability_zone": "foo",
},
Err: false,
Input: map[string]string{},
Result: map[string]interface{}{},
Err: false,
},
"input ignored when config has a value": {
@ -3276,7 +3270,7 @@ func TestSchemaMap_Input(t *testing.T) {
DefaultFunc: func() (interface{}, error) {
return nil, nil
},
Optional: true,
Required: true,
},
},
@ -3290,6 +3284,22 @@ func TestSchemaMap_Input(t *testing.T) {
Err: false,
},
"input not used when optional default function returns nil": {
Schema: map[string]*Schema{
"availability_zone": &Schema{
Type: TypeString,
DefaultFunc: func() (interface{}, error) {
return nil, nil
},
Optional: true,
},
},
Input: map[string]string{},
Result: map[string]interface{}{},
Err: false,
},
}
for i, tc := range cases {