From 61479054d0e92938eac5db1559af35abfd416f1f Mon Sep 17 00:00:00 2001 From: g-dx Date: Fri, 9 Jun 2023 14:15:34 +0100 Subject: [PATCH 1/2] r/aws_quicksight_data_set: Allow physical_table_map to be optional Fixes #31863 --- .changelog/31863.txt | 3 + internal/service/quicksight/data_set.go | 10 +- internal/service/quicksight/data_set_test.go | 132 +++++++++++++++++++ 3 files changed, 136 insertions(+), 9 deletions(-) create mode 100644 .changelog/31863.txt diff --git a/.changelog/31863.txt b/.changelog/31863.txt new file mode 100644 index 000000000000..3c2291649386 --- /dev/null +++ b/.changelog/31863.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_quicksight_data_set: Allow physical table map to be optional +``` diff --git a/internal/service/quicksight/data_set.go b/internal/service/quicksight/data_set.go index f6ed4ae73ec0..72cf548020e3 100644 --- a/internal/service/quicksight/data_set.go +++ b/internal/service/quicksight/data_set.go @@ -218,7 +218,7 @@ func ResourceDataSet() *schema.Resource { }, "physical_table_map": { Type: schema.TypeSet, - Required: true, + Optional: true, MaxItems: 32, Elem: physicalTableMapSchema(), }, @@ -1644,10 +1644,6 @@ func expandDataSetUntagColumnOperation(tfList []interface{}) *quicksight.UntagCo } func expandDataSetPhysicalTableMap(tfSet *schema.Set) map[string]*quicksight.PhysicalTable { - if tfSet.Len() == 0 { - return nil - } - physicalTableMap := make(map[string]*quicksight.PhysicalTable) for _, v := range tfSet.List() { vMap, ok := v.(map[string]interface{}) @@ -2426,10 +2422,6 @@ func flattenJoinKeyProperties(apiObject *quicksight.JoinKeyProperties) map[strin } func flattenPhysicalTableMap(apiObject map[string]*quicksight.PhysicalTable, resourceSchema *schema.Resource) *schema.Set { - if len(apiObject) == 0 { - return nil - } - var tfList []interface{} for k, v := range apiObject { if v == nil { diff --git a/internal/service/quicksight/data_set_test.go b/internal/service/quicksight/data_set_test.go index 922971d0b7ae..1c786d5f098b 100644 --- a/internal/service/quicksight/data_set_test.go +++ b/internal/service/quicksight/data_set_test.go @@ -453,6 +453,46 @@ func TestAccQuickSightDataSet_tags(t *testing.T) { }) } +func TestAccQuickSightDataSet_noPhysicalTableMap(t *testing.T) { + ctx := acctest.Context(t) + var dataSet quicksight.DataSet + resourceName := "aws_quicksight_data_set.test" + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + rId := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, quicksight.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDataSetDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDataSetConfigNoPhysicalTableMap(rId, rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckDataSetExists(ctx, resourceName, &dataSet), + resource.TestCheckResourceAttr(resourceName, "data_set_id", rId), + acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "quicksight", fmt.Sprintf("dataset/%s", rId)), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttr(resourceName, "import_mode", "SPICE"), + resource.TestCheckResourceAttr(resourceName, "physical_table_map.#", "0"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.#", "3"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.logical_table_map_id", "joined"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.alias", "j"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.source.0.join_instruction.0.right_operand", "right"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.source.0.join_instruction.0.left_operand", "left"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.source.0.join_instruction.0.type", "INNER"), + resource.TestCheckResourceAttr(resourceName, "logical_table_map.0.source.0.join_instruction.0.on_clause", "Column1 = Column2"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func testAccCheckDataSetExists(ctx context.Context, resourceName string, dataSet *quicksight.DataSet) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[resourceName] @@ -1034,3 +1074,95 @@ resource "aws_quicksight_data_set" "test" { } `, rId, rName, key1, value1, key2, value2)) } + +func testAccDataSetConfigNoPhysicalTableMap(rId, rName string) string { + return acctest.ConfigCompose( + testAccDataSetConfigBase( + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + ), + fmt.Sprintf(` +resource "aws_quicksight_data_set" "left" { + data_set_id = %[1]q + name = %[2]q + import_mode = "SPICE" + + physical_table_map { + physical_table_map_id = %[1]q + s3_source { + data_source_arn = aws_quicksight_data_source.test.arn + input_columns { + name = "Column1" + type = "STRING" + } + upload_settings { + format = "JSON" + } + } + } +} + +resource "aws_quicksight_data_set" "right" { + data_set_id = %[3]q + name = %[4]q + import_mode = "SPICE" + + physical_table_map { + physical_table_map_id = %[3]q + s3_source { + data_source_arn = aws_quicksight_data_source.test.arn + input_columns { + name = "Column2" + type = "STRING" + } + upload_settings { + format = "JSON" + } + } + } +} + +resource "aws_quicksight_data_set" "test" { + data_set_id = %[5]q + name = %[6]q + import_mode = "SPICE" + + logical_table_map { + logical_table_map_id = "right" + alias = "r" + source { + data_set_arn = aws_quicksight_data_set.right.arn + } + } + + logical_table_map { + logical_table_map_id = "left" + alias = "l" + source { + data_set_arn = aws_quicksight_data_set.left.arn + } + } + + logical_table_map { + logical_table_map_id = "joined" + alias = "j" + source { + join_instruction { + left_operand = "left" + right_operand = "right" + type = "INNER" + on_clause = "Column1 = Column2" + } + } + } +} +`, + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), + rId, + rName, + ), + ) +} From d3346a3a3b57ba364027328ac88074e24ebb6acf Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Tue, 13 Jun 2023 09:24:27 -0400 Subject: [PATCH 2/2] r/aws_quicksight_data_set(test): reuse config args --- internal/service/quicksight/data_set_test.go | 31 +++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/internal/service/quicksight/data_set_test.go b/internal/service/quicksight/data_set_test.go index 1c786d5f098b..dc1602ce7713 100644 --- a/internal/service/quicksight/data_set_test.go +++ b/internal/service/quicksight/data_set_test.go @@ -1077,18 +1077,15 @@ resource "aws_quicksight_data_set" "test" { func testAccDataSetConfigNoPhysicalTableMap(rId, rName string) string { return acctest.ConfigCompose( - testAccDataSetConfigBase( - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - ), + testAccDataSetConfigBase(rId, rName), fmt.Sprintf(` resource "aws_quicksight_data_set" "left" { - data_set_id = %[1]q - name = %[2]q + data_set_id = "%[1]s-left" + name = "%[2]s-left" import_mode = "SPICE" physical_table_map { - physical_table_map_id = %[1]q + physical_table_map_id = "%[1]s-left" s3_source { data_source_arn = aws_quicksight_data_source.test.arn input_columns { @@ -1103,12 +1100,12 @@ resource "aws_quicksight_data_set" "left" { } resource "aws_quicksight_data_set" "right" { - data_set_id = %[3]q - name = %[4]q + data_set_id = "%[1]s-right" + name = "%[2]s-right" import_mode = "SPICE" physical_table_map { - physical_table_map_id = %[3]q + physical_table_map_id = "%[1]s-right" s3_source { data_source_arn = aws_quicksight_data_source.test.arn input_columns { @@ -1123,8 +1120,8 @@ resource "aws_quicksight_data_set" "right" { } resource "aws_quicksight_data_set" "test" { - data_set_id = %[5]q - name = %[6]q + data_set_id = %[1]q + name = %[2]q import_mode = "SPICE" logical_table_map { @@ -1156,13 +1153,5 @@ resource "aws_quicksight_data_set" "test" { } } } -`, - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - sdkacctest.RandomWithPrefix(acctest.ResourcePrefix), - rId, - rName, - ), - ) +`, rId, rName)) }