blob: 29814d5644c35336596ae3be027e5769b5110905 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package refactoring
import (
"testing"
"github.com/google/go-cmp/cmp"
"github.com/hashicorp/hcl/v2"
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/tfdiags"
)
func TestFindRemoveStatements(t *testing.T) {
// LAZY: We don't need the expanded instances from loadRefactoringFixture
// but reuse the helper function anyway.
rootCfg, _ := loadRefactoringFixture(t, "testdata/remove-statements")
configResourceBasic := addrs.ConfigResource{
Module: addrs.RootModule,
Resource: addrs.Resource{
Mode: addrs.ManagedResourceMode,
Type: "test_resource",
Name: "foo",
},
}
configResourceWithModule := addrs.ConfigResource{
Module: addrs.Module{"gone"},
Resource: addrs.Resource{
Mode: addrs.ManagedResourceMode,
Type: "test_resource",
Name: "bar",
},
}
configModuleBasic := addrs.Module{"gone", "gonechild"}
configResourceOverridden := addrs.ConfigResource{
Module: addrs.Module{"child"},
Resource: addrs.Resource{
Mode: addrs.ManagedResourceMode,
Type: "test_resource",
Name: "baz",
},
}
configResourceInModule := addrs.ConfigResource{
Module: addrs.Module{"child"},
Resource: addrs.Resource{
Mode: addrs.ManagedResourceMode,
Type: "test_resource",
Name: "boo",
},
}
configModuleInModule := addrs.Module{"child", "grandchild"}
want := addrs.MakeMap[addrs.ConfigMoveable, RemoveStatement](
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configResourceBasic, RemoveStatement{
From: configResourceBasic,
Destroy: false,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/main.tf",
Start: hcl.Pos{Line: 2, Column: 1, Byte: 27},
End: hcl.Pos{Line: 2, Column: 8, Byte: 34},
}),
}),
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configResourceWithModule, RemoveStatement{
From: configResourceWithModule,
Destroy: false,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/main.tf",
Start: hcl.Pos{Line: 10, Column: 1, Byte: 138},
End: hcl.Pos{Line: 10, Column: 8, Byte: 145},
}),
}),
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configModuleBasic, RemoveStatement{
From: configModuleBasic,
Destroy: false,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/main.tf",
Start: hcl.Pos{Line: 18, Column: 1, Byte: 253},
End: hcl.Pos{Line: 18, Column: 8, Byte: 260},
}),
}),
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configResourceOverridden, RemoveStatement{
From: configResourceOverridden,
Destroy: true,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/main.tf", // the statement in the parent module takes precedence
Start: hcl.Pos{Line: 30, Column: 1, Byte: 428},
End: hcl.Pos{Line: 30, Column: 8, Byte: 435},
}),
}),
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configResourceInModule, RemoveStatement{
From: configResourceInModule,
Destroy: true,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/child/main.tf",
Start: hcl.Pos{Line: 10, Column: 1, Byte: 141},
End: hcl.Pos{Line: 10, Column: 8, Byte: 148},
}),
}),
addrs.MakeMapElem[addrs.ConfigMoveable, RemoveStatement](configModuleInModule, RemoveStatement{
From: configModuleInModule,
Destroy: false,
DeclRange: tfdiags.SourceRangeFromHCL(hcl.Range{
Filename: "testdata/remove-statements/child/main.tf",
Start: hcl.Pos{Line: 18, Column: 1, Byte: 247},
End: hcl.Pos{Line: 18, Column: 8, Byte: 254},
}),
}),
)
got, diags := FindRemoveStatements(rootCfg)
if diags.HasErrors() {
t.Fatal(diags.Err().Error())
}
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("wrong result\n%s", diff)
}
}