Skip to content

Commit

Permalink
DEVTOOLING-737
Browse files Browse the repository at this point in the history
  • Loading branch information
sureshperiyappan committed Sep 10, 2024
1 parent 4a85025 commit a8117d7
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 9 deletions.
23 changes: 18 additions & 5 deletions genesyscloud/resource_genesyscloud_knowledge_category.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ func KnowledgeCategoryExporter() *resourceExporter.ResourceExporter {
return &resourceExporter.ResourceExporter{
GetResourcesFunc: provider.GetAllWithPooledClient(getAllKnowledgeCategories),
RefAttrs: map[string]*resourceExporter.RefAttrSettings{
"knowledge_base_id": {RefType: "genesyscloud_knowledge_knowledgebase"},
"knowledge_base_id": {RefType: "genesyscloud_knowledge_knowledgebase"},
"knowledge_category.parent_id": {RefType: "genesyscloud_knowledge_category"},
},
}
}
Expand Down Expand Up @@ -277,10 +278,16 @@ func buildKnowledgeCategoryUpdate(categoryIn map[string]interface{}) *platformcl
if description, ok := categoryIn["description"].(string); ok && description != "" {
categoryOut.Description = &description
}

if parentId, ok := categoryIn["parent_id"].(string); ok && parentId != "" {
categoryOut.ParentCategoryId = &parentId
if strings.Contains(parentId, ",") {
ids := strings.Split(parentId, ",")
parent_Id := ids[0]
categoryOut.ParentCategoryId = &parent_Id
} else {
categoryOut.ParentCategoryId = &parentId
}
}

return &categoryOut
}

Expand All @@ -295,7 +302,13 @@ func buildKnowledgeCategoryCreate(categoryIn map[string]interface{}) *platformcl
categoryOut.Description = &description
}
if parentId, ok := categoryIn["parent_id"].(string); ok && parentId != "" {
categoryOut.ParentCategoryId = &parentId
if strings.Contains(parentId, ",") {
ids := strings.Split(parentId, ",")
parent_Id := ids[0]
categoryOut.ParentCategoryId = &parent_Id
} else {
categoryOut.ParentCategoryId = &parentId
}
}

return &categoryOut
Expand All @@ -311,7 +324,7 @@ func flattenKnowledgeCategory(categoryIn platformclientv2.Categoryresponse) []in
categoryOut["description"] = *categoryIn.Description
}
if categoryIn.ParentCategory != nil && (*categoryIn.ParentCategory).Id != nil {
categoryOut["parent_id"] = (*categoryIn.ParentCategory).Id
categoryOut["parent_id"] = *(*categoryIn.ParentCategory).Id + "," + *(*categoryIn.KnowledgeBase).Id
}

return []interface{}{categoryOut}
Expand Down
105 changes: 103 additions & 2 deletions genesyscloud/resource_genesyscloud_knowledge_category_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,91 @@ func TestAccResourceKnowledgeCategoryBasic(t *testing.T) {
})
}

func TestAccResourceKnowledgeCategoryParentChild(t *testing.T) {
var (
knowledgeBaseResource1 = "test-knowledgebase1"
knowledgeBaseName1 = "Terraform Knowledge Base" + uuid.NewString()
knowledgeBaseDescription1 = "test-knowledgebase-description1"
knowledgeBaseCoreLanguage1 = "en-US"

knowledgeCategoryResourceParent1 = "test-knowledge-category-parent1"
categoryParentName = "Terraform Knowledge Category parent" + uuid.NewString()
categoryParentDescription = "test-parent-description1"
categoryParentDescription2 = "test-parent-description2"

knowledgeCategoryResourceChild1 = "test-knowledge-category-child1"
categoryChildName = "Terraform Knowledge Category child" + uuid.NewString()
categoryChildDescription = "test-child-description1"
categoryChildDescription2 = "test-child-description2"
)

resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestAccPreCheck(t) },
ProviderFactories: provider.GetProviderFactories(providerResources, providerDataSources),
Steps: []resource.TestStep{
{
// Create
Config: GenerateKnowledgeKnowledgebaseResource(
knowledgeBaseResource1,
knowledgeBaseName1,
knowledgeBaseDescription1,
knowledgeBaseCoreLanguage1,
) + generateKnowledgeCategoryResource(
knowledgeCategoryResourceParent1,
knowledgeBaseResource1,
categoryParentName,
categoryParentDescription,
) + generateKnowledgeCategoryChildResource(
knowledgeCategoryResourceChild1,
knowledgeBaseResource1,
categoryChildName,
categoryChildDescription,
knowledgeCategoryResourceParent1,
),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrPair("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_base_id", "genesyscloud_knowledge_knowledgebase."+knowledgeBaseResource1, "id"),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_category.0.name", categoryParentName),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_category.0.description", categoryParentDescription),
),
},
{
// Update
Config: GenerateKnowledgeKnowledgebaseResource(
knowledgeBaseResource1,
knowledgeBaseName1,
knowledgeBaseDescription1,
knowledgeBaseCoreLanguage1,
) + generateKnowledgeCategoryResource(
knowledgeCategoryResourceParent1,
knowledgeBaseResource1,
categoryParentName,
categoryParentDescription2,
) + generateKnowledgeCategoryChildResource(
knowledgeCategoryResourceChild1,
knowledgeBaseResource1,
categoryChildName,
categoryChildDescription2,
knowledgeCategoryResourceParent1,
),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrPair("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_base_id", "genesyscloud_knowledge_knowledgebase."+knowledgeBaseResource1, "id"),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_category.0.name", categoryParentName),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceParent1, "knowledge_category.0.description", categoryParentDescription2),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceChild1, "knowledge_category.0.name", categoryChildName),
resource.TestCheckResourceAttr("genesyscloud_knowledge_category."+knowledgeCategoryResourceChild1, "knowledge_category.0.description", categoryChildDescription2),
),
},
{
// Import/Read
ResourceName: "genesyscloud_knowledge_category." + knowledgeCategoryResourceParent1,
ImportState: true,
ImportStateVerify: true,
},
},
CheckDestroy: testVerifyKnowledgeCategoryDestroyed,
})
}

func generateKnowledgeCategoryResource(resourceName string, knowledgeBaseResource string, categoryName string, categoryDescription string) string {
category := fmt.Sprintf(`
resource "genesyscloud_knowledge_category" "%s" {
Expand All @@ -88,20 +173,36 @@ func generateKnowledgeCategoryResource(resourceName string, knowledgeBaseResourc
}
`, resourceName,
knowledgeBaseResource,
generateKnowledgeCategoryRequestBody(categoryName, categoryDescription),
generateKnowledgeCategoryRequestBody(categoryName, categoryDescription, ""),
)
return category
}

func generateKnowledgeCategoryChildResource(resourceName string, knowledgeBaseResource string, categoryName string, categoryDescription string, parentCategoryName string) string {
category := fmt.Sprintf(`
resource "genesyscloud_knowledge_category" "%s" {
knowledge_base_id = genesyscloud_knowledge_knowledgebase.%s.id
%s
}
`, resourceName,
knowledgeBaseResource,
generateKnowledgeCategoryRequestBody(categoryName, categoryDescription,
"parent_id = genesyscloud_knowledge_category."+parentCategoryName+".id"),
)
return category
}

func generateKnowledgeCategoryRequestBody(categoryName string, categoryDescription string) string {
func generateKnowledgeCategoryRequestBody(categoryName string, categoryDescription string, parrentCategoryName string) string {

return fmt.Sprintf(`
knowledge_category {
name = "%s"
description = "%s"
%s
}
`, categoryName,
categoryDescription,
parrentCategoryName,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ func TestAccResourceTfExport(t *testing.T) {
Config: generateTfExportResource(
exportResource1,
exportTestDir,
util.FalseValue,
util.TrueValue,
"",
),
Check: resource.ComposeTestCheckFunc(
Expand Down Expand Up @@ -2455,7 +2455,7 @@ func generateTfExportResource(
return fmt.Sprintf(`resource "genesyscloud_tf_export" "%s" {
directory = "%s"
include_state_file = %s
resource_types = [
include_filter_resources = [
"genesyscloud_architect_datatable",
"genesyscloud_architect_datatable_row",
//"genesyscloud_flow",
Expand Down

0 comments on commit a8117d7

Please sign in to comment.