package jsonprovider import ( "encoding/json" "testing" "github.com/google/go-cmp/cmp" "github.com/zclconf/go-cty/cty" "github.com/hashicorp/terraform/internal/configs/configschema" ) func TestMarshalBlock(t *testing.T) { tests := []struct { Input *configschema.Block Want *block }{ { nil, &block{}, }, { Input: &configschema.Block{ Attributes: map[string]*configschema.Attribute{ "id": {Type: cty.String, Optional: true, Computed: true}, "ami": {Type: cty.String, Optional: true}, }, BlockTypes: map[string]*configschema.NestedBlock{ "network_interface": { Nesting: configschema.NestingList, Block: configschema.Block{ Attributes: map[string]*configschema.Attribute{ "device_index": {Type: cty.String, Optional: true}, "description": {Type: cty.String, Optional: true}, }, }, }, }, }, Want: &block{ Attributes: map[string]*attribute{ "ami": {AttributeType: json.RawMessage(`"string"`), Optional: true, DescriptionKind: "plain"}, "id": {AttributeType: json.RawMessage(`"string"`), Optional: true, Computed: true, DescriptionKind: "plain"}, }, BlockTypes: map[string]*blockType{ "network_interface": { NestingMode: "list", Block: &block{ Attributes: map[string]*attribute{ "description": {AttributeType: json.RawMessage(`"string"`), Optional: true, DescriptionKind: "plain"}, "device_index": {AttributeType: json.RawMessage(`"string"`), Optional: true, DescriptionKind: "plain"}, }, DescriptionKind: "plain", }, }, }, DescriptionKind: "plain", }, }, } for _, test := range tests { got := marshalBlock(test.Input) if !cmp.Equal(got, test.Want) { t.Fatalf("wrong result:\n %v\n", cmp.Diff(got, test.Want)) } } }