From 315565c6c24bcf90af9a0c85d13ea453364d234f Mon Sep 17 00:00:00 2001 From: adiyaar24 Date: Thu, 4 May 2023 13:58:25 +0530 Subject: [PATCH 1/3] Filter Tests Added --- internal/acctest/acctest.go | 8 +++ .../filters/data_source_filters_test.go | 45 ++++++++++++++ .../platform/filters/resource_filters_test.go | 60 +++++++++++++++++++ 3 files changed, 113 insertions(+) diff --git a/internal/acctest/acctest.go b/internal/acctest/acctest.go index d03ede371..2d698d736 100644 --- a/internal/acctest/acctest.go +++ b/internal/acctest/acctest.go @@ -155,6 +155,14 @@ func AccountLevelResourceImportStateIdFunc(resourceName string) resource.ImportS } } +func AccountFilterImportStateIdFunc(resourceName string) resource.ImportStateIdFunc { + return func(s *terraform.State) (string, error) { + primary := s.RootModule().Resources[resourceName].Primary + id := primary.ID + type_ := primary.Attributes["type"] + return fmt.Sprintf("%s/%s", id, type_), nil + } +} func ProjectFilterImportStateIdFunc(resourceName string) resource.ImportStateIdFunc { return func(s *terraform.State) (string, error) { primary := s.RootModule().Resources[resourceName].Primary diff --git a/internal/service/platform/filters/data_source_filters_test.go b/internal/service/platform/filters/data_source_filters_test.go index b960f5f4d..78131d7b4 100644 --- a/internal/service/platform/filters/data_source_filters_test.go +++ b/internal/service/platform/filters/data_source_filters_test.go @@ -21,6 +21,31 @@ func TestAccDataSourceFilters(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccDataSourceFilters(id, name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "identifier", id), + resource.TestCheckResourceAttr(resourceName, "name", name), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), + ), + }, + }, + }) +} + +func TestAccDataSourceFiltersProjectLevel(t *testing.T) { + + id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(6)) + name := id + resourceName := "data.harness_platform_filters.test" + + resource.UnitTest(t, resource.TestCase{ + PreCheck: func() { acctest.TestAccPreCheck(t) }, + ProviderFactories: acctest.ProviderFactories, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceFiltersProjectLevel(id, name), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "identifier", id), resource.TestCheckResourceAttr(resourceName, "org_id", id), @@ -63,6 +88,26 @@ func TestAccDataSourceFiltersOrgLevel(t *testing.T) { } func testAccDataSourceFilters(id string, name string) string { + return fmt.Sprintf(` + resource "harness_platform_filters" "test" { + identifier = "%[1]s" + name = "%[2]s" + type = "Connector" + filter_properties { + tags = ["foo:bar"] + filter_type = "Connector" + } + filter_visibility = "EveryOne" + } + + data "harness_platform_filters" "test" { + identifier = harness_platform_filters.test.identifier + type = harness_platform_filters.test.type + } +`, id, name) +} + +func testAccDataSourceFiltersProjectLevel(id string, name string) string { return fmt.Sprintf(` resource "harness_platform_organization" "test" { identifier = "%[1]s" diff --git a/internal/service/platform/filters/resource_filters_test.go b/internal/service/platform/filters/resource_filters_test.go index 3a4f0d594..72b15cb15 100644 --- a/internal/service/platform/filters/resource_filters_test.go +++ b/internal/service/platform/filters/resource_filters_test.go @@ -46,6 +46,50 @@ func TestAccResourceFilters(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: acctest.AccountFilterImportStateIdFunc(resourceName), + }, + }, + }) +} + +func TestAccResourceFiltersProjectLevel(t *testing.T) { + + id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(5)) + name := id + updatedName := fmt.Sprintf("%s_updated", name) + resourceName := "harness_platform_filters.test" + + resource.UnitTest(t, resource.TestCase{ + PreCheck: func() { acctest.TestAccPreCheck(t) }, + ProviderFactories: acctest.ProviderFactories, + CheckDestroy: testAccFiltersDestroy(resourceName), + Steps: []resource.TestStep{ + { + Config: testAccResourceFiltersProjectLevel(id, name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", name), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), + ), + }, + { + Config: testAccResourceFiltersProjectLevel(id, updatedName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", updatedName), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), + ), + }, { ResourceName: resourceName, ImportState: true, @@ -152,6 +196,22 @@ func buildField(r *terraform.ResourceState, field string) optional.String { } func testAccResourceFilters(id string, name string) string { + return fmt.Sprintf(` + resource "harness_platform_filters" "test" { + identifier = "%[1]s" + name = "%[2]s" + type = "Connector" + filter_properties { + tags = ["foo:bar"] + filter_type = "Connector" + } + filter_visibility = "EveryOne" + } +`, id, name) +} + + +func testAccResourceFiltersProjectLevel(id string, name string) string { return fmt.Sprintf(` resource "harness_platform_organization" "test" { identifier = "%[1]s" From 9cb0fb566c9ccf928dc7a9c1daaae9047d205ae5 Mon Sep 17 00:00:00 2001 From: adiyaar24 Date: Thu, 4 May 2023 15:03:21 +0530 Subject: [PATCH 2/3] Updated the Documentation to be more clear --- docs/resources/platform_filters.md | 2 +- .../platform/filters/resource_filters.go | 2 +- .../platform/filters/resource_filters_test.go | 190 ++++++++++++++++++ 3 files changed, 192 insertions(+), 2 deletions(-) diff --git a/docs/resources/platform_filters.md b/docs/resources/platform_filters.md index e79fc0276..deea189ed 100644 --- a/docs/resources/platform_filters.md +++ b/docs/resources/platform_filters.md @@ -39,7 +39,7 @@ resource "harness_platform_filters" "test" { ### Optional -- `filter_visibility` (String) This indicates visibility of filter. By default, everyone can view this filter. +- `filter_visibility` (String) This indicates visibility of filter. By default, everyone can view this filter. Can Either be EveryOne or OnlyCreator - `org_id` (String) organization Identifier for the Entity - `project_id` (String) project Identifier for the Entity diff --git a/internal/service/platform/filters/resource_filters.go b/internal/service/platform/filters/resource_filters.go index 87a13798b..59f41520d 100644 --- a/internal/service/platform/filters/resource_filters.go +++ b/internal/service/platform/filters/resource_filters.go @@ -74,7 +74,7 @@ func ResourceFilters() *schema.Resource { }, }, "filter_visibility": { - Description: "This indicates visibility of filter. By default, everyone can view this filter.", + Description: "This indicates visibility of filter. By default, everyone can view this filter. Can Either be EveryOne or OnlyCreator", Type: schema.TypeString, Optional: true, ValidateFunc: validation.StringInSlice([]string{"EveryOne", "OnlyCreator"}, false), diff --git a/internal/service/platform/filters/resource_filters_test.go b/internal/service/platform/filters/resource_filters_test.go index 72b15cb15..9f8b860c9 100644 --- a/internal/service/platform/filters/resource_filters_test.go +++ b/internal/service/platform/filters/resource_filters_test.go @@ -56,6 +56,50 @@ func TestAccResourceFilters(t *testing.T) { }) } +func TestAccResourceFiltersWOnlyCreator(t *testing.T) { + + id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(5)) + name := id + updatedName := fmt.Sprintf("%s_updated", name) + resourceName := "harness_platform_filters.test" + + resource.UnitTest(t, resource.TestCase{ + PreCheck: func() { acctest.TestAccPreCheck(t) }, + ProviderFactories: acctest.ProviderFactories, + CheckDestroy: testAccFiltersDestroy(resourceName), + Steps: []resource.TestStep{ + { + Config: testAccResourceFilterswCreator(id, name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", name), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), + ), + }, + { + Config: testAccResourceFilterswCreator(id, updatedName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", updatedName), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: acctest.AccountFilterImportStateIdFunc(resourceName), + }, + }, + }) +} + func TestAccResourceFiltersProjectLevel(t *testing.T) { id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(5)) @@ -99,6 +143,47 @@ func TestAccResourceFiltersProjectLevel(t *testing.T) { }, }) } +func TestAccResourceFiltersProjectLevelNoFilterVisiblity(t *testing.T) { + + id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(5)) + name := id + updatedName := fmt.Sprintf("%s_updated", name) + resourceName := "harness_platform_filters.test" + + resource.UnitTest(t, resource.TestCase{ + PreCheck: func() { acctest.TestAccPreCheck(t) }, + ProviderFactories: acctest.ProviderFactories, + CheckDestroy: testAccFiltersDestroy(resourceName), + Steps: []resource.TestStep{ + { + Config: testAccResourceFiltersProjectLevelNoFilterVisiblity(id, name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", name), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + ), + }, + { + Config: testAccResourceFiltersProjectLevelNoFilterVisiblity(id, updatedName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", updatedName), + resource.TestCheckResourceAttr(resourceName, "type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "Connector"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: acctest.ProjectFilterImportStateIdFunc(resourceName), + }, + }, + }) +} func TestAccResourceFiltersOrgLevel(t *testing.T) { @@ -144,6 +229,48 @@ func TestAccResourceFiltersOrgLevel(t *testing.T) { }) } +func TestAccResourceFiltersOrgLevelWfFileStore(t *testing.T) { + + id := fmt.Sprintf("%s_%s", t.Name(), utils.RandStringBytes(5)) + name := id + updatedName := fmt.Sprintf("%s_updated", name) + resourceName := "harness_platform_filters.test" + + resource.UnitTest(t, resource.TestCase{ + PreCheck: func() { acctest.TestAccPreCheck(t) }, + ProviderFactories: acctest.ProviderFactories, + CheckDestroy: testAccFiltersOrgLevelDestroy(resourceName), + Steps: []resource.TestStep{ + { + Config: testAccResourceFiltersOrgLevelWFileStore(id, name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", name), + resource.TestCheckResourceAttr(resourceName, "type", "FileStore"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "FileStore"), + ), + }, + { + Config: testAccResourceFiltersOrgLevelWFileStore(id, updatedName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(resourceName, "id", id), + resource.TestCheckResourceAttr(resourceName, "name", updatedName), + resource.TestCheckResourceAttr(resourceName, "type", "FileStore"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.tags.#", "1"), + resource.TestCheckResourceAttr(resourceName, "filter_properties.0.filter_type", "FileStore"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: acctest.OrgFilterImportStateIdFunc(resourceName), + }, + }, + }) +} + func testAccGetResourceFilters(resourceName string, state *terraform.State) (*nextgen.Filter, error) { r := acctest.TestAccGetResource(resourceName, state) c, ctx := acctest.TestAccGetPlatformClientWithContext() @@ -210,6 +337,20 @@ func testAccResourceFilters(id string, name string) string { `, id, name) } +func testAccResourceFilterswCreator(id string, name string) string { + return fmt.Sprintf(` + resource "harness_platform_filters" "test" { + identifier = "%[1]s" + name = "%[2]s" + type = "Connector" + filter_properties { + tags = ["foo:bar"] + filter_type = "Connector" + } + filter_visibility = "OnlyCreator" + } +`, id, name) +} func testAccResourceFiltersProjectLevel(id string, name string) string { return fmt.Sprintf(` @@ -239,6 +380,55 @@ func testAccResourceFiltersProjectLevel(id string, name string) string { } `, id, name) } +func testAccResourceFiltersProjectLevelNoFilterVisiblity(id string, name string) string { + return fmt.Sprintf(` + resource "harness_platform_organization" "test" { + identifier = "%[1]s" + name = "%[2]s" + } + + resource "harness_platform_project" "test" { + identifier = "%[1]s" + name = "%[2]s" + org_id = harness_platform_organization.test.id + color = "#472848" + } + + resource "harness_platform_filters" "test" { + identifier = "%[1]s" + name = "%[2]s" + org_id = harness_platform_project.test.org_id + project_id = harness_platform_project.test.id + type = "Connector" + filter_properties { + tags = ["foo:bar"] + filter_type = "Connector" + } + filter_visibility = "OnlyCreator" + } +`, id, name) +} + +func testAccResourceFiltersOrgLevelWFileStore(id string, name string) string { + return fmt.Sprintf(` + resource "harness_platform_organization" "test" { + identifier = "%[1]s" + name = "%[2]s" + } + + resource "harness_platform_filters" "test" { + identifier = "%[1]s" + name = "%[2]s" + org_id = harness_platform_organization.test.id + type = "FileStore" + filter_properties { + tags = ["foo:bar"] + filter_type = "FileStore" + } + filter_visibility = "OnlyCreator" + } +`, id, name) +} func testAccResourceFiltersOrgLevel(id string, name string) string { return fmt.Sprintf(` From 04198558be60d50048cd7f1af7291945babb4052 Mon Sep 17 00:00:00 2001 From: adiyaar24 Date: Thu, 4 May 2023 19:11:59 +0530 Subject: [PATCH 3/3] Made Filter Visiblity Computed --- docs/resources/platform_filters.md | 2 +- internal/service/platform/filters/resource_filters.go | 3 ++- .../service/platform/filters/resource_filters_test.go | 11 ++--------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/resources/platform_filters.md b/docs/resources/platform_filters.md index deea189ed..5348fd8be 100644 --- a/docs/resources/platform_filters.md +++ b/docs/resources/platform_filters.md @@ -39,7 +39,7 @@ resource "harness_platform_filters" "test" { ### Optional -- `filter_visibility` (String) This indicates visibility of filter. By default, everyone can view this filter. Can Either be EveryOne or OnlyCreator +- `filter_visibility` (String) This indicates visibility of filter. By default, everyone can view this filter. Can either be EveryOne or OnlyCreator - `org_id` (String) organization Identifier for the Entity - `project_id` (String) project Identifier for the Entity diff --git a/internal/service/platform/filters/resource_filters.go b/internal/service/platform/filters/resource_filters.go index 59f41520d..70fdae355 100644 --- a/internal/service/platform/filters/resource_filters.go +++ b/internal/service/platform/filters/resource_filters.go @@ -74,9 +74,10 @@ func ResourceFilters() *schema.Resource { }, }, "filter_visibility": { - Description: "This indicates visibility of filter. By default, everyone can view this filter. Can Either be EveryOne or OnlyCreator", + Description: "This indicates visibility of filter. By default, everyone can view this filter. Can either be EveryOne or OnlyCreator", Type: schema.TypeString, Optional: true, + Computed: true, ValidateFunc: validation.StringInSlice([]string{"EveryOne", "OnlyCreator"}, false), }, }, diff --git a/internal/service/platform/filters/resource_filters_test.go b/internal/service/platform/filters/resource_filters_test.go index 9f8b860c9..435a3e93d 100644 --- a/internal/service/platform/filters/resource_filters_test.go +++ b/internal/service/platform/filters/resource_filters_test.go @@ -90,12 +90,7 @@ func TestAccResourceFiltersWOnlyCreator(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "filter_visibility", "EveryOne"), ), }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateIdFunc: acctest.AccountFilterImportStateIdFunc(resourceName), - }, + }, }) } @@ -403,8 +398,7 @@ func testAccResourceFiltersProjectLevelNoFilterVisiblity(id string, name string) filter_properties { tags = ["foo:bar"] filter_type = "Connector" - } - filter_visibility = "OnlyCreator" + } } `, id, name) } @@ -425,7 +419,6 @@ func testAccResourceFiltersOrgLevelWFileStore(id string, name string) string { tags = ["foo:bar"] filter_type = "FileStore" } - filter_visibility = "OnlyCreator" } `, id, name) }