Skip to content

Commit

Permalink
Merge pull request #20 from kishaningithub/prevent-duplicate-matches
Browse files Browse the repository at this point in the history
Prevent duplicate imports when importing multiple addresses
  • Loading branch information
kishaningithub committed May 7, 2024
2 parents a555cf5 + eca796b commit 8d50535
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
13 changes: 12 additions & 1 deletion pkg/internal/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,24 @@ func (resources TerraformResources) FilterByAddresses(addresses []string) Terraf
for _, resource := range resources {
for _, address := range addresses {
if strings.HasPrefix(resource.Address, address) {
filteredResources = append(filteredResources, resource)
if !filteredResources.contains(resource) {
filteredResources = append(filteredResources, resource)
}
}
}
}
return filteredResources
}

func (resources TerraformResources) contains(r TerraformResource) bool {
for _, resource := range resources {
if resource.Address == r.Address {
return true
}
}
return false
}

type TerraformStateParser interface {
Parse() (TerraformResources, error)
}
35 changes: 35 additions & 0 deletions pkg/tfimportgen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,38 @@ func Test_GenerateImports_ShouldGenerateImportsForResourcesForMultipleAddresses(
})
}
}

func Test_GenerateImports_ShouldNotGenerateDuplicateImportsForResourcesForMultipleAddresses(t *testing.T) {
tests := []struct {
name string
address []string
expected tfimportgen.TerraformImports
}{
{
name: "filtering by module",
address: []string{"aws_glue_catalog_database.test_db", "aws_glue_catalog_database.test_db"},
expected: tfimportgen.TerraformImports{
{
ResourceAddress: "aws_glue_catalog_database.test_db",
ResourceID: "id_test_db",
SupportsImport: true,
},
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
stateJsonFile, err := os.Open(filepath.FromSlash("testdata/resources_in_root_and_child_modules.json"))
require.NoError(t, err)
t.Cleanup(func() {
_ = stateJsonFile.Close()
})

actual, err := tfimportgen.GenerateImports(stateJsonFile, tt.address)

require.NoError(t, err)
require.Equal(t, tt.expected, actual)
})
}
}

0 comments on commit 8d50535

Please sign in to comment.