56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package terraform
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/hcl/v2/hcldec"
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
"github.com/hashicorp/terraform/addrs"
|
|
"github.com/hashicorp/terraform/configs"
|
|
"github.com/hashicorp/terraform/configs/configschema"
|
|
)
|
|
|
|
func TestBuildProviderConfig(t *testing.T) {
|
|
configBody := configs.SynthBody("", map[string]cty.Value{
|
|
"set_in_config": cty.StringVal("config"),
|
|
})
|
|
providerAddr := addrs.AbsProviderConfig{
|
|
Module: addrs.RootModule,
|
|
Provider: addrs.NewDefaultProvider("foo"),
|
|
}
|
|
|
|
ctx := &MockEvalContext{
|
|
// The input values map is expected to contain only keys that aren't
|
|
// already present in the config, since we skip prompting for
|
|
// attributes that are already set.
|
|
ProviderInputValues: map[string]cty.Value{
|
|
"set_by_input": cty.StringVal("input"),
|
|
},
|
|
}
|
|
gotBody := buildProviderConfig(ctx, providerAddr, &configs.Provider{
|
|
Name: "foo",
|
|
Config: configBody,
|
|
})
|
|
|
|
schema := &configschema.Block{
|
|
Attributes: map[string]*configschema.Attribute{
|
|
"set_in_config": {Type: cty.String, Optional: true},
|
|
"set_by_input": {Type: cty.String, Optional: true},
|
|
},
|
|
}
|
|
got, diags := hcldec.Decode(gotBody, schema.DecoderSpec(), nil)
|
|
if diags.HasErrors() {
|
|
t.Fatalf("body decode failed: %s", diags.Error())
|
|
}
|
|
|
|
// We expect the provider config with the added input value
|
|
want := cty.ObjectVal(map[string]cty.Value{
|
|
"set_in_config": cty.StringVal("config"),
|
|
"set_by_input": cty.StringVal("input"),
|
|
})
|
|
if !got.RawEquals(want) {
|
|
t.Fatalf("incorrect merged config\ngot: %#v\nwant: %#v", got, want)
|
|
}
|
|
}
|