github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/durgaform/eval_provider_test.go (about) 1 package durgaform 2 3 import ( 4 "testing" 5 6 "github.com/hashicorp/hcl/v2/hcldec" 7 "github.com/zclconf/go-cty/cty" 8 9 "github.com/eliastor/durgaform/internal/addrs" 10 "github.com/eliastor/durgaform/internal/configs" 11 "github.com/eliastor/durgaform/internal/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 }