package configs import ( "testing" "github.com/hashicorp/hcl2/hcl" "github.com/zclconf/go-cty/cty" ) func TestSynthBodyContent(t *testing.T) { tests := map[string]struct { Values map[string]cty.Value Schema *hcl.BodySchema DiagCount int }{ "empty": { Values: map[string]cty.Value{}, Schema: &hcl.BodySchema{}, DiagCount: 0, }, "missing required attribute": { Values: map[string]cty.Value{}, Schema: &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ { Name: "nonexist", Required: true, }, }, }, DiagCount: 1, // missing required attribute }, "missing optional attribute": { Values: map[string]cty.Value{}, Schema: &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ { Name: "nonexist", }, }, }, DiagCount: 0, }, "extraneous attribute": { Values: map[string]cty.Value{ "foo": cty.StringVal("unwanted"), }, Schema: &hcl.BodySchema{}, DiagCount: 1, // unsupported attribute }, } for name, test := range tests { t.Run(name, func(t *testing.T) { body := SynthBody("synth", test.Values) _, diags := body.Content(test.Schema) if got, want := len(diags), test.DiagCount; got != want { t.Errorf("wrong number of diagnostics %d; want %d", got, want) for _, diag := range diags { t.Logf("- %s", diag) } } }) } }