kubeform.dev/terraform-backend-sdk@v0.0.0-20220310143633-45f07fe731c5/terraform/eval_provider_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hashicorp/hcl/v2/hcldec"
     7  	"github.com/zclconf/go-cty/cty"
     8  
     9  	"kubeform.dev/terraform-backend-sdk/addrs"
    10  	"kubeform.dev/terraform-backend-sdk/configs"
    11  	"kubeform.dev/terraform-backend-sdk/configs/configschema"
    12  )
    13  
    14  func TestBuildProviderConfig(t *testing.T) {
    15  	configBody := configs.SynthBody("", map[string]cty.Value{
    16  		"set_in_config": cty.StringVal("config"),
    17  	})
    18  	providerAddr := addrs.AbsProviderConfig{
    19  		Module:   addrs.RootModule,
    20  		Provider: addrs.NewDefaultProvider("foo"),
    21  	}
    22  
    23  	ctx := &MockEvalContext{
    24  		// The input values map is expected to contain only keys that aren't
    25  		// already present in the config, since we skip prompting for
    26  		// attributes that are already set.
    27  		ProviderInputValues: map[string]cty.Value{
    28  			"set_by_input": cty.StringVal("input"),
    29  		},
    30  	}
    31  	gotBody := buildProviderConfig(ctx, providerAddr, &configs.Provider{
    32  		Name:   "foo",
    33  		Config: configBody,
    34  	})
    35  
    36  	schema := &configschema.Block{
    37  		Attributes: map[string]*configschema.Attribute{
    38  			"set_in_config": {Type: cty.String, Optional: true},
    39  			"set_by_input":  {Type: cty.String, Optional: true},
    40  		},
    41  	}
    42  	got, diags := hcldec.Decode(gotBody, schema.DecoderSpec(), nil)
    43  	if diags.HasErrors() {
    44  		t.Fatalf("body decode failed: %s", diags.Error())
    45  	}
    46  
    47  	// We expect the provider config with the added input value
    48  	want := cty.ObjectVal(map[string]cty.Value{
    49  		"set_in_config": cty.StringVal("config"),
    50  		"set_by_input":  cty.StringVal("input"),
    51  	})
    52  	if !got.RawEquals(want) {
    53  		t.Fatalf("incorrect merged config\ngot:  %#v\nwant: %#v", got, want)
    54  	}
    55  }