// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package configs import ( "testing" "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/hclsyntax" ) func TestVariableInvalidDefault(t *testing.T) { src := ` variable foo { type = map(object({ foo = bool })) default = { "thingy" = { foo = "string where bool is expected" } } } ` hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos) if diags.HasErrors() { t.Fatal(diags.Error()) } _, diags = parseConfigFile(hclF.Body, nil, false, false) if !diags.HasErrors() { t.Fatal("unexpected success; want error") } for _, diag := range diags { if diag.Severity != hcl.DiagError { continue } if diag.Summary != "Invalid default value for variable" { t.Errorf("unexpected diagnostic summary: %q", diag.Summary) continue } if got, want := diag.Detail, `This default value is not compatible with the variable's type constraint: ["thingy"].foo: a bool is required.`; got != want { t.Errorf("wrong diagnostic detault\ngot: %s\nwant: %s", got, want) } } } func TestOutputDeprecation(t *testing.T) { src := ` output "foo" { value = "bar" deprecated = "This output is deprecated" } ` hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos) if diags.HasErrors() { t.Fatal(diags.Error()) } b, diags := parseConfigFile(hclF.Body, nil, false, false) if diags.HasErrors() { t.Fatalf("unexpected error: %q", diags) } if !b.Outputs[0].DeprecatedSet { t.Fatalf("expected output to be deprecated") } if b.Outputs[0].Deprecated != "This output is deprecated" { t.Fatalf("expected output to have deprecation message") } } func TestVariableDeprecation(t *testing.T) { src := ` variable "foo" { type = string deprecated = "This variable is deprecated, use bar instead" } ` hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos) if diags.HasErrors() { t.Fatal(diags.Error()) } b, diags := parseConfigFile(hclF.Body, nil, false, false) if diags.HasErrors() { t.Fatalf("unexpected error: %q", diags) } if !b.Variables[0].DeprecatedSet { t.Fatalf("expected variable to be deprecated") } if b.Variables[0].Deprecated != "This variable is deprecated, use bar instead" { t.Fatalf("expected variable to have deprecation message") } }