opentofu/internal/tofu/eval_provider_test.go
Andy Hayes 389f33fdc5
300/provider foreach (#1911)
Signed-off-by: Andrew Hayes <andrew.hayes@harness.io>
2024-09-06 14:33:05 +01:00

63 lines
1.8 KiB
Go

// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package tofu
import (
"testing"
"github.com/hashicorp/hcl/v2/hcldec"
"github.com/zclconf/go-cty/cty"
"github.com/opentofu/opentofu/internal/addrs"
"github.com/opentofu/opentofu/internal/configs"
"github.com/opentofu/opentofu/internal/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{
ProviderCommon: configs.ProviderCommon{
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)
}
}