terraform/configs/configschema/implied_type_test.go

125 lines
2.5 KiB
Go

package configschema
import (
"testing"
"github.com/zclconf/go-cty/cty"
)
func TestBlockImpliedType(t *testing.T) {
tests := map[string]struct {
Schema *Block
Want cty.Type
}{
"nil": {
nil,
cty.EmptyObject,
},
"empty": {
&Block{},
cty.EmptyObject,
},
"attributes": {
&Block{
Attributes: map[string]*Attribute{
"optional": {
Type: cty.String,
Optional: true,
},
"required": {
Type: cty.Number,
Required: true,
},
"computed": {
Type: cty.List(cty.Bool),
Computed: true,
},
"optional_computed": {
Type: cty.Map(cty.Bool),
Optional: true,
},
},
},
cty.Object(map[string]cty.Type{
"optional": cty.String,
"required": cty.Number,
"computed": cty.List(cty.Bool),
"optional_computed": cty.Map(cty.Bool),
}),
},
"blocks": {
&Block{
BlockTypes: map[string]*NestedBlock{
"single": &NestedBlock{
Nesting: NestingSingle,
Block: Block{
Attributes: map[string]*Attribute{
"foo": {
Type: cty.DynamicPseudoType,
Required: true,
},
},
},
},
"list": &NestedBlock{
Nesting: NestingList,
},
"set": &NestedBlock{
Nesting: NestingSet,
},
"map": &NestedBlock{
Nesting: NestingMap,
},
},
},
cty.Object(map[string]cty.Type{
"single": cty.Object(map[string]cty.Type{
"foo": cty.DynamicPseudoType,
}),
"list": cty.List(cty.EmptyObject),
"set": cty.Set(cty.EmptyObject),
"map": cty.Map(cty.EmptyObject),
}),
},
"deep block nesting": {
&Block{
BlockTypes: map[string]*NestedBlock{
"single": &NestedBlock{
Nesting: NestingSingle,
Block: Block{
BlockTypes: map[string]*NestedBlock{
"list": &NestedBlock{
Nesting: NestingList,
Block: Block{
BlockTypes: map[string]*NestedBlock{
"set": &NestedBlock{
Nesting: NestingSet,
},
},
},
},
},
},
},
},
},
cty.Object(map[string]cty.Type{
"single": cty.Object(map[string]cty.Type{
"list": cty.List(cty.Object(map[string]cty.Type{
"set": cty.Set(cty.EmptyObject),
})),
}),
}),
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
got := test.Schema.ImpliedType()
if !got.Equals(test.Want) {
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want)
}
})
}
}