// Copyright (c) The OpenTofu Authors // SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2023 HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package jsonconfig import ( "testing" "github.com/google/go-cmp/cmp" "github.com/opentofu/opentofu/internal/addrs" "github.com/opentofu/opentofu/internal/configs" "github.com/opentofu/opentofu/internal/tofu" ) func TestFindSourceProviderConfig(t *testing.T) { tests := []struct { StartKey string FullName string ProviderMap map[string]providerConfig Want string }{ { StartKey: "null", FullName: "hashicorp/null", ProviderMap: map[string]providerConfig{}, Want: "", }, { StartKey: "null", FullName: "hashicorp/null", ProviderMap: map[string]providerConfig{ "null": { Name: "null", FullName: "hashicorp/null", ModuleAddress: "", }, }, Want: "null", }, { StartKey: "null2", FullName: "hashicorp/null", ProviderMap: map[string]providerConfig{ "null": { Name: "null", FullName: "hashicorp/null", ModuleAddress: "", }, }, Want: "", }, { StartKey: "null", FullName: "hashicorp2/null", ProviderMap: map[string]providerConfig{ "null": { Name: "null", FullName: "hashicorp/null", ModuleAddress: "", }, }, Want: "", }, { StartKey: "module.a:null", FullName: "hashicorp/null", ProviderMap: map[string]providerConfig{ "null": { Name: "null", FullName: "hashicorp/null", ModuleAddress: "", }, "module.a:null": { Name: "module.a:null", FullName: "hashicorp/null", ModuleAddress: "module.a", parentKey: "null", }, }, Want: "null", }, { StartKey: "module.a:null", FullName: "hashicorp2/null", ProviderMap: map[string]providerConfig{ "null": { Name: "null", FullName: "hashicorp/null", ModuleAddress: "", }, "module.a:null": { Name: "module.a:null", FullName: "hashicorp2/null", ModuleAddress: "module.a", parentKey: "null", }, }, Want: "module.a:null", }, } for _, test := range tests { got := findSourceProviderKey(test.StartKey, test.FullName, test.ProviderMap) if got != test.Want { t.Errorf("wrong result:\nGot: %#v\nWant: %#v\n", got, test.Want) } } } func TestMarshalModule(t *testing.T) { t.Run("validate variables marshalling with all the required fields", func(t *testing.T) { varCfg := &configs.Variable{ Name: "myvar", Description: "myvar description", Deprecated: "myvar deprecated message", } modCfg := configs.Config{ Module: &configs.Module{ Variables: map[string]*configs.Variable{ "myvar": varCfg, }, }, } modCfg.Root = &modCfg out, err := marshalModule(&modCfg, &tofu.Schemas{}, addrs.RootModule.String()) if err != nil { t.Fatalf("unexpected error during marshalling module: %s", err) } expected := module{ Outputs: map[string]output{}, ModuleCalls: map[string]moduleCall{}, Variables: map[string]*variable{ "myvar": { Description: varCfg.Description, Deprecated: varCfg.Deprecated, }, }, } if diff := cmp.Diff(expected, out); diff != "" { t.Errorf("unexpected diff: \n%s", diff) } }) }