From 9e279c3731cbffd35f8175e2b034d00235264f70 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 16:23:47 +0100 Subject: [PATCH 01/16] resources part 4 starts here From 1254cb9e0faddea9f0c76b1a1d7f9decca96ea48 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 16:42:28 +0100 Subject: [PATCH 02/16] Fix object parameter acceptance test setup --- .../object_parameter_acceptance_test.go | 89 +++++++++---------- 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/pkg/resources/object_parameter_acceptance_test.go b/pkg/resources/object_parameter_acceptance_test.go index b03ff6450d..dd1660ab94 100644 --- a/pkg/resources/object_parameter_acceptance_test.go +++ b/pkg/resources/object_parameter_acceptance_test.go @@ -14,15 +14,11 @@ import ( func TestAcc_ObjectParameter(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) - // TODO(SNOW-1528546): Remove after parameter-setting resources are using UNSET in the delete operation. - t.Cleanup(func() { - acc.TestClient().Database.Alter(t, acc.TestClient().Ids.DatabaseId(), &sdk.AlterDatabaseOptions{ - Unset: &sdk.DatabaseUnset{ - UserTaskTimeoutMs: sdk.Bool(true), - }, - }) - }) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -32,9 +28,9 @@ func TestAcc_ObjectParameter(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: objectParameterConfigBasic("USER_TASK_TIMEOUT_MS", "1000", acc.TestDatabaseName), + Config: objectParameterConfigBasic(database.ID(), sdk.DatabaseParameterUserTaskTimeoutMs, "1000"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", "USER_TASK_TIMEOUT_MS"), + resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", string(sdk.DatabaseParameterUserTaskTimeoutMs)), resource.TestCheckResourceAttr("snowflake_object_parameter.p", "value", "1000"), resource.TestCheckResourceAttr("snowflake_object_parameter.p", "on_account", "false"), ), @@ -43,13 +39,26 @@ func TestAcc_ObjectParameter(t *testing.T) { }) } +func objectParameterConfigBasic(databaseId sdk.AccountObjectIdentifier, key sdk.DatabaseParameter, value string) string { + return fmt.Sprintf(` +resource "snowflake_object_parameter" "p" { + key = "%[2]s" + value = "%[3]s" + object_type = "DATABASE" + object_identifier { + name = "%[1]s" + } +} +`, databaseId.Name(), key, value) +} + func TestAcc_ObjectParameterAccount(t *testing.T) { + // TODO [SNOW-2010844]: unskip + t.Skip("Skipping temporarily as it messes with the account level setting.") + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - // TODO(SNOW-1528546): Remove after parameter-setting resources are using UNSET in the delete operation. - t.Cleanup(func() { - acc.TestClient().Parameter.UnsetAccountParameter(t, sdk.AccountParameterDataRetentionTimeInDays) - }) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -59,10 +68,10 @@ func TestAcc_ObjectParameterAccount(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: objectParameterConfigOnAccount("DATA_RETENTION_TIME_IN_DAYS", "0"), + Config: objectParameterConfigOnAccount(sdk.AccountParameterDataRetentionTimeInDays, "5"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", "DATA_RETENTION_TIME_IN_DAYS"), - resource.TestCheckResourceAttr("snowflake_object_parameter.p", "value", "0"), + resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", string(sdk.AccountParameterDataRetentionTimeInDays)), + resource.TestCheckResourceAttr("snowflake_object_parameter.p", "value", "5"), resource.TestCheckResourceAttr("snowflake_object_parameter.p", "on_account", "true"), ), }, @@ -70,8 +79,19 @@ func TestAcc_ObjectParameterAccount(t *testing.T) { }) } +func objectParameterConfigOnAccount(key sdk.AccountParameter, value string) string { + return fmt.Sprintf(` +resource "snowflake_object_parameter" "p" { + key = "%[1]s" + value = "%[2]s" + on_account = true +} +`, key, value) +} + func TestAcc_UserParameter(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) user, userCleanup := acc.TestClient().User.CreateUser(t) t.Cleanup(userCleanup) @@ -85,9 +105,9 @@ func TestAcc_UserParameter(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: userParameterConfigBasic(user.ID(), "ENABLE_UNREDACTED_QUERY_SYNTAX_ERROR", "true"), + Config: userParameterConfigBasic(user.ID(), sdk.UserParameterEnableUnredactedQuerySyntaxError, "true"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", "ENABLE_UNREDACTED_QUERY_SYNTAX_ERROR"), + resource.TestCheckResourceAttr("snowflake_object_parameter.p", "key", string(sdk.UserParameterEnableUnredactedQuerySyntaxError)), resource.TestCheckResourceAttr("snowflake_object_parameter.p", "value", "true"), resource.TestCheckResourceAttr("snowflake_object_parameter.p", "on_account", "false"), ), @@ -96,40 +116,15 @@ func TestAcc_UserParameter(t *testing.T) { }) } -func objectParameterConfigOnAccount(key, value string) string { - s := ` -resource "snowflake_object_parameter" "p" { - key = "%s" - value = "%s" - on_account = true -} -` - return fmt.Sprintf(s, key, value) -} - -func objectParameterConfigBasic(key, value, databaseName string) string { - s := ` -resource "snowflake_object_parameter" "p" { - key = "%s" - value = "%s" - object_type = "DATABASE" - object_identifier { - name = "%s" - } -} -` - return fmt.Sprintf(s, key, value, databaseName) -} - -func userParameterConfigBasic(userId sdk.AccountObjectIdentifier, key string, value string) string { +func userParameterConfigBasic(userId sdk.AccountObjectIdentifier, key sdk.UserParameter, value string) string { return fmt.Sprintf(` resource "snowflake_object_parameter" "p" { key = "%[2]s" value = "%[3]s" object_type = "USER" object_identifier { - name = %[1]s + name = "%[1]s" } } -`, userId.FullyQualifiedName(), key, value) +`, userId.Name(), key, value) } From 32438351ee772f7f49f00790b94ee386a6a74540 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 16:46:26 +0100 Subject: [PATCH 03/16] Fix object renaming acceptance test setup --- .../object_renaming_acceptance_test.go | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/pkg/resources/object_renaming_acceptance_test.go b/pkg/resources/object_renaming_acceptance_test.go index afdbe48536..64df55f069 100644 --- a/pkg/resources/object_renaming_acceptance_test.go +++ b/pkg/resources/object_renaming_acceptance_test.go @@ -161,8 +161,8 @@ func TestAcc_ShallowHierarchy_IsInConfig_RenamedInternally(t *testing.T) { newDatabaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) - databaseConfigModelWithNewId := model.Database("test", newDatabaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) + databaseConfigModelWithNewId := model.DatabaseWithParametersSet("test", newDatabaseId.Name()) var schemaConfigAfterRename string var preApplyChecksAfterRename []plancheck.PlanCheck @@ -243,8 +243,8 @@ func TestAcc_ShallowHierarchy_IsInConfig_RenamedExternally(t *testing.T) { newDatabaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) - databaseConfigModelWithNewId := model.Database("test", newDatabaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) + databaseConfigModelWithNewId := model.DatabaseWithParametersSet("test", newDatabaseId.Name()) var databaseConfigAfterRename string var schemaConfigAfterRename string @@ -308,7 +308,7 @@ func TestAcc_ShallowHierarchy_IsInConfig_RenamedExternally_WithoutDependency_Aft databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) schemaModelConfig := model.Schema("test", databaseId.Name(), schemaName) resource.Test(t, resource.TestCase{ @@ -352,7 +352,7 @@ func TestAcc_ShallowHierarchy_IsInConfig_RenamedExternally_WithoutDependency_Aft databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) schemaModelConfig := model.Schema("test", databaseId.Name(), schemaName) resource.Test(t, resource.TestCase{ @@ -398,8 +398,11 @@ func TestAcc_ShallowHierarchy_IsNotInConfig_RenamedExternally(t *testing.T) { } for _, testCase := range testCases { + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) + t.Run(fmt.Sprintf("TestAcc_ referencing new database name: %t", testCase.IsReferencingNewDatabaseName), func(t *testing.T) { - databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + databaseId := database.ID() newDatabaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaName := acc.TestClient().Ids.Alpha() schemaModelConfig := model.Schema("test", databaseId.Name(), schemaName) @@ -419,10 +422,6 @@ func TestAcc_ShallowHierarchy_IsNotInConfig_RenamedExternally(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - PreConfig: func() { - _, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithIdentifier(t, databaseId) - t.Cleanup(databaseCleanup) - }, Config: config.FromModels(t, schemaModelConfig), }, { @@ -492,8 +491,8 @@ func TestAcc_DeepHierarchy_AreInConfig_DatabaseRenamedInternally(t *testing.T) { schemaName := acc.TestClient().Ids.Alpha() tableName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) - databaseConfigModelWithNewId := model.Database("test", newDatabaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) + databaseConfigModelWithNewId := model.DatabaseWithParametersSet("test", newDatabaseId.Name()) testSteps := []resource.TestStep{ { @@ -563,7 +562,7 @@ func TestAcc_DeepHierarchy_AreInConfig_SchemaRenamedInternally(t *testing.T) { newSchemaName := acc.TestClient().Ids.Alpha() tableName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) testSteps := []resource.TestStep{ { @@ -635,8 +634,8 @@ func TestAcc_DeepHierarchy_AreInConfig_DatabaseRenamedExternally(t *testing.T) { schemaName := acc.TestClient().Ids.Alpha() tableName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) - databaseConfigModelWithNewId := model.Database("test", newDatabaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) + databaseConfigModelWithNewId := model.DatabaseWithParametersSet("test", newDatabaseId.Name()) testSteps := []resource.TestStep{ { @@ -706,7 +705,7 @@ func TestAcc_DeepHierarchy_AreInConfig_SchemaRenamedExternally(t *testing.T) { newSchemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) tableName := acc.TestClient().Ids.Alpha() - databaseConfigModel := model.Database("test", databaseId.Name()) + databaseConfigModel := model.DatabaseWithParametersSet("test", databaseId.Name()) testSteps := []resource.TestStep{ { @@ -762,7 +761,7 @@ func TestAcc_DeepHierarchy_AreNotInConfig_DatabaseRenamedExternally(t *testing.T newDatabaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() tableName := acc.TestClient().Ids.Alpha() - database, databaseCleanup := acc.TestClient().Database.CreateDatabase(t) + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) t.Cleanup(databaseCleanup) // not cleaning up, because the schema will be dropped with the database anyway @@ -816,7 +815,7 @@ func TestAcc_DeepHierarchy_AreNotInConfig_SchemaRenamedExternally(t *testing.T) for _, testCase := range testCases { t.Run(fmt.Sprintf("TestAcc_ use new database after rename: %t", testCase.UseNewSchemaNameAfterRename), func(t *testing.T) { - database, databaseCleanup := acc.TestClient().Database.CreateDatabase(t) + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) t.Cleanup(databaseCleanup) newSchemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(database.ID()) From 778163655f4c023eb49248c6e07e7f1cdedc1a8c Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 16:47:57 +0100 Subject: [PATCH 04/16] Verify object renaming list and sets acceptance test setup --- .../object_renaming_lists_and_sets_acceptance_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/resources/object_renaming_lists_and_sets_acceptance_test.go b/pkg/resources/object_renaming_lists_and_sets_acceptance_test.go index 29b9169580..87ccf15304 100644 --- a/pkg/resources/object_renaming_lists_and_sets_acceptance_test.go +++ b/pkg/resources/object_renaming_lists_and_sets_acceptance_test.go @@ -7,16 +7,16 @@ import ( "regexp" "testing" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" + acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" tfjson "github.com/hashicorp/terraform-json" - "github.com/hashicorp/terraform-plugin-testing/plancheck" - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) From 3e04eca3690d4a225a2e9c38aadf5cad37889271 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 16:56:26 +0100 Subject: [PATCH 05/16] Verify password policy acceptance test setup --- .../password_policy_acceptance_test.go | 78 +++++++++++-------- .../{ => basic}/test.tf | 0 .../{ => basic}/variables.tf | 0 .../noOptionals}/test.tf | 0 .../noOptionals}/variables.tf | 0 .../withMaxAgeDays}/test.tf | 0 .../withMaxAgeDays}/variables.tf | 0 7 files changed, 46 insertions(+), 32 deletions(-) rename pkg/resources/testdata/TestAcc_PasswordPolicy/{ => basic}/test.tf (100%) rename pkg/resources/testdata/TestAcc_PasswordPolicy/{ => basic}/variables.tf (100%) rename pkg/resources/testdata/{TestAcc_PasswordPolicy_noOptionals => TestAcc_PasswordPolicy/noOptionals}/test.tf (100%) rename pkg/resources/testdata/{TestAcc_PasswordPolicy_noOptionals => TestAcc_PasswordPolicy/noOptionals}/variables.tf (100%) rename pkg/resources/testdata/{TestAcc_PasswordPolicy_withMaxAgeDays => TestAcc_PasswordPolicy/withMaxAgeDays}/test.tf (100%) rename pkg/resources/testdata/{TestAcc_PasswordPolicy_withMaxAgeDays => TestAcc_PasswordPolicy/withMaxAgeDays}/variables.tf (100%) diff --git a/pkg/resources/password_policy_acceptance_test.go b/pkg/resources/password_policy_acceptance_test.go index cf978abc3d..a677bbb4ff 100644 --- a/pkg/resources/password_policy_acceptance_test.go +++ b/pkg/resources/password_policy_acceptance_test.go @@ -4,24 +4,30 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-testing/plancheck" - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_PasswordPolicy(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + comment := random.Comment() + m := func(minLength int, maxLength int, minUpperCaseChars int, minLowerCaseChars int, minNumericChars int, minSpecialChars int, minAgeDays int, maxAgeDays int, maxRetries int, lockoutTimeMins int, history int, comment string) map[string]config.Variable { return map[string]config.Variable{ - "name": config.StringVariable(accName), - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), + "name": config.StringVariable(id.Name()), + "database": config.StringVariable(id.DatabaseName()), + "schema": config.StringVariable(id.SchemaName()), "min_length": config.IntegerVariable(minLength), "max_length": config.IntegerVariable(maxLength), "min_upper_case_chars": config.IntegerVariable(minUpperCaseChars), @@ -36,8 +42,8 @@ func TestAcc_PasswordPolicy(t *testing.T) { "comment": config.StringVariable(comment), } } - variables1 := m(10, 30, 2, 3, 4, 5, 6, 7, 8, 9, 10, "this is a test resource") - variables2 := m(20, 50, 1, 2, 3, 4, 5, 6, 7, 8, 9, "this is a test resource") + variables1 := m(10, 30, 2, 3, 4, 5, 6, 7, 8, 9, 10, comment) + variables2 := m(20, 50, 1, 2, 3, 4, 5, 6, 7, 8, 9, comment) variables3 := m(20, 50, 1, 2, 3, 4, 5, 6, 7, 8, 9, "") resource.Test(t, resource.TestCase{ @@ -49,10 +55,12 @@ func TestAcc_PasswordPolicy(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.PasswordPolicy), Steps: []resource.TestStep{ { - ConfigDirectory: config.TestNameDirectory(), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/basic"), ConfigVariables: variables1, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_password_policy.pa", "name", accName), + resource.TestCheckResourceAttr("snowflake_password_policy.pa", "name", id.Name()), + resource.TestCheckResourceAttr("snowflake_password_policy.pa", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_password_policy.pa", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "min_length", "10"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_length", "30"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "min_upper_case_chars", "2"), @@ -64,11 +72,11 @@ func TestAcc_PasswordPolicy(t *testing.T) { resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_retries", "8"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "lockout_time_mins", "9"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "history", "10"), - resource.TestCheckResourceAttr("snowflake_password_policy.pa", "comment", "this is a test resource"), + resource.TestCheckResourceAttr("snowflake_password_policy.pa", "comment", comment), ), }, { - ConfigDirectory: config.TestNameDirectory(), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/basic"), ConfigVariables: variables2, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_password_policy.pa", "min_length", "20"), @@ -82,18 +90,18 @@ func TestAcc_PasswordPolicy(t *testing.T) { resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_retries", "7"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "lockout_time_mins", "8"), resource.TestCheckResourceAttr("snowflake_password_policy.pa", "history", "9"), - resource.TestCheckResourceAttr("snowflake_password_policy.pa", "comment", "this is a test resource"), + resource.TestCheckResourceAttr("snowflake_password_policy.pa", "comment", comment), ), }, { - ConfigDirectory: config.TestNameDirectory(), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/basic"), ConfigVariables: variables3, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_password_policy.pa", "comment", ""), ), }, { - ConfigDirectory: config.TestNameDirectory(), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/basic"), ConfigVariables: variables3, ResourceName: "snowflake_password_policy.pa", ImportState: true, @@ -104,14 +112,17 @@ func TestAcc_PasswordPolicy(t *testing.T) { } func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + oldId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() m := func(maxAgeDays int) map[string]config.Variable { return map[string]config.Variable{ "name": config.StringVariable(oldId.Name()), - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), + "database": config.StringVariable(oldId.DatabaseName()), + "schema": config.StringVariable(oldId.SchemaName()), "max_age_days": config.IntegerVariable(maxAgeDays), } } @@ -129,7 +140,7 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { Steps: []resource.TestStep{ // Creation sets zero properly { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy_withMaxAgeDays"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/withMaxAgeDays"), ConfigVariables: m(0), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_age_days", "0"), @@ -137,7 +148,7 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy_withMaxAgeDays"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/withMaxAgeDays"), ConfigVariables: m(10), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_age_days", "10"), @@ -145,7 +156,7 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { }, // Update sets zero properly { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy_withMaxAgeDays"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/withMaxAgeDays"), ConfigVariables: m(0), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_password_policy.pa", "max_age_days", "0"), @@ -153,11 +164,11 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { }, // Rename + Unsets properly { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy_noOptionals"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/noOptionals"), ConfigVariables: map[string]config.Variable{ "name": config.StringVariable(newId.Name()), - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), + "database": config.StringVariable(newId.DatabaseName()), + "schema": config.StringVariable(newId.SchemaName()), }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ @@ -171,11 +182,11 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy_noOptionals"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_PasswordPolicy/noOptionals"), ConfigVariables: map[string]config.Variable{ "name": config.StringVariable(oldId.Name()), - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), + "database": config.StringVariable(oldId.DatabaseName()), + "schema": config.StringVariable(oldId.SchemaName()), }, ResourceName: "snowflake_password_policy.pa", ImportState: true, @@ -186,9 +197,12 @@ func TestAcc_PasswordPolicyMaxAgeDays(t *testing.T) { } func TestAcc_PasswordPolicy_migrateFromVersion_0_94_1(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_password_policy.pa" + resourceName := "snowflake_password_policy.pa" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -227,8 +241,8 @@ func TestAcc_PasswordPolicy_migrateFromVersion_0_94_1(t *testing.T) { func passwordPolicyBasicConfig(id sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_password_policy" "pa" { - name = "%s" - database = "%s" - schema = "%s" -}`, id.Name(), id.DatabaseName(), id.SchemaName()) + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" +}`, id.DatabaseName(), id.SchemaName(), id.Name()) } diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy/test.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/basic/test.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy/test.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/basic/test.tf diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy/variables.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/basic/variables.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy/variables.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/basic/variables.tf diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy_noOptionals/test.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/noOptionals/test.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy_noOptionals/test.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/noOptionals/test.tf diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy_noOptionals/variables.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/noOptionals/variables.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy_noOptionals/variables.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/noOptionals/variables.tf diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy_withMaxAgeDays/test.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/withMaxAgeDays/test.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy_withMaxAgeDays/test.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/withMaxAgeDays/test.tf diff --git a/pkg/resources/testdata/TestAcc_PasswordPolicy_withMaxAgeDays/variables.tf b/pkg/resources/testdata/TestAcc_PasswordPolicy/withMaxAgeDays/variables.tf similarity index 100% rename from pkg/resources/testdata/TestAcc_PasswordPolicy_withMaxAgeDays/variables.tf rename to pkg/resources/testdata/TestAcc_PasswordPolicy/withMaxAgeDays/variables.tf From 6770319f2102769261a784f8eb291c6383837240 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 17:03:56 +0100 Subject: [PATCH 06/16] Verify pipe acceptance test setup --- pkg/resources/pipe_acceptance_test.go | 57 +++++++++++++++------------ 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/pkg/resources/pipe_acceptance_test.go b/pkg/resources/pipe_acceptance_test.go index de34f99b83..6a575bbf3b 100644 --- a/pkg/resources/pipe_acceptance_test.go +++ b/pkg/resources/pipe_acceptance_test.go @@ -6,13 +6,20 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_Pipe(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + pipeId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -23,10 +30,10 @@ func TestAcc_Pipe(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Pipe), Steps: []resource.TestStep{ { - Config: pipeConfig(id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: pipeConfig(pipeId, tableId, stageId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_pipe.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_pipe.test", "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr("snowflake_pipe.test", "name", pipeId.Name()), + resource.TestCheckResourceAttr("snowflake_pipe.test", "fully_qualified_name", pipeId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_pipe.test", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_pipe.test", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_pipe.test", "comment", "Terraform acceptance test"), @@ -39,44 +46,42 @@ func TestAcc_Pipe(t *testing.T) { } // whitespace in copy_statement matters for the tests, change with caution! -func pipeConfig(name string, databaseName string, schemaName string) string { - s := ` +func pipeConfig(pipeId sdk.SchemaObjectIdentifier, tableId sdk.SchemaObjectIdentifier, stageId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test" { - database = "%s" - schema = "%s" - name = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[4]s" - column { - name = "id" - type = "NUMBER(5,0)" - } + column { + name = "id" + type = "NUMBER(5,0)" + } - column { + column { name = "data" type = "VARCHAR(16)" - } + } } resource "snowflake_stage" "test" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[5]s" comment = "Terraform acceptance test" } - resource "snowflake_pipe" "test" { - database = "%s" - schema = "%s" - name = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" copy_statement = < Date: Thu, 27 Mar 2025 17:09:45 +0100 Subject: [PATCH 07/16] Verify all procedure types acceptance test setups --- pkg/resources/procedure_java_acceptance_test.go | 12 ++++++++++++ .../procedure_javascript_acceptance_test.go | 3 +++ pkg/resources/procedure_python_acceptance_test.go | 3 +++ pkg/resources/procedure_scala_acceptance_test.go | 3 +++ pkg/resources/procedure_sql_acceptance_test.go | 3 +++ 5 files changed, 24 insertions(+) diff --git a/pkg/resources/procedure_java_acceptance_test.go b/pkg/resources/procedure_java_acceptance_test.go index 9e6dd661d1..e67e5d6bb4 100644 --- a/pkg/resources/procedure_java_acceptance_test.go +++ b/pkg/resources/procedure_java_acceptance_test.go @@ -31,6 +31,9 @@ import ( // TODO [SNOW-1348103]: test changes of attributes separately func TestAcc_ProcedureJava_InlineBasic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + className := "TestFunc" funcName := "echoVarchar" argName := "x" @@ -120,6 +123,9 @@ func TestAcc_ProcedureJava_InlineBasic(t *testing.T) { } func TestAcc_ProcedureJava_InlineEmptyArgs(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + className := "TestFunc" funcName := "echoVarchar" returnDataType := testdatatypes.DataTypeVarchar_100 @@ -155,6 +161,9 @@ func TestAcc_ProcedureJava_InlineEmptyArgs(t *testing.T) { } func TestAcc_ProcedureJava_InlineBasicDefaultArg(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + className := "TestFunc" funcName := "echoVarchar" argName := "x" @@ -404,6 +413,9 @@ func TestAcc_ProcedureJava_StagedBasic(t *testing.T) { } func TestAcc_ProcedureJava_AllParameters(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + className := "TestFunc" funcName := "echoVarchar" argName := "x" diff --git a/pkg/resources/procedure_javascript_acceptance_test.go b/pkg/resources/procedure_javascript_acceptance_test.go index 26c4b9bc3d..f4cc77459c 100644 --- a/pkg/resources/procedure_javascript_acceptance_test.go +++ b/pkg/resources/procedure_javascript_acceptance_test.go @@ -23,6 +23,9 @@ import ( ) func TestAcc_ProcedureJavascript_InlineBasic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + argName := "x" dataType := testdatatypes.DataTypeVarchar_100 diff --git a/pkg/resources/procedure_python_acceptance_test.go b/pkg/resources/procedure_python_acceptance_test.go index 2c913bee64..e22fcdee00 100644 --- a/pkg/resources/procedure_python_acceptance_test.go +++ b/pkg/resources/procedure_python_acceptance_test.go @@ -23,6 +23,9 @@ import ( ) func TestAcc_ProcedurePython_InlineBasic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + funcName := "echoVarchar" argName := "x" dataType := testdatatypes.DataTypeVarchar_100 diff --git a/pkg/resources/procedure_scala_acceptance_test.go b/pkg/resources/procedure_scala_acceptance_test.go index bcb56f57a5..e5ffb93429 100644 --- a/pkg/resources/procedure_scala_acceptance_test.go +++ b/pkg/resources/procedure_scala_acceptance_test.go @@ -29,6 +29,9 @@ import ( // TODO [SNOW-1348103]: test changes of attributes separately func TestAcc_ProcedureScala_InlineBasic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + className := "TestFunc" funcName := "echoVarchar" argName := "x" diff --git a/pkg/resources/procedure_sql_acceptance_test.go b/pkg/resources/procedure_sql_acceptance_test.go index 1d7f663248..2a319d6e68 100644 --- a/pkg/resources/procedure_sql_acceptance_test.go +++ b/pkg/resources/procedure_sql_acceptance_test.go @@ -23,6 +23,9 @@ import ( ) func TestAcc_ProcedureSql_InlineBasic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + argName := "x" dataType := testdatatypes.DataTypeVarchar_100 From 0b1f77f98dc89ece79f80129f9d37848de142dda Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 17:16:59 +0100 Subject: [PATCH 08/16] Verify resource monitor acceptance test setup --- .../resource_monitor_acceptance_test.go | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/pkg/resources/resource_monitor_acceptance_test.go b/pkg/resources/resource_monitor_acceptance_test.go index e9469abf4e..699219209a 100644 --- a/pkg/resources/resource_monitor_acceptance_test.go +++ b/pkg/resources/resource_monitor_acceptance_test.go @@ -15,6 +15,7 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" @@ -24,6 +25,9 @@ import ( ) func TestAcc_ResourceMonitor_Basic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModel := model.ResourceMonitor("test", id.Name()) @@ -87,6 +91,9 @@ func TestAcc_ResourceMonitor_Basic(t *testing.T) { } func TestAcc_ResourceMonitor_Complete(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModel := model.ResourceMonitor("test", id.Name()). WithNotifyUsersValue(configvariable.SetVariable(configvariable.StringVariable("JAN_CIESLAK"))). @@ -168,6 +175,9 @@ func TestAcc_ResourceMonitor_Complete(t *testing.T) { } func TestAcc_ResourceMonitor_Updates(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModelNothingSet := model.ResourceMonitor("test", id.Name()) @@ -342,6 +352,9 @@ func TestAcc_ResourceMonitor_Updates(t *testing.T) { } func TestAcc_ResourceMonitor_ExternalChanges(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() startTimestamp := time.Now().Add(time.Hour * 24 * 40).Format("2006-01-02 15:01") @@ -435,6 +448,9 @@ func TestAcc_ResourceMonitor_ExternalChanges(t *testing.T) { // fail, but invalid values would be saved in the state anyway. In the new version, the old values in state will be preserved // because the old values are also stored on the Snowflake side (they weren't altered). func TestAcc_ResourceMonitor_PartialUpdate(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() validTimestamp := time.Now().Add(time.Hour * 24 * 60).Format("2006-01-02 15:01") @@ -486,6 +502,9 @@ func TestAcc_ResourceMonitor_PartialUpdate(t *testing.T) { // Second step is purposely error, because tests TestAcc_ResourceMonitorUpdateNotifyUsers and TestAcc_ResourceMonitorNotifyUsers are still skipped. // It can be fixed with them. func TestAcc_ResourceMonitor_issue2167(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configNoUsers := model.ResourceMonitor("test", id.Name()).WithNotifyUsersValue(config.EmptyListVariable()) configWithNonExistingUser := model.ResourceMonitor("test", id.Name()).WithNotifyUsersValue(configvariable.SetVariable(configvariable.StringVariable("non_existing_user"))) @@ -514,6 +533,9 @@ func TestAcc_ResourceMonitor_issue2167(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/1990 is fixed func TestAcc_ResourceMonitor_Issue1990_RemovingResourceMonitorOutsideOfTerraform(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModel := model.ResourceMonitor("test", id.Name()) @@ -578,6 +600,9 @@ func TestAcc_ResourceMonitor_Issue1990_RemovingResourceMonitorOutsideOfTerraform // https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/1754 // are fixed and errors are more meaningful for the user func TestAcc_ResourceMonitor_Issue_TimestampInfinitePlan(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModel := model.ResourceMonitor("test", id.Name()) configModelWithDateStartTimestamp := model.ResourceMonitor("test", id.Name()). @@ -661,6 +686,9 @@ func TestAcc_ResourceMonitor_Issue_TimestampInfinitePlan(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/1500 is fixed and errors are more meaningful for the user func TestAcc_ResourceMonitor_Issue1500_CreatingWithOnlyTriggers(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModel := model.ResourceMonitor("test", id.Name()). WithNotifyTriggersValue(configvariable.SetVariable( @@ -702,6 +730,9 @@ func TestAcc_ResourceMonitor_Issue1500_CreatingWithOnlyTriggers(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/1500 is fixed and errors are more meaningful for the user func TestAcc_ResourceMonitor_Issue1500_AlteringWithOnlyTriggers(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModelWithCreditQuota := model.ResourceMonitor("test", id.Name()). @@ -791,6 +822,9 @@ func TestAcc_ResourceMonitor_Issue1500_AlteringWithOnlyTriggers(t *testing.T) { } func TestAcc_ResourceMonitor_RemovingAllTriggers(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() configModelWithNotifyTriggers := model.ResourceMonitor("test", id.Name()). @@ -893,8 +927,15 @@ func TestAcc_ResourceMonitor_RemovingAllTriggers(t *testing.T) { // proves that fields that were present in the previous versions are not kept in the state after the upgrade func TestAcc_ResourceMonitor_SetForWarehouse(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + newVersionModel := model.ResourceMonitor("test", id.Name()). + WithCreditQuota(100). + WithSuspendTrigger(100) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -925,16 +966,10 @@ resource "snowflake_resource_monitor" "test" { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: fmt.Sprintf(` -resource "snowflake_resource_monitor" "test" { - name = "%s" - credit_quota = 100 - suspend_trigger = 100 -} -`, id.Name()), + Config: config.FromModels(t, newVersionModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckNoResourceAttr("snowflake_resource_monitor.test", "warehouses"), - resource.TestCheckNoResourceAttr("snowflake_resource_monitor.test", "warehouses.#"), + resource.TestCheckNoResourceAttr(newVersionModel.ResourceReference(), "warehouses"), + resource.TestCheckNoResourceAttr(newVersionModel.ResourceReference(), "warehouses.#"), ), }, }, From 127cc5d0492e739e3fc0d482f091f8d1eea5cbfb Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 17:49:01 +0100 Subject: [PATCH 09/16] Verify row access policy acceptance test setup --- .../row_access_policy_acceptance_test.go | 249 ++++++++++-------- 1 file changed, 134 insertions(+), 115 deletions(-) diff --git a/pkg/resources/row_access_policy_acceptance_test.go b/pkg/resources/row_access_policy_acceptance_test.go index 1df2538d8f..8cd7045a60 100644 --- a/pkg/resources/row_access_policy_acceptance_test.go +++ b/pkg/resources/row_access_policy_acceptance_test.go @@ -6,23 +6,29 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceassert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" - tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_RowAccessPolicy(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" + comment := random.Comment() + newComment := random.Comment() body := "case when current_role() in ('ANALYST') then true else false end" changedBody := "case when current_role() in ('CHANGED') then true else false end" @@ -46,7 +52,17 @@ func TestAcc_RowAccessPolicy(t *testing.T) { Type: sdk.DataTypeTimestampNTZ, }, } - policyModel := model.RowAccessPolicy("test", argument, body, id.DatabaseName(), id.Name(), id.SchemaName()).WithComment("Terraform acceptance test") + + policyModel := model.RowAccessPolicy("test", argument, body, id.DatabaseName(), id.Name(), id.SchemaName()). + WithComment(comment) + changedPolicyModel := model.RowAccessPolicy("test", argument, changedBody, id.DatabaseName(), id.Name(), id.SchemaName()). + WithComment(newComment) + changedArgumentPolicyModel := model.RowAccessPolicy("test", argument, changedBody, id.DatabaseName(), id.Name(), id.SchemaName()). + WithComment(newComment). + WithArgument(changedArgument) + noCommentPolicyModel := model.RowAccessPolicy("test", argument, changedBody, id.DatabaseName(), id.Name(), id.SchemaName()). + WithComment(""). + WithArgument(changedArgument) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -59,15 +75,15 @@ func TestAcc_RowAccessPolicy(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("Terraform acceptance test"). + HasCommentString(comment). HasBodyString(body). HasArguments(argument), - resourceshowoutputassert.RowAccessPolicyShowOutput(t, resourceName). + resourceshowoutputassert.RowAccessPolicyShowOutput(t, policyModel.ResourceReference()). HasCreatedOnNotEmpty(). HasDatabaseName(id.DatabaseName()). HasKind(string(sdk.PolicyKindRowAccessPolicy)). @@ -76,27 +92,27 @@ func TestAcc_RowAccessPolicy(t *testing.T) { HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"). HasSchemaName(id.SchemaName()). - HasComment("Terraform acceptance test"), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.body", body)), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.return_type", "BOOLEAN")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.#", "2")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.0.name", "A")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.0.type", string(sdk.DataTypeVARCHAR))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.1.name", "B")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.1.type", string(sdk.DataTypeVARCHAR))), + HasComment(comment), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.body", body)), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.return_type", "BOOLEAN")), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.signature.#", "2")), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.signature.0.name", "A")), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.signature.0.type", string(sdk.DataTypeVARCHAR))), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.signature.1.name", "B")), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "describe_output.0.signature.1.type", string(sdk.DataTypeVARCHAR))), ), }, // change comment and expression { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel.WithBody(changedBody).WithComment("Terraform acceptance test - changed comment")), - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, changedPolicyModel), + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, changedPolicyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("Terraform acceptance test - changed comment"). + HasCommentString(newComment). HasBodyString(changedBody). HasArguments(argument), ), @@ -104,13 +120,13 @@ func TestAcc_RowAccessPolicy(t *testing.T) { // change signature { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel.WithArgument(changedArgument)), - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, changedArgumentPolicyModel), + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, changedArgumentPolicyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("Terraform acceptance test - changed comment"). + HasCommentString(newComment). HasBodyString(changedBody). HasArguments(changedArgument), ), @@ -118,7 +134,7 @@ func TestAcc_RowAccessPolicy(t *testing.T) { // external change on signature { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, changedArgumentPolicyModel), PreConfig: func() { arg := sdk.NewCreateRowAccessPolicyArgsRequest("A", sdk.DataTypeBoolean) createRequest := sdk.NewCreateRowAccessPolicyRequest(id, []sdk.CreateRowAccessPolicyArgsRequest{*arg}, "case when current_role() in ('ANALYST') then false else true end") @@ -126,15 +142,15 @@ func TestAcc_RowAccessPolicy(t *testing.T) { }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, changedArgumentPolicyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("Terraform acceptance test - changed comment"). + HasCommentString(newComment). HasBodyString(changedBody). HasArguments(changedArgument), ), @@ -142,34 +158,34 @@ func TestAcc_RowAccessPolicy(t *testing.T) { // external change on body { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, changedArgumentPolicyModel), PreConfig: func() { acc.TestClient().RowAccessPolicy.Alter(t, *sdk.NewAlterRowAccessPolicyRequest(id).WithSetBody(sdk.Pointer("case when current_role() in ('EXTERNAL') then false else true end"))) }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, changedArgumentPolicyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("Terraform acceptance test - changed comment"). + HasCommentString(newComment). HasBodyString(changedBody). HasArguments(changedArgument), ), }, { - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), - ResourceName: resourceName, + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, changedArgumentPolicyModel), + ResourceName: policyModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, // unset comment { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/complete"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel.WithComment("")), + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, noCommentPolicyModel), PreConfig: func() { acc.TestClient().RowAccessPolicy.Alter(t, *sdk.NewAlterRowAccessPolicyRequest(id).WithSetBody(sdk.Pointer("case when current_role() in ('EXTERNAL') then false else true end"))) }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, noCommentPolicyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -181,8 +197,8 @@ func TestAcc_RowAccessPolicy(t *testing.T) { }, // IMPORT { - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), - ResourceName: resourceName, + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, noCommentPolicyModel), + ResourceName: noCommentPolicyModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -192,8 +208,10 @@ func TestAcc_RowAccessPolicy(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2053 is fixed func TestAcc_RowAccessPolicy_Issue2053(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" body := "case when current_role() in ('ANALYST') then true else false end" policyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ { @@ -201,6 +219,7 @@ func TestAcc_RowAccessPolicy_Issue2053(t *testing.T) { Type: sdk.DataTypeVARCHAR, }, }, body, id.DatabaseName(), id.Name(), id.SchemaName()) + resource.Test(t, resource.TestCase{ TerraformVersionChecks: []tfversion.TerraformVersionCheck{ tfversion.RequireAbove(tfversion.Version1_5_0), @@ -216,14 +235,14 @@ func TestAcc_RowAccessPolicy_Issue2053(t *testing.T) { }, }, // these configs have "weird" format on purpose - to test against handling new lines during diff correctly - Config: rowAccessPolicy_v0_95_0_WithHeredoc(id, ` case + Config: rowAccessPolicyV0950WithHeredoc(id, ` case when current_role() in ('ANALYST') then true else false end `), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionUpdate), }, }, ExpectNonEmptyPlan: true, @@ -235,10 +254,10 @@ func TestAcc_RowAccessPolicy_Issue2053(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasBodyString(`case when current_role() in ('ANALYST') then true @@ -250,17 +269,41 @@ end`), }) } +func rowAccessPolicyV0950WithHeredoc(id sdk.SchemaObjectIdentifier, expr string) string { + return fmt.Sprintf(` +resource "snowflake_row_access_policy" "test" { + name = "%s" + database = "%s" + schema = "%s" + signature = { + A = "VARCHAR", + } + row_access_expression = <<-EOT +%s +EOT +}`, id.Name(), id.DatabaseName(), id.SchemaName(), expr) +} + func TestAcc_RowAccessPolicy_Rename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" body := "case when current_role() in ('ANALYST') then true else false end" + policyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ { Name: "a", Type: sdk.DataTypeVARCHAR, }, }, body, id.DatabaseName(), id.Name(), id.SchemaName()) + renamedPolicyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ + { + Name: "a", + Type: sdk.DataTypeVARCHAR, + }, + }, body, newId.DatabaseName(), newId.Name(), newId.SchemaName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -273,7 +316,7 @@ func TestAcc_RowAccessPolicy_Rename(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/basic"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasFullyQualifiedNameString(id.FullyQualifiedName()), ), @@ -281,13 +324,13 @@ func TestAcc_RowAccessPolicy_Rename(t *testing.T) { // rename { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/basic"), - ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel.WithName(newId.Name())), + ConfigVariables: tfconfig.ConfigVariablesFromModel(t, renamedPolicyModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(renamedPolicyModel.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, renamedPolicyModel.ResourceReference()). HasNameString(newId.Name()). HasFullyQualifiedNameString(newId.FullyQualifiedName()), ), @@ -296,55 +339,10 @@ func TestAcc_RowAccessPolicy_Rename(t *testing.T) { }) } -func rowAccessPolicy_v0_95_0(id sdk.SchemaObjectIdentifier, expr string) string { - return fmt.Sprintf(` -resource "snowflake_row_access_policy" "test" { - name = "%s" - database = "%s" - schema = "%s" - signature = { - A = "VARCHAR", - b = "VARCHAR", - } - row_access_expression = "%s" -}`, id.Name(), id.DatabaseName(), id.SchemaName(), expr) -} - -func rowAccessPolicy_v0_95_0_WithHeredoc(id sdk.SchemaObjectIdentifier, expr string) string { - return fmt.Sprintf(` -resource "snowflake_row_access_policy" "test" { - name = "%s" - database = "%s" - schema = "%s" - signature = { - A = "VARCHAR", - } - row_access_expression = <<-EOT -%s -EOT -}`, id.Name(), id.DatabaseName(), id.SchemaName(), expr) -} - -func rowAccessPolicy_v0_96_0(id sdk.SchemaObjectIdentifier) string { - return fmt.Sprintf(` -resource "snowflake_row_access_policy" "test" { - name = "%s" - database = "%s" - schema = "%s" - argument { - name = "A" - type = "VARCHAR" - } - row_access_expression = <<-EOT - case - when current_role() in ('ANALYST') then true - else false - end -EOT -}`, id.Name(), id.DatabaseName(), id.SchemaName()) -} - func TestAcc_RowAccessPolicy_InvalidDataType(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() body := "case when current_role() in ('ANALYST') then true else false end" @@ -354,6 +352,7 @@ func TestAcc_RowAccessPolicy_InvalidDataType(t *testing.T) { Type: "invalid-type", }, }, body, id.DatabaseName(), id.Name(), id.SchemaName()) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -371,8 +370,10 @@ func TestAcc_RowAccessPolicy_InvalidDataType(t *testing.T) { } func TestAcc_RowAccessPolicy_DataTypeAliases(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" body := "case when current_role() in ('ANALYST') then true else false end" policyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ { @@ -391,7 +392,7 @@ func TestAcc_RowAccessPolicy_DataTypeAliases(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_RowAccessPolicy/basic"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasArguments([]sdk.TableColumnSignature{ { @@ -406,8 +407,10 @@ func TestAcc_RowAccessPolicy_DataTypeAliases(t *testing.T) { } func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_LowercaseArgName(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" body := "case when current_role() in ('ANALYST') then true else false end" policyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ { @@ -434,22 +437,22 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_LowercaseArgName(t *testi Source: "Snowflake-Labs/snowflake", }, }, - Config: rowAccessPolicy_v0_95_0(id, body), + Config: rowAccessPolicyV0950(id, body), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ // expect change - arg name is lower case which causes a diff - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()), - assert.Check(resource.TestCheckResourceAttr(resourceName, "row_access_expression", body)), - assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", string(sdk.DataTypeVARCHAR))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", string(sdk.DataTypeVARCHAR))), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "row_access_expression", body)), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "signature.A", string(sdk.DataTypeVARCHAR))), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "signature.B", string(sdk.DataTypeVARCHAR))), ), }, { @@ -459,13 +462,13 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_LowercaseArgName(t *testi ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -488,8 +491,10 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_LowercaseArgName(t *testi } func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_UppercaseArgName(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_row_access_policy.test" body := "case when current_role() in ('ANALYST') then true else false end" policyModel := model.RowAccessPolicy("test", []sdk.TableColumnSignature{ { @@ -516,22 +521,22 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_UppercaseArgName(t *testi Source: "Snowflake-Labs/snowflake", }, }, - Config: rowAccessPolicy_v0_95_0(id, body), + Config: rowAccessPolicyV0950(id, body), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ // expect change - arg name is lower case which causes a diff - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()), - assert.Check(resource.TestCheckResourceAttr(resourceName, "row_access_expression", body)), - assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", string(sdk.DataTypeVARCHAR))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", string(sdk.DataTypeVARCHAR))), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "row_access_expression", body)), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "signature.A", string(sdk.DataTypeVARCHAR))), + assert.Check(resource.TestCheckResourceAttr(policyModel.ResourceReference(), "signature.B", string(sdk.DataTypeVARCHAR))), ), }, { @@ -541,10 +546,10 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_UppercaseArgName(t *testi ConfigVariables: tfconfig.ConfigVariablesFromModel(t, policyModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(policyModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, - Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, resourceName). + Check: assertThat(t, resourceassert.RowAccessPolicyResource(t, policyModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -565,3 +570,17 @@ func TestAcc_RowAccessPolicy_migrateFromVersion_0_95_0_UppercaseArgName(t *testi }, }) } + +func rowAccessPolicyV0950(id sdk.SchemaObjectIdentifier, expr string) string { + return fmt.Sprintf(` +resource "snowflake_row_access_policy" "test" { + name = "%s" + database = "%s" + schema = "%s" + signature = { + A = "VARCHAR", + b = "VARCHAR", + } + row_access_expression = "%s" +}`, id.Name(), id.DatabaseName(), id.SchemaName(), expr) +} From 700d198c7f508788b207731dd5647248f56ddfa8 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 27 Mar 2025 18:42:16 +0100 Subject: [PATCH 10/16] Verify saml2 acceptance test setup --- .../saml2_integration_acceptance_test.go | 1251 ++++++++--------- .../TestAcc_Saml2Integration/basic/test.tf | 7 - .../basic/variables.tf | 15 - .../TestAcc_Saml2Integration/complete/test.tf | 19 - .../complete/variables.tf | 52 - .../TestAcc_Saml2Integration/invalid/test.tf | 8 - .../invalid/variables.tf | 18 - .../non_zero_values/test.tf | 11 - .../non_zero_values/variables.tf | 15 - .../recreates/test.tf | 12 - .../recreates/variables.tf | 30 - .../zero_values/test.tf | 11 - .../zero_values/variables.tf | 15 - 13 files changed, 605 insertions(+), 859 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/complete/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/complete/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/invalid/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/invalid/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/non_zero_values/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/non_zero_values/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/recreates/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/recreates/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/zero_values/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Saml2Integration/zero_values/variables.tf diff --git a/pkg/resources/saml2_integration_acceptance_test.go b/pkg/resources/saml2_integration_acceptance_test.go index 4493a6a248..933646f065 100644 --- a/pkg/resources/saml2_integration_acceptance_test.go +++ b/pkg/resources/saml2_integration_acceptance_test.go @@ -2,71 +2,62 @@ package resources_test import ( "fmt" - "maps" "regexp" "strings" "testing" + acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" resourcehelpers "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" - r "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" + tfjson "github.com/hashicorp/terraform-json" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" - - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/importchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - - tfjson "github.com/hashicorp/terraform-json" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_Saml2Integration_basic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() issuer, issuer2 := acc.TestClient().Ids.Alpha(), acc.TestClient().Ids.Alpha() cert, cert2 := random.GenerateX509(t), random.GenerateX509(t) - validUrl, validUrl2 := "http://example.com", "http://example2.com" + validUrl, validUrl2 := "https://example.com", "https://example2.com" acsURL := acc.TestClient().Context.ACSURL(t) issuerURL := acc.TestClient().Context.IssuerURL(t) + comment := random.Comment() - m := func(issuer, provider, ssoUrl, x509Cert string, complete bool, unset bool) map[string]config.Variable { - c := map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "saml2_issuer": config.StringVariable(issuer), - "saml2_provider": config.StringVariable(provider), - "saml2_sso_url": config.StringVariable(ssoUrl), - "saml2_x509_cert": config.StringVariable(x509Cert), - } - if complete { - c["enabled"] = config.BoolVariable(true) - c["comment"] = config.StringVariable("foo") - c["saml2_enable_sp_initiated"] = config.BoolVariable(true) - c["saml2_force_authn"] = config.BoolVariable(true) - c["saml2_post_logout_redirect_url"] = config.StringVariable(validUrl) - c["saml2_requested_nameid_format"] = config.StringVariable(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)) - c["saml2_sign_request"] = config.BoolVariable(true) - // TODO(SNOW-1479617): set saml2_snowflake_x509_cert - c["saml2_snowflake_acs_url"] = config.StringVariable(acsURL) - c["saml2_snowflake_issuer_url"] = config.StringVariable(issuerURL) - c["saml2_sp_initiated_login_page_label"] = config.StringVariable("foo") - c["allowed_email_patterns"] = config.ListVariable(config.StringVariable("^(.+dev)@example.com$")) - c["allowed_user_domains"] = config.ListVariable(config.StringVariable("example.com")) - } - // When unsetting, we have to keep those to prevent conditional force new being triggered - if unset { - c["saml2_snowflake_acs_url"] = config.StringVariable(acsURL) - c["saml2_snowflake_issuer_url"] = config.StringVariable(issuerURL) - c["saml2_sp_initiated_login_page_label"] = config.StringVariable("foo") - c["allowed_email_patterns"] = config.ListVariable(config.StringVariable("^(.+dev)@example.com$")) - c["allowed_user_domains"] = config.ListVariable(config.StringVariable("example.com")) - } - return c - } + basicModel := model.Saml2SecurityIntegration("test", id.Name(), issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert) + // TODO(SNOW-1479617): set saml2_snowflake_x509_cert + completeModel := model.Saml2SecurityIntegration("test", id.Name(), issuer2, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl2, cert2). + WithEnabled(r.BooleanTrue). + WithComment(comment). + WithSaml2SsoUrl(validUrl2). + WithSaml2EnableSpInitiated(r.BooleanTrue). + WithSaml2ForceAuthn(r.BooleanTrue). + WithSaml2PostLogoutRedirectUrl(validUrl). + WithSaml2RequestedNameidFormat(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)). + WithSaml2SignRequest(r.BooleanTrue). + WithSaml2SnowflakeAcsUrl(acsURL). + WithSaml2SnowflakeIssuerUrl(issuerURL). + WithSaml2SpInitiatedLoginPageLabel("foo"). + WithAllowedEmailPatterns("^(.+dev)@example.com$"). + WithAllowedUserDomains("example.com") + recreatesModel := model.Saml2SecurityIntegration("test", id.Name(), issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert). + WithSaml2SnowflakeAcsUrl(acsURL). + WithSaml2SnowflakeIssuerUrl(issuerURL). + WithSaml2SpInitiatedLoginPageLabel("foo"). + WithAllowedEmailPatterns("^(.+dev)@example.com$"). + WithAllowedUserDomains("example.com") resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -78,63 +69,61 @@ func TestAcc_Saml2Integration_basic(t *testing.T) { Steps: []resource.TestStep{ // create with empty optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/basic"), - ConfigVariables: m(issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert, false, false), + Config: accconfig.FromModels(t, basicModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "enabled", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_issuer", issuer), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sso_url", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_x509_cert", cert), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "saml2_sp_initiated_login_page_label"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_enable_sp_initiated", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sign_request", r.BooleanDefault), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "saml2_requested_nameid_format"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_force_authn", r.BooleanDefault), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_issuer_url"), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_acs_url"), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains"), - resource.TestCheckNoResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "comment", ""), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_issuer.0.value", issuer), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sso_url.0.value", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_x509_cert.0.value", cert), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sp_initiated_login_page_label.0.value", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_enable_sp_initiated.0.value", "false"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_x509_cert.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sign_request.0.value", "false"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_requested_nameid_format.0.value", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_post_logout_redirect_url.0.value", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_force_authn.0.value", "false"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_issuer_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_acs_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_metadata.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_digest_methods_used.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_signature_methods_used.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_user_domains.0.value", "[]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_email_patterns.0.value", "[]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.comment.0.value", ""), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.enabled", "false"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.comment", ""), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "show_output.0.created_on"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "enabled", r.BooleanDefault), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_issuer", issuer), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_sso_url", validUrl), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_x509_cert", cert), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "saml2_sp_initiated_login_page_label"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_enable_sp_initiated", r.BooleanDefault), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_sign_request", r.BooleanDefault), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "saml2_requested_nameid_format"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_post_logout_redirect_url", ""), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "saml2_force_authn", r.BooleanDefault), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "saml2_snowflake_issuer_url"), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "saml2_snowflake_acs_url"), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "allowed_user_domains"), + resource.TestCheckNoResourceAttr(basicModel.ResourceReference(), "allowed_email_patterns"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "comment", ""), + + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_issuer.0.value", issuer), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_sso_url.0.value", validUrl), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_x509_cert.0.value", cert), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_sp_initiated_login_page_label.0.value", ""), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_enable_sp_initiated.0.value", "false"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_snowflake_x509_cert.0.value"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_sign_request.0.value", "false"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_requested_nameid_format.0.value", ""), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_post_logout_redirect_url.0.value", ""), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.saml2_force_authn.0.value", "false"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_snowflake_issuer_url.0.value"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_snowflake_acs_url.0.value"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_snowflake_metadata.0.value"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_digest_methods_used.0.value"), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "describe_output.0.saml2_signature_methods_used.0.value"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.allowed_user_domains.0.value", "[]"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.allowed_email_patterns.0.value", "[]"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "describe_output.0.comment.0.value", ""), + + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.0.enabled", "false"), + resource.TestCheckResourceAttr(basicModel.ResourceReference(), "show_output.0.comment", ""), + resource.TestCheckResourceAttrSet(basicModel.ResourceReference(), "show_output.0.created_on"), ), }, // import - without optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/basic"), - ConfigVariables: m(issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert, false, false), - ResourceName: "snowflake_saml2_integration.test", - ImportState: true, + Config: accconfig.FromModels(t, basicModel), + ResourceName: basicModel.ResourceReference(), + ImportState: true, ImportStateCheck: importchecks.ComposeAggregateImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "name", id.Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "enabled", "false"), @@ -157,65 +146,63 @@ func TestAcc_Saml2Integration_basic(t *testing.T) { }, // set optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/complete"), - ConfigVariables: m(issuer2, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl2, cert2, true, false), + Config: accconfig.FromModels(t, completeModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "enabled", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_issuer", issuer2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sso_url", validUrl2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_x509_cert", cert2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sp_initiated_login_page_label", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_enable_sp_initiated", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sign_request", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_requested_nameid_format", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_force_authn", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_issuer_url", issuerURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_acs_url", acsURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.0", "example.com"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.0", "^(.+dev)@example.com$"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_issuer.0.value", issuer2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sso_url.0.value", validUrl2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_x509_cert.0.value", cert2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_enable_sp_initiated.0.value", "true"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_x509_cert.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sign_request.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_post_logout_redirect_url.0.value", "http://example.com"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_force_authn.0.value", "true"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_issuer_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_acs_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_metadata.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_digest_methods_used.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_signature_methods_used.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_user_domains.0.value", "[example.com]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.comment.0.value", "foo"), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "show_output.0.created_on"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "enabled", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_issuer", issuer2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sso_url", validUrl2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_x509_cert", cert2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sp_initiated_login_page_label", "foo"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_enable_sp_initiated", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sign_request", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_requested_nameid_format", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_post_logout_redirect_url", validUrl), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_force_authn", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_snowflake_issuer_url", issuerURL), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_snowflake_acs_url", acsURL), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_user_domains.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_user_domains.0", "example.com"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_email_patterns.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_email_patterns.0", "^(.+dev)@example.com$"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_issuer.0.value", issuer2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sso_url.0.value", validUrl2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_x509_cert.0.value", cert2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_enable_sp_initiated.0.value", "true"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_x509_cert.0.value"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sign_request.0.value", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_post_logout_redirect_url.0.value", validUrl), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_force_authn.0.value", "true"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_issuer_url.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_acs_url.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_metadata.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_digest_methods_used.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_signature_methods_used.0.value"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.allowed_user_domains.0.value", "[example.com]"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.comment.0.value", comment), + + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "show_output.0.created_on"), ), }, // import - complete { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/complete"), - ConfigVariables: m(issuer2, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl2, cert2, true, false), - ResourceName: "snowflake_saml2_integration.test", - ImportState: true, + Config: accconfig.FromModels(t, completeModel), + ResourceName: completeModel.ResourceReference(), + ImportState: true, ImportStateCheck: importchecks.ComposeAggregateImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "name", id.Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "enabled", "true"), @@ -235,13 +222,12 @@ func TestAcc_Saml2Integration_basic(t *testing.T) { importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "allowed_user_domains.0", "example.com"), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "allowed_email_patterns.#", "1"), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "allowed_email_patterns.0", "^(.+dev)@example.com$"), - importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "comment", "foo"), + importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "comment", comment), ), }, // change values externally { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/complete"), - ConfigVariables: m(issuer2, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl2, cert2, true, false), + Config: accconfig.FromModels(t, completeModel), PreConfig: func() { acc.TestClient().SecurityIntegration.UpdateSaml2(t, sdk.NewAlterSaml2SecurityIntegrationRequest(id). WithUnset(*sdk.NewSaml2IntegrationUnsetRequest(). @@ -252,161 +238,140 @@ func TestAcc_Saml2Integration_basic(t *testing.T) { }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.ExpectDrift("snowflake_saml2_integration.test", "saml2_requested_nameid_format", sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress))), - planchecks.ExpectDrift("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", sdk.String(validUrl), sdk.String("")), - planchecks.ExpectDrift("snowflake_saml2_integration.test", "saml2_force_authn", sdk.String("true"), sdk.String("false")), - planchecks.ExpectDrift("snowflake_saml2_integration.test", "comment", sdk.String("foo"), sdk.String("")), - - planchecks.ExpectChange("snowflake_saml2_integration.test", "saml2_requested_nameid_format", tfjson.ActionUpdate, sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress)), sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified))), - planchecks.ExpectChange("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", tfjson.ActionUpdate, sdk.String(""), sdk.String(validUrl)), - planchecks.ExpectChange("snowflake_saml2_integration.test", "saml2_force_authn", tfjson.ActionUpdate, sdk.String("false"), sdk.String("true")), - planchecks.ExpectChange("snowflake_saml2_integration.test", "comment", tfjson.ActionUpdate, sdk.String(""), sdk.String("foo")), + planchecks.ExpectDrift(completeModel.ResourceReference(), "saml2_requested_nameid_format", sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress))), + planchecks.ExpectDrift(completeModel.ResourceReference(), "saml2_post_logout_redirect_url", sdk.String(validUrl), sdk.String("")), + planchecks.ExpectDrift(completeModel.ResourceReference(), "saml2_force_authn", sdk.String("true"), sdk.String("false")), + planchecks.ExpectDrift(completeModel.ResourceReference(), "comment", sdk.String(comment), sdk.String("")), + + planchecks.ExpectChange(completeModel.ResourceReference(), "saml2_requested_nameid_format", tfjson.ActionUpdate, sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress)), sdk.String(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified))), + planchecks.ExpectChange(completeModel.ResourceReference(), "saml2_post_logout_redirect_url", tfjson.ActionUpdate, sdk.String(""), sdk.String(validUrl)), + planchecks.ExpectChange(completeModel.ResourceReference(), "saml2_force_authn", tfjson.ActionUpdate, sdk.String("false"), sdk.String("true")), + planchecks.ExpectChange(completeModel.ResourceReference(), "comment", tfjson.ActionUpdate, sdk.String(""), sdk.String(comment)), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "enabled", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_issuer", issuer2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sso_url", validUrl2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_x509_cert", cert2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sp_initiated_login_page_label", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_enable_sp_initiated", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sign_request", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_requested_nameid_format", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_force_authn", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_issuer_url", issuerURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_acs_url", acsURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.0", "example.com"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.0", "^(.+dev)@example.com$"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_issuer.0.value", issuer2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sso_url.0.value", validUrl2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_x509_cert.0.value", cert2), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_enable_sp_initiated.0.value", "true"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_x509_cert.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sign_request.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_post_logout_redirect_url.0.value", "http://example.com"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_force_authn.0.value", "true"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_issuer_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_acs_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_metadata.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_digest_methods_used.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_signature_methods_used.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_user_domains.0.value", "[example.com]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.comment.0.value", "foo"), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "show_output.0.created_on"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "enabled", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_issuer", issuer2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sso_url", validUrl2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_x509_cert", cert2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sp_initiated_login_page_label", "foo"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_enable_sp_initiated", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_sign_request", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_requested_nameid_format", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_post_logout_redirect_url", validUrl), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_force_authn", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_snowflake_issuer_url", issuerURL), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "saml2_snowflake_acs_url", acsURL), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_user_domains.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_user_domains.0", "example.com"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_email_patterns.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "allowed_email_patterns.0", "^(.+dev)@example.com$"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_issuer.0.value", issuer2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sso_url.0.value", validUrl2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_x509_cert.0.value", cert2), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_enable_sp_initiated.0.value", "true"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_x509_cert.0.value"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_sign_request.0.value", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_post_logout_redirect_url.0.value", validUrl), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.saml2_force_authn.0.value", "true"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_issuer_url.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_acs_url.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_snowflake_metadata.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_digest_methods_used.0.value"), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "describe_output.0.saml2_signature_methods_used.0.value"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.allowed_user_domains.0.value", "[example.com]"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "describe_output.0.comment.0.value", comment), + + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(completeModel.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(completeModel.ResourceReference(), "show_output.0.created_on"), ), }, // unset { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Saml2Integration/recreates"), - ConfigVariables: m(issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert, false, true), + Config: accconfig.FromModels(t, recreatesModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "enabled", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_issuer", issuer), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sso_url", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_x509_cert", cert), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sp_initiated_login_page_label", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_enable_sp_initiated", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_sign_request", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_requested_nameid_format", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_post_logout_redirect_url", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_force_authn", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_issuer_url", issuerURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "saml2_snowflake_acs_url", acsURL), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_user_domains.0", "example.com"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "allowed_email_patterns.0", "^(.+dev)@example.com$"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "comment", ""), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_issuer.0.value", issuer), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sso_url.0.value", validUrl), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_x509_cert.0.value", cert), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_enable_sp_initiated.0.value", "false"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_x509_cert.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_sign_request.0.value", "false"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress)), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_post_logout_redirect_url.0.value", ""), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.saml2_force_authn.0.value", "false"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_issuer_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_acs_url.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_snowflake_metadata.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_digest_methods_used.0.value"), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "describe_output.0.saml2_signature_methods_used.0.value"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_user_domains.0.value", "[example.com]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "describe_output.0.comment.0.value", ""), - - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.enabled", "false"), - resource.TestCheckResourceAttr("snowflake_saml2_integration.test", "show_output.0.comment", ""), - resource.TestCheckResourceAttrSet("snowflake_saml2_integration.test", "show_output.0.created_on"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "enabled", r.BooleanDefault), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_issuer", issuer), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_sso_url", validUrl), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_provider", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_x509_cert", cert), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_sp_initiated_login_page_label", "foo"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_enable_sp_initiated", r.BooleanDefault), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_sign_request", r.BooleanDefault), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_requested_nameid_format", ""), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_post_logout_redirect_url", ""), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_force_authn", r.BooleanDefault), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_snowflake_issuer_url", issuerURL), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "saml2_snowflake_acs_url", acsURL), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "allowed_user_domains.#", "1"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "allowed_user_domains.0", "example.com"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "allowed_email_patterns.#", "1"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "allowed_email_patterns.0", "^(.+dev)@example.com$"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "comment", ""), + + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_issuer.0.value", issuer), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_sso_url.0.value", validUrl), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_x509_cert.0.value", cert), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_enable_sp_initiated.0.value", "false"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_snowflake_x509_cert.0.value"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_sign_request.0.value", "false"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatEmailAddress)), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_post_logout_redirect_url.0.value", ""), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.saml2_force_authn.0.value", "false"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_snowflake_issuer_url.0.value"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_snowflake_acs_url.0.value"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_snowflake_metadata.0.value"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_digest_methods_used.0.value"), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "describe_output.0.saml2_signature_methods_used.0.value"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.allowed_user_domains.0.value", "[example.com]"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "describe_output.0.comment.0.value", ""), + + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.0.enabled", "false"), + resource.TestCheckResourceAttr(recreatesModel.ResourceReference(), "show_output.0.comment", ""), + resource.TestCheckResourceAttrSet(recreatesModel.ResourceReference(), "show_output.0.created_on"), ), }, }, }) } -func saml2ConfigWithAuthn(name, issuer, provider, ssoUrl, x509Cert string, forceAuthn bool) string { - return fmt.Sprintf(` -resource "snowflake_saml2_integration" "test" { - name = "%s" - saml2_issuer = "%s" - saml2_provider = "%s" - saml2_sso_url = "%s" - saml2_x509_cert = < Date: Mon, 31 Mar 2025 19:25:59 +0200 Subject: [PATCH 11/16] Progressing through schema acceptance tests setups (WIP) --- pkg/resources/schema_acceptance_test.go | 357 +++++++++--------- .../testdata/TestAcc_Schema/basic/test.tf | 4 - .../TestAcc_Schema/basic/variables.tf | 7 - .../basic_with_transient/test.tf | 5 - .../basic_with_transient/variables.tf | 11 - .../testdata/TestAcc_Schema/complete/test.tf | 26 -- .../TestAcc_Schema/complete/variables.tf | 87 ----- pkg/resources/testdata/TestAcc_Schema/test.tf | 5 - .../testdata/TestAcc_Schema/variables.tf | 11 - 9 files changed, 172 insertions(+), 341 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic_with_transient/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic_with_transient/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/complete/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/complete/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/variables.tf diff --git a/pkg/resources/schema_acceptance_test.go b/pkg/resources/schema_acceptance_test.go index 1a9442c861..2eae60df8a 100644 --- a/pkg/resources/schema_acceptance_test.go +++ b/pkg/resources/schema_acceptance_test.go @@ -9,11 +9,14 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" acchelpers "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers" r "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" tfjson "github.com/hashicorp/terraform-json" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/importchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" @@ -29,8 +32,8 @@ import ( ) func TestAcc_Schema_basic(t *testing.T) { - id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) t.Cleanup(externalVolumeCleanup) @@ -38,46 +41,36 @@ func TestAcc_Schema_basic(t *testing.T) { catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) t.Cleanup(catalogCleanup) - basicConfigVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable("foo"), - "database": config.StringVariable(databaseId.Name()), - } - - basicConfigVariablesWithTransient := func(isTransient bool) config.Variables { - return config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable("foo"), - "database": config.StringVariable(databaseId.Name()), - "is_transient": config.BoolVariable(isTransient), - } - } - - completeConfigVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable("foo"), - "database": config.StringVariable(databaseId.Name()), - "with_managed_access": config.BoolVariable(true), - "is_transient": config.BoolVariable(false), - - "data_retention_time_in_days": config.IntegerVariable(1), - "max_data_extension_time_in_days": config.IntegerVariable(1), - "external_volume": config.StringVariable(externalVolumeId.Name()), - "catalog": config.StringVariable(catalogId.Name()), - "replace_invalid_characters": config.BoolVariable(true), - "default_ddl_collation": config.StringVariable("en_US"), - "storage_serialization_policy": config.StringVariable(string(sdk.StorageSerializationPolicyCompatible)), - "log_level": config.StringVariable(string(sdk.LogLevelInfo)), - "trace_level": config.StringVariable(string(sdk.TraceLevelOnEvent)), - "suspend_task_after_num_failures": config.IntegerVariable(20), - "task_auto_retry_attempts": config.IntegerVariable(20), - "user_task_managed_initial_warehouse_size": config.StringVariable(string(sdk.WarehouseSizeXLarge)), - "user_task_timeout_ms": config.IntegerVariable(1200000), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(120), - "quoted_identifiers_ignore_case": config.BoolVariable(true), - "enable_console_output": config.BoolVariable(true), - "pipe_execution_paused": config.BoolVariable(true), - } + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + comment := random.Comment() + + basicSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()) + fullSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()). + WithComment(comment). + WithWithManagedAccess(r.BooleanTrue). + WithIsTransient(r.BooleanFalse). + WithDataRetentionTimeInDays(1). + WithMaxDataExtensionTimeInDays(1). + WithExternalVolume(externalVolumeId.Name()). + WithCatalog(catalogId.Name()). + WithReplaceInvalidCharacters(true). + WithDefaultDdlCollation("en_US"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyCompatible)). + WithLogLevel(string(sdk.LogLevelInfo)). + WithTraceLevel(string(sdk.TraceLevelOnEvent)). + WithSuspendTaskAfterNumFailures(20). + WithTaskAutoRetryAttempts(20). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeXLarge)). + WithUserTaskTimeoutMs(1200000). + WithUserTaskMinimumTriggerIntervalInSeconds(120). + WithQuotedIdentifiersIgnoreCase(true). + WithEnableConsoleOutput(true). + WithPipeExecutionPaused(true) + + schemaModelWithExplicitTransientFalse := model.Schema("test", id.DatabaseName(), id.Name()). + WithIsTransient(r.BooleanFalse) + schemaModelWithExplicitTransientTrue := model.Schema("test", id.DatabaseName(), id.Name()). + WithIsTransient(r.BooleanTrue) var ( accountDataRetentionTimeInDays = new(string) @@ -128,190 +121,184 @@ func TestAcc_Schema_basic(t *testing.T) { *accountEnableConsoleOutput = acchelpers.FindParameter(t, params, sdk.AccountParameterEnableConsoleOutput).Value *accountPipeExecutionPaused = acchelpers.FindParameter(t, params, sdk.AccountParameterPipeExecutionPaused).Value }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/basic"), - ConfigVariables: basicConfigVariables, + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "with_managed_access", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_schema.test", "is_transient", r.BooleanDefault), - - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "enable_console_output", accountEnableConsoleOutput), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "pipe_execution_paused", accountPipeExecutionPaused), - - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.created_on"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.is_default", "false"), - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.is_current"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.owner"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.comment", ""), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.options", ""), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "with_managed_access", r.BooleanDefault), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "is_transient", r.BooleanDefault), + + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttrPtr(basicSchemaModel.ResourceReference(), "pipe_execution_paused", accountPipeExecutionPaused), + + resource.TestCheckResourceAttrSet(basicSchemaModel.ResourceReference(), "show_output.0.created_on"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "show_output.0.is_default", "false"), + resource.TestCheckResourceAttrSet(basicSchemaModel.ResourceReference(), "show_output.0.is_current"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "show_output.0.database_name", id.DatabaseId().Name()), + resource.TestCheckResourceAttrSet(basicSchemaModel.ResourceReference(), "show_output.0.owner"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "show_output.0.comment", ""), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "show_output.0.options", ""), ), }, // import - without optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/basic"), - ConfigVariables: basicConfigVariables, - ResourceName: "snowflake_schema.test", - ImportState: true, + Config: accconfig.FromModels(t, basicSchemaModel), + ResourceName: basicSchemaModel.ResourceReference(), + ImportState: true, ImportStateCheck: importchecks.ComposeAggregateImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), - importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "database", databaseId.Name()), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "database", acc.TestDatabaseName), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "with_managed_access", "false"), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "is_transient", "false"), ), }, // set other fields { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/complete"), - ConfigVariables: completeConfigVariables, + Config: accconfig.FromModels(t, fullSchemaModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(fullSchemaModel.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "with_managed_access", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "is_transient", "false"), - resource.TestCheckResourceAttr("snowflake_schema.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "max_data_extension_time_in_days", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "external_volume", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "catalog", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "replace_invalid_characters", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "default_ddl_collation", "en_US"), - resource.TestCheckResourceAttr("snowflake_schema.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), - resource.TestCheckResourceAttr("snowflake_schema.test", "log_level", string(sdk.LogLevelInfo)), - resource.TestCheckResourceAttr("snowflake_schema.test", "trace_level", string(sdk.TraceLevelOnEvent)), - resource.TestCheckResourceAttr("snowflake_schema.test", "suspend_task_after_num_failures", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "task_auto_retry_attempts", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_timeout_ms", "1200000"), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_minimum_trigger_interval_in_seconds", "120"), - resource.TestCheckResourceAttr("snowflake_schema.test", "quoted_identifiers_ignore_case", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "enable_console_output", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "true"), - - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.created_on"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.is_default", "false"), - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.is_current"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttrSet("snowflake_schema.test", "show_output.0.owner"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("snowflake_schema.test", "show_output.0.options", "MANAGED ACCESS"), - - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.data_retention_time_in_days.0.value", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.max_data_extension_time_in_days.0.value", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.external_volume.0.value", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.catalog.0.value", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.replace_invalid_characters.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.default_ddl_collation.0.value", "en_US"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.storage_serialization_policy.0.value", string(sdk.StorageSerializationPolicyCompatible)), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.log_level.0.value", string(sdk.LogLevelInfo)), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.trace_level.0.value", string(sdk.TraceLevelOnEvent)), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.suspend_task_after_num_failures.0.value", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.task_auto_retry_attempts.0.value", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.user_task_managed_initial_warehouse_size.0.value", string(sdk.WarehouseSizeXLarge)), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.user_task_timeout_ms.0.value", "1200000"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.user_task_minimum_trigger_interval_in_seconds.0.value", "120"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.quoted_identifiers_ignore_case.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.enable_console_output.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "parameters.0.pipe_execution_paused.0.value", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "with_managed_access", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "is_transient", "false"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "data_retention_time_in_days", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "max_data_extension_time_in_days", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "external_volume", externalVolumeId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "catalog", catalogId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "replace_invalid_characters", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "default_ddl_collation", "en_US"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "log_level", string(sdk.LogLevelInfo)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "trace_level", string(sdk.TraceLevelOnEvent)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "suspend_task_after_num_failures", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "task_auto_retry_attempts", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_timeout_ms", "1200000"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "120"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "quoted_identifiers_ignore_case", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "enable_console_output", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "pipe_execution_paused", "true"), + + resource.TestCheckResourceAttrSet(fullSchemaModel.ResourceReference(), "show_output.0.created_on"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "show_output.0.is_default", "false"), + resource.TestCheckResourceAttrSet(fullSchemaModel.ResourceReference(), "show_output.0.is_current"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "show_output.0.database_name", id.DatabaseId().Name()), + resource.TestCheckResourceAttrSet(fullSchemaModel.ResourceReference(), "show_output.0.owner"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "show_output.0.options", "MANAGED ACCESS"), + + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.data_retention_time_in_days.0.value", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.max_data_extension_time_in_days.0.value", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.external_volume.0.value", externalVolumeId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.catalog.0.value", catalogId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.replace_invalid_characters.0.value", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.default_ddl_collation.0.value", "en_US"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.storage_serialization_policy.0.value", string(sdk.StorageSerializationPolicyCompatible)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.log_level.0.value", string(sdk.LogLevelInfo)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.trace_level.0.value", string(sdk.TraceLevelOnEvent)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.suspend_task_after_num_failures.0.value", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.task_auto_retry_attempts.0.value", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.user_task_managed_initial_warehouse_size.0.value", string(sdk.WarehouseSizeXLarge)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.user_task_timeout_ms.0.value", "1200000"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.user_task_minimum_trigger_interval_in_seconds.0.value", "120"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.quoted_identifiers_ignore_case.0.value", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.enable_console_output.0.value", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "parameters.0.pipe_execution_paused.0.value", "true"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/complete"), - ConfigVariables: completeConfigVariables, - ResourceName: "snowflake_schema.test", + Config: accconfig.FromModels(t, fullSchemaModel), + ResourceName: fullSchemaModel.ResourceReference(), ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"show_output.0.is_current"}, }, // unset { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/basic_with_transient"), - ConfigVariables: basicConfigVariablesWithTransient(false), + Config: accconfig.FromModels(t, schemaModelWithExplicitTransientFalse), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(schemaModelWithExplicitTransientFalse.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "with_managed_access", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_schema.test", "is_transient", "false"), - - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "enable_console_output", accountEnableConsoleOutput), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "pipe_execution_paused", accountPipeExecutionPaused), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientFalse.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientFalse.ResourceReference(), "database", id.DatabaseId().Name()), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientFalse.ResourceReference(), "with_managed_access", r.BooleanDefault), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientFalse.ResourceReference(), "is_transient", "false"), + + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientFalse.ResourceReference(), "pipe_execution_paused", accountPipeExecutionPaused), ), }, // set is_transient - recreate { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/basic_with_transient"), - ConfigVariables: basicConfigVariablesWithTransient(true), + Config: accconfig.FromModels(t, schemaModelWithExplicitTransientTrue), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(schemaModelWithExplicitTransientTrue.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "with_managed_access", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_schema.test", "is_transient", "true"), - - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "enable_console_output", accountEnableConsoleOutput), - resource.TestCheckResourceAttrPtr("snowflake_schema.test", "pipe_execution_paused", accountPipeExecutionPaused), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientTrue.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientTrue.ResourceReference(), "database", id.DatabaseId().Name()), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientTrue.ResourceReference(), "with_managed_access", r.BooleanDefault), + resource.TestCheckResourceAttr(schemaModelWithExplicitTransientTrue.ResourceReference(), "is_transient", "true"), + + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttrPtr(schemaModelWithExplicitTransientTrue.ResourceReference(), "pipe_execution_paused", accountPipeExecutionPaused), ), }, }, diff --git a/pkg/resources/testdata/TestAcc_Schema/basic/test.tf b/pkg/resources/testdata/TestAcc_Schema/basic/test.tf deleted file mode 100644 index eaadbde541..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic/test.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database -} diff --git a/pkg/resources/testdata/TestAcc_Schema/basic/variables.tf b/pkg/resources/testdata/TestAcc_Schema/basic/variables.tf deleted file mode 100644 index 2cf13b7d6e..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/test.tf b/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/test.tf deleted file mode 100644 index c107873c4e..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - is_transient = var.is_transient -} diff --git a/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/variables.tf b/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/variables.tf deleted file mode 100644 index 83822c8e9c..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic_with_transient/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "is_transient" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema/complete/test.tf b/pkg/resources/testdata/TestAcc_Schema/complete/test.tf deleted file mode 100644 index 6d8141e684..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/complete/test.tf +++ /dev/null @@ -1,26 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - with_managed_access = var.with_managed_access - is_transient = var.is_transient - comment = var.comment - - data_retention_time_in_days = var.data_retention_time_in_days - max_data_extension_time_in_days = var.max_data_extension_time_in_days - external_volume = var.external_volume - catalog = var.catalog - replace_invalid_characters = var.replace_invalid_characters - default_ddl_collation = var.default_ddl_collation - storage_serialization_policy = var.storage_serialization_policy - log_level = var.log_level - trace_level = var.trace_level - suspend_task_after_num_failures = var.suspend_task_after_num_failures - task_auto_retry_attempts = var.task_auto_retry_attempts - user_task_managed_initial_warehouse_size = var.user_task_managed_initial_warehouse_size - user_task_timeout_ms = var.user_task_timeout_ms - user_task_minimum_trigger_interval_in_seconds = var.user_task_minimum_trigger_interval_in_seconds - quoted_identifiers_ignore_case = var.quoted_identifiers_ignore_case - enable_console_output = var.enable_console_output - pipe_execution_paused = var.pipe_execution_paused - -} diff --git a/pkg/resources/testdata/TestAcc_Schema/complete/variables.tf b/pkg/resources/testdata/TestAcc_Schema/complete/variables.tf deleted file mode 100644 index 6f394e180b..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/complete/variables.tf +++ /dev/null @@ -1,87 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "with_managed_access" { - type = string -} - -variable "is_transient" { - type = string -} - -variable "comment" { - type = string -} - -variable "data_retention_time_in_days" { - type = string -} - -variable "max_data_extension_time_in_days" { - type = string -} - -variable "external_volume" { - type = string -} - -variable "catalog" { - type = string -} - -variable "replace_invalid_characters" { - type = string -} - -variable "default_ddl_collation" { - type = string -} - -variable "storage_serialization_policy" { - type = string -} - -variable "log_level" { - type = string -} - -variable "trace_level" { - type = string -} - -variable "suspend_task_after_num_failures" { - type = number -} - -variable "task_auto_retry_attempts" { - type = number -} - -variable "user_task_managed_initial_warehouse_size" { - type = string -} - -variable "user_task_timeout_ms" { - type = number -} - -variable "user_task_minimum_trigger_interval_in_seconds" { - type = number -} - -variable "quoted_identifiers_ignore_case" { - type = bool -} - -variable "enable_console_output" { - type = bool -} - -variable "pipe_execution_paused" { - type = bool -} diff --git a/pkg/resources/testdata/TestAcc_Schema/test.tf b/pkg/resources/testdata/TestAcc_Schema/test.tf deleted file mode 100644 index ce85eca50c..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - comment = var.comment -} \ No newline at end of file diff --git a/pkg/resources/testdata/TestAcc_Schema/variables.tf b/pkg/resources/testdata/TestAcc_Schema/variables.tf deleted file mode 100644 index 0c8231993a..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "comment" { - type = string -} From 819a37ec0c62c727f037024292120a91f418de0f Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 14:29:09 +0200 Subject: [PATCH 12/16] Fix schema acceptance tests setups --- pkg/acceptance/helpers/ids_generator.go | 4 + pkg/resources/schema_acceptance_test.go | 550 +++++++++--------- .../basic_with_pipe_execution_paused/test.tf | 5 - .../variables.tf | 11 - .../WithDataRetentionSet/test.tf | 5 - .../WithDataRetentionSet/variables.tf | 11 - .../WithoutDataRetentionSet/test.tf | 4 - .../WithoutDataRetentionSet/variables.tf | 7 - .../test.tf | 4 - .../variables.tf | 7 - .../test.tf | 8 - .../variables.tf | 7 - .../testdata/TestAcc_Schema_Rename/test.tf | 5 - .../TestAcc_Schema_Rename/variables.tf | 11 - .../1/test.tf | 4 - .../1/variables.tf | 7 - .../2/test.tf | 13 - .../2/variables.tf | 11 - pkg/sdk/identifier_helpers.go | 4 + 19 files changed, 276 insertions(+), 402 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_Rename/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_Rename/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/variables.tf diff --git a/pkg/acceptance/helpers/ids_generator.go b/pkg/acceptance/helpers/ids_generator.go index c5dd15397f..8523659e6e 100644 --- a/pkg/acceptance/helpers/ids_generator.go +++ b/pkg/acceptance/helpers/ids_generator.go @@ -55,6 +55,10 @@ func (c *IdsGenerator) NewDatabaseObjectIdentifier(name string) sdk.DatabaseObje return sdk.NewDatabaseObjectIdentifier(c.DatabaseId().Name(), name) } +func (c *IdsGenerator) NewDatabaseObjectIdentifierInDatabase(name string, databaseId sdk.AccountObjectIdentifier) sdk.DatabaseObjectIdentifier { + return sdk.NewDatabaseObjectIdentifierInDatabase(databaseId, name) +} + func (c *IdsGenerator) RandomDatabaseObjectIdentifier() sdk.DatabaseObjectIdentifier { return c.RandomDatabaseObjectIdentifierInDatabase(c.DatabaseId()) } diff --git a/pkg/resources/schema_acceptance_test.go b/pkg/resources/schema_acceptance_test.go index 2eae60df8a..dfc324ca06 100644 --- a/pkg/resources/schema_acceptance_test.go +++ b/pkg/resources/schema_acceptance_test.go @@ -23,7 +23,6 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -306,8 +305,8 @@ func TestAcc_Schema_basic(t *testing.T) { } func TestAcc_Schema_complete(t *testing.T) { - id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) t.Cleanup(externalVolumeCleanup) @@ -315,31 +314,30 @@ func TestAcc_Schema_complete(t *testing.T) { catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) t.Cleanup(catalogCleanup) - completeConfigVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable("foo"), - "database": config.StringVariable(databaseId.Name()), - "with_managed_access": config.BoolVariable(true), - "is_transient": config.BoolVariable(true), - - "data_retention_time_in_days": config.IntegerVariable(1), - "max_data_extension_time_in_days": config.IntegerVariable(1), - "external_volume": config.StringVariable(externalVolumeId.Name()), - "catalog": config.StringVariable(catalogId.Name()), - "replace_invalid_characters": config.BoolVariable(true), - "default_ddl_collation": config.StringVariable("en_US"), - "storage_serialization_policy": config.StringVariable(string(sdk.StorageSerializationPolicyCompatible)), - "log_level": config.StringVariable(string(sdk.LogLevelInfo)), - "trace_level": config.StringVariable(string(sdk.TraceLevelOnEvent)), - "suspend_task_after_num_failures": config.IntegerVariable(20), - "task_auto_retry_attempts": config.IntegerVariable(20), - "user_task_managed_initial_warehouse_size": config.StringVariable(string(sdk.WarehouseSizeXLarge)), - "user_task_timeout_ms": config.IntegerVariable(1200000), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(120), - "quoted_identifiers_ignore_case": config.BoolVariable(true), - "enable_console_output": config.BoolVariable(true), - "pipe_execution_paused": config.BoolVariable(true), - } + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + comment := random.Comment() + + fullSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()). + WithComment(comment). + WithWithManagedAccess(r.BooleanTrue). + WithIsTransient(r.BooleanTrue). + WithDataRetentionTimeInDays(1). + WithMaxDataExtensionTimeInDays(1). + WithExternalVolume(externalVolumeId.Name()). + WithCatalog(catalogId.Name()). + WithReplaceInvalidCharacters(true). + WithDefaultDdlCollation("en_US"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyCompatible)). + WithLogLevel(string(sdk.LogLevelInfo)). + WithTraceLevel(string(sdk.TraceLevelOnEvent)). + WithSuspendTaskAfterNumFailures(20). + WithTaskAutoRetryAttempts(20). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeXLarge)). + WithUserTaskTimeoutMs(1200000). + WithUserTaskMinimumTriggerIntervalInSeconds(120). + WithQuotedIdentifiersIgnoreCase(true). + WithEnableConsoleOutput(true). + WithPipeExecutionPaused(true) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -350,37 +348,35 @@ func TestAcc_Schema_complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/complete"), - ConfigVariables: completeConfigVariables, + Config: accconfig.FromModels(t, fullSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "is_transient", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "with_managed_access", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "max_data_extension_time_in_days", "1"), - resource.TestCheckResourceAttr("snowflake_schema.test", "external_volume", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "catalog", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "replace_invalid_characters", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "default_ddl_collation", "en_US"), - resource.TestCheckResourceAttr("snowflake_schema.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), - resource.TestCheckResourceAttr("snowflake_schema.test", "log_level", string(sdk.LogLevelInfo)), - resource.TestCheckResourceAttr("snowflake_schema.test", "trace_level", string(sdk.TraceLevelOnEvent)), - resource.TestCheckResourceAttr("snowflake_schema.test", "suspend_task_after_num_failures", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "task_auto_retry_attempts", "20"), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_timeout_ms", "1200000"), - resource.TestCheckResourceAttr("snowflake_schema.test", "user_task_minimum_trigger_interval_in_seconds", "120"), - resource.TestCheckResourceAttr("snowflake_schema.test", "quoted_identifiers_ignore_case", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "enable_console_output", "true"), - resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "is_transient", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "with_managed_access", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "data_retention_time_in_days", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "max_data_extension_time_in_days", "1"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "external_volume", externalVolumeId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "catalog", catalogId.Name()), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "replace_invalid_characters", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "default_ddl_collation", "en_US"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "log_level", string(sdk.LogLevelInfo)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "trace_level", string(sdk.TraceLevelOnEvent)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "suspend_task_after_num_failures", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "task_auto_retry_attempts", "20"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_timeout_ms", "1200000"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "120"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "quoted_identifiers_ignore_case", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "enable_console_output", "true"), + resource.TestCheckResourceAttr(fullSchemaModel.ResourceReference(), "pipe_execution_paused", "true"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema/complete"), - ConfigVariables: completeConfigVariables, - ResourceName: "snowflake_schema.test", + Config: accconfig.FromModels(t, fullSchemaModel), + ResourceName: fullSchemaModel.ResourceReference(), ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"show_output.0.is_current"}, @@ -390,9 +386,17 @@ func TestAcc_Schema_complete(t *testing.T) { } func TestAcc_Schema_Rename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + oldId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() newId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - comment := "Terraform acceptance test" + comment := random.Comment() + + oldModel := model.Schema("test", oldId.DatabaseName(), oldId.Name()). + WithComment(comment) + newModel := model.Schema("test", newId.DatabaseName(), newId.Name()). + WithComment(comment) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -403,36 +407,26 @@ func TestAcc_Schema_Rename(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: config.TestNameDirectory(), - ConfigVariables: map[string]config.Variable{ - "name": config.StringVariable(oldId.Name()), - "database": config.StringVariable(acc.TestDatabaseName), - "comment": config.StringVariable(comment), - }, + Config: accconfig.FromModels(t, oldModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", oldId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "fully_qualified_name", oldId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), - resource.TestCheckResourceAttr("snowflake_schema.test", "comment", comment), + resource.TestCheckResourceAttr(oldModel.ResourceReference(), "name", oldId.Name()), + resource.TestCheckResourceAttr(oldModel.ResourceReference(), "fully_qualified_name", oldId.FullyQualifiedName()), + resource.TestCheckResourceAttr(oldModel.ResourceReference(), "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(oldModel.ResourceReference(), "comment", comment), ), }, { - ConfigDirectory: config.TestNameDirectory(), - ConfigVariables: map[string]config.Variable{ - "name": config.StringVariable(newId.Name()), - "database": config.StringVariable(acc.TestDatabaseName), - "comment": config.StringVariable(comment), - }, + Config: accconfig.FromModels(t, newModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(newModel.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "fully_qualified_name", newId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), - resource.TestCheckResourceAttr("snowflake_schema.test", "comment", comment), + resource.TestCheckResourceAttr(newModel.ResourceReference(), "name", newId.Name()), + resource.TestCheckResourceAttr(newModel.ResourceReference(), "fully_qualified_name", newId.FullyQualifiedName()), + resource.TestCheckResourceAttr(newModel.ResourceReference(), "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(newModel.ResourceReference(), "comment", comment), ), }, }, @@ -440,8 +434,14 @@ func TestAcc_Schema_Rename(t *testing.T) { } func TestAcc_Schema_ManagePublicVersion_0_94_0(t *testing.T) { - name := "PUBLIC" - schemaId := sdk.NewDatabaseObjectIdentifier(acc.TestDatabaseName, name) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + // use a separate db because this test relies on schema history + db, cleanupDb := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(cleanupDb) + + schemaId := acc.TestClient().Ids.NewDatabaseObjectIdentifierInDatabase("PUBLIC", db.ID()) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -459,7 +459,7 @@ func TestAcc_Schema_ManagePublicVersion_0_94_0(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: schemav093(name, acc.TestDatabaseName), + Config: schemaV093(schemaId), ExpectError: regexp.MustCompile("Error: error creating schema PUBLIC"), }, { @@ -469,10 +469,10 @@ func TestAcc_Schema_ManagePublicVersion_0_94_0(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: schemav094WithPipeExecutionPaused(name, acc.TestDatabaseName, true), + Config: schemaV094WithPipeExecutionPaused(schemaId, true), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name()), + resource.TestCheckResourceAttr("snowflake_schema.test", "database", schemaId.DatabaseName()), resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "true"), ), }, @@ -498,15 +498,15 @@ func TestAcc_Schema_ManagePublicVersion_0_94_0(t *testing.T) { require.Zero(t, schemas[0].DroppedOn) require.NotZero(t, schemas[1].DroppedOn) }, - Config: schemav094WithPipeExecutionPaused(name, acc.TestDatabaseName, false), + Config: schemaV094WithPipeExecutionPaused(schemaId, false), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name()), + resource.TestCheckResourceAttr("snowflake_schema.test", "database", schemaId.DatabaseName()), resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "false"), ), }, @@ -515,12 +515,14 @@ func TestAcc_Schema_ManagePublicVersion_0_94_0(t *testing.T) { } func TestAcc_Schema_ManagePublicVersion_0_94_1(t *testing.T) { - name := "PUBLIC" + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) // use a separate db because this test relies on schema history - db, cleanupDb := acc.TestClient().Database.CreateDatabase(t) + db, cleanupDb := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) t.Cleanup(cleanupDb) - schemaId := sdk.NewDatabaseObjectIdentifier(db.ID().Name(), name) + + schemaId := acc.TestClient().Ids.NewDatabaseObjectIdentifierInDatabase("PUBLIC", db.ID()) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -538,15 +540,15 @@ func TestAcc_Schema_ManagePublicVersion_0_94_1(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: schemav093(name, db.ID().Name()), + Config: schemaV093(schemaId), ExpectError: regexp.MustCompile("Error: error creating schema PUBLIC"), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: schemav094WithPipeExecutionPaused(name, db.ID().Name(), true), + Config: schemaV094WithPipeExecutionPaused(schemaId, true), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), + resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name()), resource.TestCheckResourceAttr("snowflake_schema.test", "database", db.ID().Name()), resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "true"), ), @@ -564,14 +566,14 @@ func TestAcc_Schema_ManagePublicVersion_0_94_1(t *testing.T) { require.Len(t, schemas, 1) require.Zero(t, schemas[0].DroppedOn) }, - Config: schemav094WithPipeExecutionPaused(name, db.ID().Name(), true), + Config: schemaV094WithPipeExecutionPaused(schemaId, true), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionNoop), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), + resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name()), resource.TestCheckResourceAttr("snowflake_schema.test", "database", db.ID().Name()), resource.TestCheckResourceAttr("snowflake_schema.test", "pipe_execution_paused", "true"), ), @@ -582,9 +584,24 @@ func TestAcc_Schema_ManagePublicVersion_0_94_1(t *testing.T) { // TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2209 issue. func TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases(t *testing.T) { - name := "test_schema" + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + // It seems like Snowflake orders the output of SHOW command based on names, so they do matter - newDatabaseName := "SELDQBXEKC" + db1Id := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix("A") + db2Id := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix("B") + + _, database1Cleanup := acc.TestClient().Database.CreateDatabaseWithParametersSetWithId(t, db1Id) + t.Cleanup(database1Cleanup) + + _, database2Cleanup := acc.TestClient().Database.CreateDatabaseWithParametersSetWithId(t, db2Id) + t.Cleanup(database2Cleanup) + + schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(db1Id) + schemaId2 := acc.TestClient().Ids.NewDatabaseObjectIdentifierInDatabase(schemaId.Name(), db2Id) + + schema1Model := model.Schema("test", schemaId.DatabaseName(), schemaId.Name()) + schema2Model := model.Schema("test_2", schemaId2.DatabaseName(), schemaId2.Name()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -595,28 +612,19 @@ func TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases(t *testing.T) CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: config.TestStepDirectory(), - ConfigVariables: map[string]config.Variable{ - "name": config.StringVariable(name), - "database": config.StringVariable(acc.TestDatabaseName), - }, + Config: accconfig.FromModels(t, schema1Model), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(schema1Model.ResourceReference(), "name", schemaId.Name()), + resource.TestCheckResourceAttr(schema1Model.ResourceReference(), "database", schemaId.DatabaseName()), ), }, { - ConfigDirectory: config.TestStepDirectory(), - ConfigVariables: map[string]config.Variable{ - "name": config.StringVariable(name), - "database": config.StringVariable(acc.TestDatabaseName), - "new_database": config.StringVariable(newDatabaseName), - }, + Config: accconfig.FromModels(t, schema1Model, schema2Model), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "name", name), - resource.TestCheckResourceAttr("snowflake_schema.test", "database", acc.TestDatabaseName), - resource.TestCheckResourceAttr("snowflake_schema.test_2", "name", name), - resource.TestCheckResourceAttr("snowflake_schema.test_2", "database", newDatabaseName), + resource.TestCheckResourceAttr(schema1Model.ResourceReference(), "name", schemaId.Name()), + resource.TestCheckResourceAttr(schema1Model.ResourceReference(), "database", schemaId.DatabaseName()), + resource.TestCheckResourceAttr(schema2Model.ResourceReference(), "name", schemaId2.Name()), + resource.TestCheckResourceAttr(schema2Model.ResourceReference(), "database", schemaId2.DatabaseName()), ), }, }, @@ -625,23 +633,23 @@ func TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases(t *testing.T) // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2356 issue is fixed. func TestAcc_Schema_DefaultDataRetentionTime(t *testing.T) { - db, dbCleanup := acc.TestClient().Database.CreateDatabase(t) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + db, dbCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) t.Cleanup(dbCleanup) id := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(db.ID()) - configVariablesWithoutSchemaDataRetentionTime := func() config.Variables { - return config.Variables{ - "database": config.StringVariable(db.ID().Name()), - "schema": config.StringVariable(id.Name()), - } - } - - configVariablesWithSchemaDataRetentionTime := func(schemaDataRetentionTime int) config.Variables { - vars := configVariablesWithoutSchemaDataRetentionTime() - vars["schema_data_retention_time"] = config.IntegerVariable(schemaDataRetentionTime) - return vars - } + basicSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()) + schemaModelWithDataRetentionInDays5 := model.Schema("test", id.DatabaseName(), id.Name()). + WithDataRetentionTimeInDays(5) + schemaModelWithDataRetentionInDays15 := model.Schema("test", id.DatabaseName(), id.Name()). + WithDataRetentionTimeInDays(15) + schemaModelWithDataRetentionInDays0 := model.Schema("test", id.DatabaseName(), id.Name()). + WithDataRetentionTimeInDays(0) + schemaModelWithDataRetentionInDays3 := model.Schema("test", id.DatabaseName(), id.Name()). + WithDataRetentionTimeInDays(3) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -652,10 +660,9 @@ func TestAcc_Schema_DefaultDataRetentionTime(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet"), - ConfigVariables: configVariablesWithoutSchemaDataRetentionTime(), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "1"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", "1"), ), }, // change param value in database @@ -663,57 +670,51 @@ func TestAcc_Schema_DefaultDataRetentionTime(t *testing.T) { PreConfig: func() { acc.TestClient().Database.UpdateDataRetentionTime(t, db.ID(), 50) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet"), - ConfigVariables: configVariablesWithoutSchemaDataRetentionTime(), + Config: accconfig.FromModels(t, basicSchemaModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_schema.test", "data_retention_time_in_days"), - planchecks.ExpectDrift("snowflake_schema.test", "data_retention_time_in_days", sdk.String("1"), sdk.String("50")), - planchecks.ExpectChange("snowflake_schema.test", "data_retention_time_in_days", tfjson.ActionNoop, sdk.String("50"), sdk.String("50")), - planchecks.ExpectComputed("snowflake_schema.test", "data_retention_time_in_days", false), + planchecks.PrintPlanDetails(basicSchemaModel.ResourceReference(), "data_retention_time_in_days"), + planchecks.ExpectDrift(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", sdk.String("1"), sdk.String("50")), + planchecks.ExpectChange(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", tfjson.ActionNoop, sdk.String("50"), sdk.String("50")), + planchecks.ExpectComputed(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", false), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "50"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", "50"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet"), - ConfigVariables: configVariablesWithSchemaDataRetentionTime(5), + Config: accconfig.FromModels(t, schemaModelWithDataRetentionInDays5), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "5"), + resource.TestCheckResourceAttr(schemaModelWithDataRetentionInDays5.ResourceReference(), "data_retention_time_in_days", "5"), checkDatabaseAndSchemaDataRetentionTime(t, id, 50, 5), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet"), - ConfigVariables: configVariablesWithSchemaDataRetentionTime(15), + Config: accconfig.FromModels(t, schemaModelWithDataRetentionInDays15), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "15"), + resource.TestCheckResourceAttr(schemaModelWithDataRetentionInDays15.ResourceReference(), "data_retention_time_in_days", "15"), checkDatabaseAndSchemaDataRetentionTime(t, id, 50, 15), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet"), - ConfigVariables: configVariablesWithoutSchemaDataRetentionTime(), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "50"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", "50"), checkDatabaseAndSchemaDataRetentionTime(t, id, 50, 50), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet"), - ConfigVariables: configVariablesWithSchemaDataRetentionTime(0), + Config: accconfig.FromModels(t, schemaModelWithDataRetentionInDays0), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "0"), + resource.TestCheckResourceAttr(schemaModelWithDataRetentionInDays0.ResourceReference(), "data_retention_time_in_days", "0"), checkDatabaseAndSchemaDataRetentionTime(t, id, 50, 0), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet"), - ConfigVariables: configVariablesWithSchemaDataRetentionTime(3), + Config: accconfig.FromModels(t, schemaModelWithDataRetentionInDays3), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "3"), + resource.TestCheckResourceAttr(schemaModelWithDataRetentionInDays3.ResourceReference(), "data_retention_time_in_days", "3"), checkDatabaseAndSchemaDataRetentionTime(t, id, 50, 3), ), }, @@ -723,21 +724,17 @@ func TestAcc_Schema_DefaultDataRetentionTime(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2356 issue is fixed. func TestAcc_Schema_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) { - databaseId := acc.TestClient().Ids.DatabaseId() - id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - configVariablesWithoutSchemaDataRetentionTime := func() config.Variables { - return config.Variables{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(id.Name()), - } - } + db, dbCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(dbCleanup) - configVariablesWithSchemaDataRetentionTime := func(schemaDataRetentionTime int) config.Variables { - vars := configVariablesWithoutSchemaDataRetentionTime() - vars["schema_data_retention_time"] = config.IntegerVariable(schemaDataRetentionTime) - return vars - } + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(db.ID()) + + basicSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()) + schemaModelWithDataRetentionInDays3 := model.Schema("test", id.DatabaseName(), id.Name()). + WithDataRetentionTimeInDays(3) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -748,27 +745,24 @@ func TestAcc_Schema_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet"), - ConfigVariables: configVariablesWithoutSchemaDataRetentionTime(), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "1"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", "1"), ), }, { PreConfig: func() { acc.TestClient().Schema.UpdateDataRetentionTime(t, id, 20) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet"), - ConfigVariables: configVariablesWithoutSchemaDataRetentionTime(), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "1"), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "data_retention_time_in_days", "1"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet"), - ConfigVariables: configVariablesWithSchemaDataRetentionTime(3), + Config: accconfig.FromModels(t, schemaModelWithDataRetentionInDays3), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "data_retention_time_in_days", "3"), + resource.TestCheckResourceAttr(schemaModelWithDataRetentionInDays3.ResourceReference(), "data_retention_time_in_days", "3"), ), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ @@ -781,11 +775,12 @@ func TestAcc_Schema_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) } func TestAcc_Schema_RemoveSchemaOutsideOfTerraform(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - configVariables := map[string]config.Variable{ - "schema_name": config.StringVariable(schemaId.Name()), - "database_name": config.StringVariable(acc.TestDatabaseName), - } + + basicSchemaModel := model.Schema("test", schemaId.DatabaseName(), schemaId.Name()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -796,8 +791,7 @@ func TestAcc_Schema_RemoveSchemaOutsideOfTerraform(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_RemoveOutsideOfTerraform"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, basicSchemaModel), }, { PreConfig: func() { @@ -807,7 +801,7 @@ func TestAcc_Schema_RemoveSchemaOutsideOfTerraform(t *testing.T) { ExpectNonEmptyPlan: true, RefreshPlanChecks: resource.RefreshPlanChecks{ PostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionCreate), + plancheck.ExpectResourceAction(basicSchemaModel.ResourceReference(), plancheck.ResourceActionCreate), }, }, }, @@ -816,14 +810,15 @@ func TestAcc_Schema_RemoveSchemaOutsideOfTerraform(t *testing.T) { } func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform(t *testing.T) { - databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) - configVariables := map[string]config.Variable{ - "database_name": config.StringVariable(databaseId.Name()), - "schema_name": config.StringVariable(schemaId.Name()), - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - var cleanupDatabase func() + db, dbCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(dbCleanup) + + schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(db.ID()) + + basicSchemaModel := model.Schema("test", schemaId.DatabaseName(), schemaId.Name()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -834,19 +829,13 @@ func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - PreConfig: func() { - _, cleanupDatabase = acc.TestClient().Database.CreateDatabaseWithIdentifier(t, databaseId) - t.Cleanup(cleanupDatabase) - }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_RemoveOutsideOfTerraform"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, basicSchemaModel), }, { PreConfig: func() { - cleanupDatabase() + dbCleanup() }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_RemoveOutsideOfTerraform"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, basicSchemaModel), // The error occurs in the Create operation, indicating the Read operation removed the resource from the state in the previous step. ExpectError: regexp.MustCompile("Failed to create schema"), }, @@ -855,12 +844,15 @@ func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform(t *testing.T) { } func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform_dbInConfig(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) - configVariables := map[string]config.Variable{ - "database_name": config.StringVariable(databaseId.Name()), - "schema_name": config.StringVariable(schemaId.Name()), - } + + databaseModel := model.DatabaseWithParametersSet("test", databaseId.Name()) + schemaModel := model.Schema("test", schemaId.DatabaseName(), schemaId.Name()). + WithDependsOn(databaseModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -871,11 +863,10 @@ func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform_dbInConfig(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, databaseModel, schemaModel), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_database.test", "name", databaseId.Name())), - assert.Check(resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name())), + assert.Check(resource.TestCheckResourceAttr(databaseModel.ResourceReference(), "name", databaseId.Name())), + assert.Check(resource.TestCheckResourceAttr(schemaModel.ResourceReference(), "name", schemaId.Name())), ), }, { @@ -885,12 +876,11 @@ func TestAcc_Schema_RemoveDatabaseOutsideOfTerraform_dbInConfig(t *testing.T) { }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_database.test", plancheck.ResourceActionCreate), - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionCreate), + plancheck.ExpectResourceAction(databaseModel.ResourceReference(), plancheck.ResourceActionCreate), + plancheck.ExpectResourceAction(schemaModel.ResourceReference(), plancheck.ResourceActionCreate), }, }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, databaseModel, schemaModel), Check: assertThat(t, assert.Check(resource.TestCheckResourceAttr("snowflake_database.test", "name", databaseId.Name())), assert.Check(resource.TestCheckResourceAttr("snowflake_schema.test", "name", schemaId.Name())), @@ -936,10 +926,10 @@ func checkDatabaseAndSchemaDataRetentionTime(t *testing.T, schemaId sdk.Database func TestAcc_Schema_migrateFromVersion093WithoutManagedAccess(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() - resourceName := "snowflake_schema.test" + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + + resourceName := "snowflake_schema.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -955,7 +945,7 @@ func TestAcc_Schema_migrateFromVersion093WithoutManagedAccess(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: schemav093(id.Name(), databaseId.Name()), + Config: schemaV093(id), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "is_managed", "false"), @@ -964,7 +954,7 @@ func TestAcc_Schema_migrateFromVersion093WithoutManagedAccess(t *testing.T) { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: schemav094(id.Name(), databaseId.Name()), + Config: schemaV094(id), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "with_managed_access", r.BooleanDefault), @@ -977,13 +967,13 @@ func TestAcc_Schema_migrateFromVersion093WithoutManagedAccess(t *testing.T) { func TestAcc_Schema_migrateFromVersion093(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() - resourceName := "snowflake_schema.test" tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) t.Cleanup(tagCleanup) + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + + resourceName := "snowflake_schema.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -999,7 +989,7 @@ func TestAcc_Schema_migrateFromVersion093(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: schemav093WithIsManagedAndDataRetentionDays(id.Name(), databaseId.Name(), tag.SchemaName, tag.Name, "foo", true, 10), + Config: schemaV093WithIsManagedAndDataRetentionDays(id, tag.ID(), "foo", true, 10), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "is_managed", "true"), @@ -1012,7 +1002,7 @@ func TestAcc_Schema_migrateFromVersion093(t *testing.T) { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: schemav094WithManagedAccessAndDataRetentionTimeInDays(id.Name(), databaseId.Name(), true, 10), + Config: schemaV094WithManagedAccessAndDataRetentionTimeInDays(id, true, 10), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckNoResourceAttr(resourceName, "is_managed"), @@ -1026,70 +1016,70 @@ func TestAcc_Schema_migrateFromVersion093(t *testing.T) { }) } -func schemav093WithIsManagedAndDataRetentionDays(name, database, tagSchema, tagName, tagValue string, isManaged bool, dataRetentionDays int) string { - s := ` +func schemaV093WithIsManagedAndDataRetentionDays(schemaId sdk.DatabaseObjectIdentifier, tagId sdk.SchemaObjectIdentifier, tagValue string, isManaged bool, dataRetentionDays int) string { + return fmt.Sprintf(` resource "snowflake_schema" "test" { - name = "%[1]s" - database = "%[2]s" - is_managed = %[6]t - data_retention_days = %[7]d + database = "%[1]s" + name = "%[2]s" + is_managed = %[7]t + data_retention_days = %[8]d tag { - name = "%[4]s" - value = "%[5]s" - schema = "%[3]s" - database = "%[2]s" + database = "%[3]s" + schema = "%[4]s" + name = "%[5]s" + value = "%[6]s" } } -` - return fmt.Sprintf(s, name, database, tagSchema, tagName, tagValue, isManaged, dataRetentionDays) +`, schemaId.DatabaseName(), schemaId.Name(), tagId.DatabaseName(), tagId.SchemaName(), tagId.Name(), tagValue, isManaged, dataRetentionDays) } -func schemav093(name, database string) string { - s := ` +func schemaV093(schemaId sdk.DatabaseObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_schema" "test" { - name = "%s" - database = "%s" + database = "%[1]s" + name = "%[2]s" } -` - return fmt.Sprintf(s, name, database) +`, schemaId.DatabaseName(), schemaId.Name()) } -func schemav094WithManagedAccessAndDataRetentionTimeInDays(name, database string, isManaged bool, dataRetentionDays int) string { - s := ` +func schemaV094WithManagedAccessAndDataRetentionTimeInDays(schemaId sdk.DatabaseObjectIdentifier, isManaged bool, dataRetentionDays int) string { + return fmt.Sprintf(` resource "snowflake_schema" "test" { - name = "%s" - database = "%s" - with_managed_access = %t - data_retention_time_in_days = %d + database = "%[1]s" + name = "%[2]s" + with_managed_access = %[3]t + data_retention_time_in_days = %[4]d } -` - return fmt.Sprintf(s, name, database, isManaged, dataRetentionDays) +`, schemaId.DatabaseName(), schemaId.Name(), isManaged, dataRetentionDays) } -func schemav094(name, database string) string { - s := ` +func schemaV094(schemaId sdk.DatabaseObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_schema" "test" { - name = "%s" - database = "%s" + database = "%[1]s" + name = "%[2]s" } -` - return fmt.Sprintf(s, name, database) +`, schemaId.DatabaseName(), schemaId.Name()) } -func schemav094WithPipeExecutionPaused(name, database string, pipeExecutionPaused bool) string { - s := ` +func schemaV094WithPipeExecutionPaused(schemaId sdk.DatabaseObjectIdentifier, pipeExecutionPaused bool) string { + return fmt.Sprintf(` resource "snowflake_schema" "test" { - name = "%s" - database = "%s" - pipe_execution_paused = %t + database = "%[1]s" + name = "%[2]s" + pipe_execution_paused = %[3]t } -` - return fmt.Sprintf(s, name, database, pipeExecutionPaused) +`, schemaId.DatabaseName(), schemaId.Name(), pipeExecutionPaused) } func TestAcc_Schema_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + basicSchemaModel := model.Schema("test", id.DatabaseName(), id.Name()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1105,36 +1095,32 @@ func TestAcc_Schema_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *tes Source: "Snowflake-Labs/snowflake", }, }, - Config: schemaBasicConfig(id.DatabaseName(), id.Name()), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "id", helpers.EncodeSnowflakeID(id)), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(id)), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: schemaBasicConfig(id.DatabaseName(), id.Name()), + Config: accconfig.FromModels(t, basicSchemaModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "id", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(basicSchemaModel.ResourceReference(), "id", id.FullyQualifiedName()), ), }, }, }) } -func schemaBasicConfig(databaseName string, name string) string { - return fmt.Sprintf(` -resource "snowflake_schema" "test" { - database = "%s" - name = "%s" -} -`, databaseName, name) -} - func TestAcc_Schema_IdentifierQuotingDiffSuppression(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - quotedDatabaseName := fmt.Sprintf(`\"%s\"`, id.DatabaseName()) - quotedName := fmt.Sprintf(`\"%s\"`, id.Name()) + quotedDatabaseName := fmt.Sprintf(`"%s"`, id.DatabaseName()) + quotedName := fmt.Sprintf(`"%s"`, id.Name()) + + basicSchemaModelWithQuotes := model.Schema("test", quotedDatabaseName, quotedName) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -1152,29 +1138,29 @@ func TestAcc_Schema_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: schemaBasicConfig(quotedDatabaseName, quotedName), + Config: accconfig.FromModels(t, basicSchemaModelWithQuotes), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "database", id.DatabaseName()), - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "id", fmt.Sprintf(`"%s"|"%s"`, id.DatabaseName(), id.Name())), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "id", fmt.Sprintf(`"%s"|"%s"`, id.DatabaseName(), id.Name())), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: schemaBasicConfig(quotedDatabaseName, quotedName), + Config: accconfig.FromModels(t, basicSchemaModelWithQuotes), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(basicSchemaModelWithQuotes.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_schema.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(basicSchemaModelWithQuotes.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_schema.test", "database", id.DatabaseName()), - resource.TestCheckResourceAttr("snowflake_schema.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_schema.test", "id", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(basicSchemaModelWithQuotes.ResourceReference(), "id", id.FullyQualifiedName()), ), }, }, diff --git a/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/test.tf b/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/test.tf deleted file mode 100644 index 5f342926d0..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - pipe_execution_paused = var.pipe_execution_paused -} diff --git a/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/variables.tf b/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/variables.tf deleted file mode 100644 index c404f0ed86..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema/basic_with_pipe_execution_paused/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "pipe_execution_paused" { - type = bool -} diff --git a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/test.tf b/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/test.tf deleted file mode 100644 index 8c6b4a946b..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.schema - database = var.database - data_retention_time_in_days = var.schema_data_retention_time -} diff --git a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/variables.tf b/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/variables.tf deleted file mode 100644 index 6391b86535..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithDataRetentionSet/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "schema_data_retention_time" { - type = number -} diff --git a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/test.tf b/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/test.tf deleted file mode 100644 index 7a75568159..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/test.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.schema - database = var.database -} diff --git a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/variables.tf b/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/variables.tf deleted file mode 100644 index 626dbab534..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_DefaultDataRetentionTime/WithoutDataRetentionSet/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/test.tf b/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/test.tf deleted file mode 100644 index af36440e58..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/test.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.schema_name - database = var.database_name -} \ No newline at end of file diff --git a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/variables.tf b/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/variables.tf deleted file mode 100644 index 062e50b07f..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "schema_name" { - type = string -} - -variable "database_name" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/test.tf b/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/test.tf deleted file mode 100644 index c2593b610c..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/test.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "snowflake_database" "test" { - name = var.database_name -} - -resource "snowflake_schema" "test" { - database = snowflake_database.test.fully_qualified_name - name = var.schema_name -} diff --git a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/variables.tf b/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/variables.tf deleted file mode 100644 index 062e50b07f..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_RemoveOutsideOfTerraform_dbInConfig/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "schema_name" { - type = string -} - -variable "database_name" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema_Rename/test.tf b/pkg/resources/testdata/TestAcc_Schema_Rename/test.tf deleted file mode 100644 index ce85eca50c..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_Rename/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - comment = var.comment -} \ No newline at end of file diff --git a/pkg/resources/testdata/TestAcc_Schema_Rename/variables.tf b/pkg/resources/testdata/TestAcc_Schema_Rename/variables.tf deleted file mode 100644 index 0c8231993a..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_Rename/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "comment" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/test.tf b/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/test.tf deleted file mode 100644 index 4325ee4234..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/test.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database -} \ No newline at end of file diff --git a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/variables.tf b/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/variables.tf deleted file mode 100644 index 2cf13b7d6e..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/1/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/test.tf b/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/test.tf deleted file mode 100644 index 0b1a598ccf..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/test.tf +++ /dev/null @@ -1,13 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database -} - -resource "snowflake_database" "test" { - name = var.new_database -} - -resource "snowflake_schema" "test_2" { - name = var.name - database = snowflake_database.test.name -} diff --git a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/variables.tf b/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/variables.tf deleted file mode 100644 index f62a0992c8..0000000000 --- a/pkg/resources/testdata/TestAcc_Schema_TwoSchemasWithTheSameNameOnDifferentDatabases/2/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "new_database" { - type = string -} diff --git a/pkg/sdk/identifier_helpers.go b/pkg/sdk/identifier_helpers.go index 308535c4f8..3e8e9e65ea 100644 --- a/pkg/sdk/identifier_helpers.go +++ b/pkg/sdk/identifier_helpers.go @@ -174,6 +174,10 @@ type DatabaseObjectIdentifier struct { name string } +func NewDatabaseObjectIdentifierInDatabase(databaseId AccountObjectIdentifier, name string) DatabaseObjectIdentifier { + return NewDatabaseObjectIdentifier(databaseId.Name(), name) +} + func NewDatabaseObjectIdentifier(databaseName, name string) DatabaseObjectIdentifier { return DatabaseObjectIdentifier{ databaseName: strings.Trim(databaseName, `"`), From 4cbfe56b7dc62a6c4f88ca830a0219aadcd1568b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 15:05:03 +0200 Subject: [PATCH 13/16] Fix scim integration acceptance tests setups --- .../scim_integration_acceptance_test.go | 459 ++++++++---------- .../TestAcc_ScimIntegration/basic/test.tf | 6 - .../basic/variables.tf | 12 - .../TestAcc_ScimIntegration/complete/test.tf | 9 - .../complete/variables.tf | 21 - .../completeAzure/test.tf | 8 - .../completeAzure/variables.tf | 18 - .../TestAcc_ScimIntegration/invalid/test.tf | 2 +- .../invalid/variables.tf | 3 - 9 files changed, 213 insertions(+), 325 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/complete/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/complete/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_ScimIntegration/invalid/variables.tf diff --git a/pkg/resources/scim_integration_acceptance_test.go b/pkg/resources/scim_integration_acceptance_test.go index 70ba9d7d52..fdbb2716fb 100644 --- a/pkg/resources/scim_integration_acceptance_test.go +++ b/pkg/resources/scim_integration_acceptance_test.go @@ -6,18 +6,20 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" resourcehelpers "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" r "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" tfjson "github.com/hashicorp/terraform-json" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/importchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/planchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" @@ -32,21 +34,14 @@ func TestAcc_ScimIntegration_basic(t *testing.T) { role, role2 := snowflakeroles.GenericScimProvisioner, snowflakeroles.OktaProvisioner id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + comment := random.Comment() - m := func(enabled bool, scimClient sdk.ScimSecurityIntegrationScimClientOption, runAsRole sdk.AccountObjectIdentifier, complete bool) map[string]config.Variable { - c := map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "scim_client": config.StringVariable(string(scimClient)), - "run_as_role": config.StringVariable(runAsRole.Name()), - "enabled": config.BoolVariable(enabled), - } - if complete { - c["sync_password"] = config.BoolVariable(false) - c["network_policy_name"] = config.StringVariable(networkPolicy.ID().Name()) - c["comment"] = config.StringVariable("foo") - } - return c - } + scimModelBasic := model.ScimSecurityIntegration("test", false, id.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + scimModelOktaFull := model.ScimSecurityIntegration("test", true, id.Name(), role2.Name(), string(sdk.ScimSecurityIntegrationScimClientOkta)). + WithSyncPassword(r.BooleanFalse). + WithNetworkPolicy(networkPolicy.ID().Name()). + WithComment(comment) + scimModelOkta := model.ScimSecurityIntegration("test", true, id.Name(), role2.Name(), string(sdk.ScimSecurityIntegrationScimClientOkta)) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -58,39 +53,37 @@ func TestAcc_ScimIntegration_basic(t *testing.T) { Steps: []resource.TestStep{ // create with empty optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/basic"), - ConfigVariables: m(false, sdk.ScimSecurityIntegrationScimClientGeneric, role, false), + Config: accconfig.FromModels(t, scimModelBasic), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "enabled", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "scim_client", "GENERIC"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "run_as_role", role.Name()), - resource.TestCheckNoResourceAttr("snowflake_scim_integration.test", "network_policy"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "sync_password", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "comment", ""), - - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.integration_type", "SCIM - GENERIC"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.enabled", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.comment", ""), - resource.TestCheckResourceAttrSet("snowflake_scim_integration.test", "show_output.0.created_on"), - - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.enabled.0.value", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.network_policy.0.value", ""), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.run_as_role.0.value", role.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.sync_password.0.value", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.comment.0.value", ""), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "enabled", "false"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "scim_client", "GENERIC"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "run_as_role", role.Name()), + resource.TestCheckNoResourceAttr(scimModelBasic.ResourceReference(), "network_policy"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "sync_password", r.BooleanDefault), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "comment", ""), + + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.0.integration_type", "SCIM - GENERIC"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.0.enabled", "false"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "show_output.0.comment", ""), + resource.TestCheckResourceAttrSet(scimModelBasic.ResourceReference(), "show_output.0.created_on"), + + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.0.enabled.0.value", "false"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.0.network_policy.0.value", ""), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.0.run_as_role.0.value", role.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.0.sync_password.0.value", "false"), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "describe_output.0.comment.0.value", ""), ), }, // import - without optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/basic"), - ConfigVariables: m(false, sdk.ScimSecurityIntegrationScimClientGeneric, role, false), - ResourceName: "snowflake_scim_integration.test", - ImportState: true, + Config: accconfig.FromModels(t, scimModelBasic), + ResourceName: scimModelBasic.ResourceReference(), + ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "name", id.Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "enabled", "false"), @@ -103,39 +96,37 @@ func TestAcc_ScimIntegration_basic(t *testing.T) { }, // set optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(true, sdk.ScimSecurityIntegrationScimClientOkta, role2, true), + Config: accconfig.FromModels(t, scimModelOktaFull), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "enabled", "true"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "scim_client", "OKTA"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "run_as_role", role2.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "network_policy", networkPolicy.ID().Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "sync_password", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.integration_type", "SCIM - OKTA"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("snowflake_scim_integration.test", "show_output.0.created_on"), - - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.run_as_role.0.value", role2.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.sync_password.0.value", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "describe_output.0.comment.0.value", "foo"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "enabled", "true"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "scim_client", "OKTA"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "run_as_role", role2.Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "network_policy", networkPolicy.ID().Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "sync_password", "false"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.0.integration_type", "SCIM - OKTA"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(scimModelOktaFull.ResourceReference(), "show_output.0.created_on"), + + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.#", "1"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.0.run_as_role.0.value", role2.Name()), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.0.sync_password.0.value", "false"), + resource.TestCheckResourceAttr(scimModelOktaFull.ResourceReference(), "describe_output.0.comment.0.value", comment), ), }, // import - complete { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(true, sdk.ScimSecurityIntegrationScimClientOkta, role2, true), - ResourceName: "snowflake_scim_integration.test", - ImportState: true, + Config: accconfig.FromModels(t, scimModelOktaFull), + ResourceName: scimModelOktaFull.ResourceReference(), + ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "name", id.Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "fully_qualified_name", id.FullyQualifiedName()), @@ -144,21 +135,20 @@ func TestAcc_ScimIntegration_basic(t *testing.T) { importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "run_as_role", role2.Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "network_policy", networkPolicy.ID().Name()), importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "sync_password", "false"), - importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "comment", "foo"), + importchecks.TestCheckResourceAttrInstanceState(resourcehelpers.EncodeResourceIdentifier(id), "comment", comment), ), }, // unset { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/basic"), - ConfigVariables: m(true, sdk.ScimSecurityIntegrationScimClientOkta, role2, false), + Config: accconfig.FromModels(t, scimModelOkta), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "enabled", "true"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "scim_client", "OKTA"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "run_as_role", role2.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "network_policy", ""), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "sync_password", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "comment", ""), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "enabled", "true"), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "scim_client", "OKTA"), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "run_as_role", role2.Name()), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "network_policy", ""), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "sync_password", r.BooleanDefault), + resource.TestCheckResourceAttr(scimModelOkta.ResourceReference(), "comment", ""), ), }, }, @@ -171,19 +161,16 @@ func TestAcc_ScimIntegration_complete(t *testing.T) { networkPolicy, networkPolicyCleanup := acc.TestClient().NetworkPolicy.CreateNetworkPolicyNotEmpty(t) t.Cleanup(networkPolicyCleanup) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role := snowflakeroles.GenericScimProvisioner - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "enabled": config.BoolVariable(false), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientGeneric)), - "sync_password": config.BoolVariable(false), - "network_policy_name": config.StringVariable(networkPolicy.ID().Name()), - "run_as_role": config.StringVariable(role.Name()), - "comment": config.StringVariable("foo"), - } - } + comment := random.Comment() + + scimCompleteModel := model.ScimSecurityIntegration("test", false, id.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)). + WithSyncPassword(r.BooleanFalse). + WithNetworkPolicy(networkPolicy.ID().Name()). + WithComment(comment) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -193,23 +180,21 @@ func TestAcc_ScimIntegration_complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.ScimSecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, scimCompleteModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "enabled", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "scim_client", "GENERIC"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "run_as_role", role.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "network_policy", networkPolicy.ID().Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "sync_password", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "comment", "foo"), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "enabled", "false"), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "scim_client", "GENERIC"), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "run_as_role", role.Name()), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "network_policy", networkPolicy.ID().Name()), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "sync_password", "false"), + resource.TestCheckResourceAttr(scimCompleteModel.ResourceReference(), "comment", comment), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(), - ResourceName: "snowflake_scim_integration.test", + Config: accconfig.FromModels(t, scimCompleteModel), + ResourceName: scimCompleteModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -223,18 +208,15 @@ func TestAcc_ScimIntegration_completeAzure(t *testing.T) { networkPolicy, networkPolicyCleanup := acc.TestClient().NetworkPolicy.CreateNetworkPolicyNotEmpty(t) t.Cleanup(networkPolicyCleanup) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role := snowflakeroles.GenericScimProvisioner - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "enabled": config.BoolVariable(false), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientAzure)), - "network_policy_name": config.StringVariable(networkPolicy.Name), - "run_as_role": config.StringVariable(role.Name()), - "comment": config.StringVariable("foo"), - } - } + comment := random.Comment() + + scimCompleteAzureModel := model.ScimSecurityIntegration("test", false, id.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientAzure)). + WithNetworkPolicy(networkPolicy.ID().Name()). + WithComment(comment) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -244,22 +226,20 @@ func TestAcc_ScimIntegration_completeAzure(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.ScimSecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/completeAzure"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, scimCompleteAzureModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "enabled", "false"), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "scim_client", string(sdk.ScimSecurityIntegrationScimClientAzure)), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "run_as_role", role.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "network_policy", networkPolicy.ID().Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "sync_password", r.BooleanDefault), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "comment", "foo"), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "enabled", "false"), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "scim_client", string(sdk.ScimSecurityIntegrationScimClientAzure)), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "run_as_role", role.Name()), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "network_policy", networkPolicy.ID().Name()), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "sync_password", r.BooleanDefault), + resource.TestCheckResourceAttr(scimCompleteAzureModel.ResourceReference(), "comment", comment), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/completeAzure"), - ConfigVariables: m(), - ResourceName: "snowflake_scim_integration.test", + Config: accconfig.FromModels(t, scimCompleteAzureModel), + ResourceName: scimCompleteAzureModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -268,18 +248,13 @@ func TestAcc_ScimIntegration_completeAzure(t *testing.T) { } func TestAcc_ScimIntegration_InvalidScimClient(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "enabled": config.BoolVariable(false), - "scim_client": config.StringVariable("invalid"), - "sync_password": config.BoolVariable(false), - "network_policy_name": config.StringVariable("foo"), - "run_as_role": config.StringVariable(snowflakeroles.GenericScimProvisioner.Name()), - "comment": config.StringVariable("foo"), - } - } + + scimModelBasic := model.ScimSecurityIntegration("test", false, id.Name(), snowflakeroles.GenericScimProvisioner.Name(), "invalid") + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -288,27 +263,22 @@ func TestAcc_ScimIntegration_InvalidScimClient(t *testing.T) { }, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(), - ExpectError: regexp.MustCompile(`invalid ScimSecurityIntegrationScimClientOption: INVALID`), + Config: accconfig.FromModels(t, scimModelBasic), + PlanOnly: true, + ExpectError: regexp.MustCompile(`invalid ScimSecurityIntegrationScimClientOption: INVALID`), }, }, }) } func TestAcc_ScimIntegration_InvalidRunAsRole(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "enabled": config.BoolVariable(false), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientGeneric)), - "sync_password": config.BoolVariable(false), - "network_policy_name": config.StringVariable("foo"), - "run_as_role": config.StringVariable("invalid"), - "comment": config.StringVariable("foo"), - } - } + + scimModelBasic := model.ScimSecurityIntegration("test", false, id.Name(), "invalid", string(sdk.ScimSecurityIntegrationScimClientGeneric)) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -317,21 +287,18 @@ func TestAcc_ScimIntegration_InvalidRunAsRole(t *testing.T) { }, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(), - ExpectError: regexp.MustCompile(`invalid ScimSecurityIntegrationRunAsRoleOption: INVALID`), + Config: accconfig.FromModels(t, scimModelBasic), + PlanOnly: true, + ExpectError: regexp.MustCompile(`invalid ScimSecurityIntegrationRunAsRoleOption: INVALID`), }, }, }) } func TestAcc_ScimIntegration_InvalidIncomplete(t *testing.T) { - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - } - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -345,25 +312,23 @@ func TestAcc_ScimIntegration_InvalidIncomplete(t *testing.T) { Steps: []resource.TestStep{ { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/invalid"), - ConfigVariables: m(), + PlanOnly: true, }, }, }) } func TestAcc_ScimIntegration_InvalidCreateWithSyncPasswordWithAzure(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientAzure)), - "run_as_role": config.StringVariable(snowflakeroles.GenericScimProvisioner.Name()), - "enabled": config.BoolVariable(true), - "sync_password": config.BoolVariable(false), - "network_policy_name": config.StringVariable(""), - "comment": config.StringVariable("foo"), - } - } + comment := random.Comment() + + scimCompleteAzureModel := model.ScimSecurityIntegration("test", false, id.Name(), snowflakeroles.GenericScimProvisioner.Name(), string(sdk.ScimSecurityIntegrationScimClientAzure)). + WithComment(comment). + WithSyncPassword(r.BooleanFalse) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -375,29 +340,23 @@ func TestAcc_ScimIntegration_InvalidCreateWithSyncPasswordWithAzure(t *testing.T }), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, scimCompleteAzureModel), }, }, }) } func TestAcc_ScimIntegration_InvalidUpdateWithSyncPasswordWithAzure(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - m := func(complete bool) map[string]config.Variable { - c := map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientAzure)), - "run_as_role": config.StringVariable(snowflakeroles.GenericScimProvisioner.Name()), - "enabled": config.BoolVariable(true), - } - if complete { - c["sync_password"] = config.BoolVariable(false) - c["network_policy_name"] = config.StringVariable("") - c["comment"] = config.StringVariable("foo") - } - return c - } + comment := random.Comment() + + scimBasicAzureModel := model.ScimSecurityIntegration("test", false, id.Name(), snowflakeroles.GenericScimProvisioner.Name(), string(sdk.ScimSecurityIntegrationScimClientAzure)) + scimCompleteAzureModel := model.ScimSecurityIntegration("test", false, id.Name(), snowflakeroles.GenericScimProvisioner.Name(), string(sdk.ScimSecurityIntegrationScimClientAzure)). + WithComment(comment). + WithSyncPassword(r.BooleanFalse) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -410,20 +369,22 @@ func TestAcc_ScimIntegration_InvalidUpdateWithSyncPasswordWithAzure(t *testing.T }), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/basic"), - ConfigVariables: m(false), + Config: accconfig.FromModels(t, scimBasicAzureModel), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_ScimIntegration/complete"), - ConfigVariables: m(true), + Config: accconfig.FromModels(t, scimCompleteAzureModel), }, }, }) } func TestAcc_ScimIntegration_migrateFromVersion092EnabledTrue(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role := snowflakeroles.GenericScimProvisioner + resourceName := "snowflake_scim_integration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -440,7 +401,7 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledTrue(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: scimIntegrationv092(id.Name(), role.Name(), sdk.ScimSecurityIntegrationScimClientGeneric), + Config: scimIntegrationV092(id, role, sdk.ScimSecurityIntegrationScimClientGeneric), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "provisioner_role", role.Name()), @@ -449,16 +410,16 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledTrue(t *testing.T) { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: scimIntegrationv093(id.Name(), role.Name(), true, sdk.ScimSecurityIntegrationScimClientGeneric), + Config: scimIntegrationV093(id, role, true, sdk.ScimSecurityIntegrationScimClientGeneric), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.ExpectChange("snowflake_scim_integration.test", "name", tfjson.ActionUpdate, sdk.String(id.Name()), sdk.String(id.Name())), - planchecks.ExpectChange("snowflake_scim_integration.test", "enabled", tfjson.ActionUpdate, sdk.String("true"), sdk.String("true")), - planchecks.ExpectChange("snowflake_scim_integration.test", "scim_client", tfjson.ActionUpdate, sdk.String("GENERIC"), sdk.String("GENERIC")), - planchecks.ExpectChange("snowflake_scim_integration.test", "run_as_role", tfjson.ActionUpdate, sdk.String(role.Name()), sdk.String(role.Name())), - planchecks.ExpectChange("snowflake_scim_integration.test", "network_policy", tfjson.ActionUpdate, sdk.String(""), sdk.String("")), - planchecks.ExpectChange("snowflake_scim_integration.test", "sync_password", tfjson.ActionUpdate, nil, sdk.String(r.BooleanDefault)), - planchecks.ExpectChange("snowflake_scim_integration.test", "comment", tfjson.ActionUpdate, nil, nil), + planchecks.ExpectChange(resourceName, "name", tfjson.ActionUpdate, sdk.String(id.Name()), sdk.String(id.Name())), + planchecks.ExpectChange(resourceName, "enabled", tfjson.ActionUpdate, sdk.String("true"), sdk.String("true")), + planchecks.ExpectChange(resourceName, "scim_client", tfjson.ActionUpdate, sdk.String("GENERIC"), sdk.String("GENERIC")), + planchecks.ExpectChange(resourceName, "run_as_role", tfjson.ActionUpdate, sdk.String(role.Name()), sdk.String(role.Name())), + planchecks.ExpectChange(resourceName, "network_policy", tfjson.ActionUpdate, sdk.String(""), sdk.String("")), + planchecks.ExpectChange(resourceName, "sync_password", tfjson.ActionUpdate, nil, sdk.String(r.BooleanDefault)), + planchecks.ExpectChange(resourceName, "comment", tfjson.ActionUpdate, nil, nil), }, }, Check: resource.ComposeTestCheckFunc( @@ -472,8 +433,12 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledTrue(t *testing.T) { } func TestAcc_ScimIntegration_migrateFromVersion092EnabledFalse(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role := snowflakeroles.GenericScimProvisioner + resourceName := "snowflake_scim_integration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -490,7 +455,7 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledFalse(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: scimIntegrationv092(id.Name(), role.Name(), sdk.ScimSecurityIntegrationScimClientGeneric), + Config: scimIntegrationV092(id, role, sdk.ScimSecurityIntegrationScimClientGeneric), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "provisioner_role", role.Name()), @@ -499,7 +464,7 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledFalse(t *testing.T) { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: scimIntegrationv093(id.Name(), role.Name(), false, sdk.ScimSecurityIntegrationScimClientGeneric), + Config: scimIntegrationV093(id, role, false, sdk.ScimSecurityIntegrationScimClientGeneric), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{plancheck.ExpectNonEmptyPlan()}, }, @@ -514,8 +479,12 @@ func TestAcc_ScimIntegration_migrateFromVersion092EnabledFalse(t *testing.T) { } func TestAcc_ScimIntegration_migrateFromVersion093HandleSyncPassword(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role := snowflakeroles.GenericScimProvisioner + resourceName := "snowflake_scim_integration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -533,7 +502,7 @@ func TestAcc_ScimIntegration_migrateFromVersion093HandleSyncPassword(t *testing. Source: "Snowflake-Labs/snowflake", }, }, - Config: scimIntegrationv092(id.Name(), role.Name(), sdk.ScimSecurityIntegrationScimClientAzure), + Config: scimIntegrationV092(id, role, sdk.ScimSecurityIntegrationScimClientAzure), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), ), @@ -552,7 +521,7 @@ func TestAcc_ScimIntegration_migrateFromVersion093HandleSyncPassword(t *testing. planchecks.ExpectChange(resourceName, "sync_password", tfjson.ActionUpdate, nil, sdk.String(r.BooleanDefault)), }, }, - Config: scimIntegrationv093(id.Name(), role.Name(), true, sdk.ScimSecurityIntegrationScimClientAzure), + Config: scimIntegrationV093(id, role, true, sdk.ScimSecurityIntegrationScimClientAzure), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), ), @@ -562,7 +531,7 @@ func TestAcc_ScimIntegration_migrateFromVersion093HandleSyncPassword(t *testing. { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: scimIntegrationv093(id.Name(), role.Name(), true, sdk.ScimSecurityIntegrationScimClientAzure), + Config: scimIntegrationV093(id, role, true, sdk.ScimSecurityIntegrationScimClientAzure), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{plancheck.ExpectEmptyPlan()}, }, @@ -575,33 +544,35 @@ func TestAcc_ScimIntegration_migrateFromVersion093HandleSyncPassword(t *testing. }) } -func scimIntegrationv092(name, roleName string, scimClient sdk.ScimSecurityIntegrationScimClientOption) string { - s := ` +func scimIntegrationV092(scimId sdk.AccountObjectIdentifier, roleId sdk.AccountObjectIdentifier, scimClient sdk.ScimSecurityIntegrationScimClientOption) string { + return fmt.Sprintf(` resource "snowflake_scim_integration" "test" { - name = "%s" - scim_client = "%s" - provisioner_role = "%s" + name = "%[1]s" + provisioner_role = "%[2]s" + scim_client = "%[3]s" } -` - return fmt.Sprintf(s, name, scimClient, roleName) +`, scimId.Name(), roleId.Name(), scimClient) } -func scimIntegrationv093(name, roleName string, enabled bool, scimClient sdk.ScimSecurityIntegrationScimClientOption) string { - s := ` +func scimIntegrationV093(scimId sdk.AccountObjectIdentifier, roleId sdk.AccountObjectIdentifier, enabled bool, scimClient sdk.ScimSecurityIntegrationScimClientOption) string { + return fmt.Sprintf(` resource "snowflake_scim_integration" "test" { - name = "%s" - enabled = %t - scim_client = "%s" - run_as_role = "%s" + name = "%[1]s" + run_as_role = "%[2]s" + scim_client = "%[3]s" + enabled = %[4]t } -` - return fmt.Sprintf(s, name, enabled, scimClient, roleName) +`, scimId.Name(), roleId.Name(), scimClient, enabled) } func TestAcc_ScimIntegration_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + + scimModelBasic := model.ScimSecurityIntegration("test", false, id.Name(), snowflakeroles.GenericScimProvisioner.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -617,17 +588,17 @@ func TestAcc_ScimIntegration_migrateFromV0941_ensureSmoothUpgradeWithNewResource Source: "Snowflake-Labs/snowflake", }, }, - Config: scimIntegrationBasicConfig(id.Name()), + Config: accconfig.FromModels(t, scimModelBasic), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "id", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: scimIntegrationBasicConfig(id.Name()), + Config: accconfig.FromModels(t, scimModelBasic), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "id", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "id", id.Name()), ), }, }, @@ -635,8 +606,13 @@ func TestAcc_ScimIntegration_migrateFromV0941_ensureSmoothUpgradeWithNewResource } func TestAcc_ScimIntegration_IdentifierQuotingDiffSuppression(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - quotedId := fmt.Sprintf(`\"%s\"`, id.Name()) + quotedId := fmt.Sprintf(`"%s"`, id.Name()) + + scimModelBasic := model.ScimSecurityIntegration("test", false, quotedId, snowflakeroles.GenericScimProvisioner.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -654,40 +630,29 @@ func TestAcc_ScimIntegration_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: scimIntegrationBasicConfig(quotedId), + Config: accconfig.FromModels(t, scimModelBasic), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "id", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: scimIntegrationBasicConfig(quotedId), + Config: accconfig.FromModels(t, scimModelBasic), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_scim_integration.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(scimModelBasic.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_scim_integration.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(scimModelBasic.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_scim_integration.test", "id", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(scimModelBasic.ResourceReference(), "id", id.Name()), ), }, }, }) } - -func scimIntegrationBasicConfig(name string) string { - return fmt.Sprintf(` - resource "snowflake_scim_integration" "test" { - name = "%s" - scim_client = "GENERIC" - run_as_role = "%s" - enabled = true - } - `, name, snowflakeroles.GenericScimProvisioner.Name()) -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/basic/test.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/basic/test.tf deleted file mode 100644 index 5a58953f98..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/basic/test.tf +++ /dev/null @@ -1,6 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name - scim_client = var.scim_client - run_as_role = var.run_as_role - enabled = var.enabled -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/basic/variables.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/basic/variables.tf deleted file mode 100644 index f92c52349b..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/basic/variables.tf +++ /dev/null @@ -1,12 +0,0 @@ -variable "name" { - type = string -} -variable "scim_client" { - type = string -} -variable "run_as_role" { - type = string -} -variable "enabled" { - type = bool -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/complete/test.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/complete/test.tf deleted file mode 100644 index 45be7c7095..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/complete/test.tf +++ /dev/null @@ -1,9 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name - enabled = var.enabled - scim_client = var.scim_client - sync_password = var.sync_password - network_policy = var.network_policy_name - run_as_role = var.run_as_role - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/complete/variables.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/complete/variables.tf deleted file mode 100644 index b1a9dd64a1..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/complete/variables.tf +++ /dev/null @@ -1,21 +0,0 @@ -variable "name" { - type = string -} -variable "enabled" { - type = bool -} -variable "scim_client" { - type = string -} -variable "sync_password" { - type = bool -} -variable "network_policy_name" { - type = string -} -variable "run_as_role" { - type = string -} -variable "comment" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/test.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/test.tf deleted file mode 100644 index ad7cd9a0cf..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/test.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name - enabled = var.enabled - scim_client = var.scim_client - network_policy = var.network_policy_name - run_as_role = var.run_as_role - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/variables.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/variables.tf deleted file mode 100644 index 8a2d104e63..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/completeAzure/variables.tf +++ /dev/null @@ -1,18 +0,0 @@ -variable "name" { - type = string -} -variable "enabled" { - type = bool -} -variable "scim_client" { - type = string -} -variable "network_policy_name" { - type = string -} -variable "run_as_role" { - type = string -} -variable "comment" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/test.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/test.tf index c41dda5584..ad7ad4111e 100644 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/test.tf +++ b/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/test.tf @@ -1,3 +1,3 @@ resource "snowflake_scim_integration" "test" { - name = var.name + name = "some_name" } diff --git a/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/variables.tf b/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/variables.tf deleted file mode 100644 index 77e5cc9698..0000000000 --- a/pkg/resources/testdata/TestAcc_ScimIntegration/invalid/variables.tf +++ /dev/null @@ -1,3 +0,0 @@ -variable "name" { - type = string -} From 25f9b127581a95867022ea10ffef35daaec4160b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 15:07:34 +0200 Subject: [PATCH 14/16] Verify secondary connection acceptance tests setups --- .../secondary_connection_acceptance_test.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/resources/secondary_connection_acceptance_test.go b/pkg/resources/secondary_connection_acceptance_test.go index df404e42c8..2ea3abcdc8 100644 --- a/pkg/resources/secondary_connection_acceptance_test.go +++ b/pkg/resources/secondary_connection_acceptance_test.go @@ -9,6 +9,7 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/importchecks" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" @@ -34,8 +35,11 @@ func TestAcc_SecondaryConnection_Basic(t *testing.T) { acc.SecondaryTestClient().Connection.Alter(t, sdk.NewAlterConnectionRequest(connection.ID()).WithEnableConnectionFailover(*sdk.NewEnableConnectionFailoverRequest([]sdk.AccountIdentifier{accountId}))) primaryConnectionAsExternalId := sdk.NewExternalObjectIdentifier(accountId, connection.ID()) + comment := random.Comment() + secondaryConnectionModel := model.SecondaryConnection("t", primaryConnectionAsExternalId.FullyQualifiedName(), connection.ID().Name()) - secondaryConnectionModelWithComment := model.SecondaryConnection("t", primaryConnectionAsExternalId.FullyQualifiedName(), connection.ID().Name()).WithComment("secondary connection test comment") + secondaryConnectionModelWithComment := model.SecondaryConnection("t", primaryConnectionAsExternalId.FullyQualifiedName(), connection.ID().Name()). + WithComment(comment) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -80,10 +84,10 @@ func TestAcc_SecondaryConnection_Basic(t *testing.T) { resourceassert.SecondaryConnectionResource(t, secondaryConnectionModelWithComment.ResourceReference()). HasNameString(connection.ID().Name()). HasFullyQualifiedNameString(connection.ID().FullyQualifiedName()). - HasCommentString("secondary connection test comment"), + HasCommentString(comment), resourceshowoutputassert.ConnectionShowOutput(t, secondaryConnectionModelWithComment.ResourceReference()). - HasComment("secondary connection test comment"), + HasComment(comment), ), ), }, @@ -94,7 +98,7 @@ func TestAcc_SecondaryConnection_Basic(t *testing.T) { ImportStateVerify: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(connection.ID()), "name", connection.ID().Name()), - importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(connection.ID()), "comment", "secondary connection test comment"), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(connection.ID()), "comment", comment), ), }, // unset comment From efee08fa1700219bc1dbe417c2cfeda40b1bda61 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 15:12:42 +0200 Subject: [PATCH 15/16] Add secondary database config model builder --- .../resourceassert/gen/resource_schema_def.go | 4 + .../model/secondary_database_model_gen.go | 301 ++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/secondary_database_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go index 62d52ba0c6..4da9b951ec 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -209,4 +209,8 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "AccountRole", schema: resources.AccountRole().Schema, }, + { + name: "SecondaryDatabase", + schema: resources.SecondaryDatabase().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/secondary_database_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/secondary_database_model_gen.go new file mode 100644 index 0000000000..8766a66e09 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/secondary_database_model_gen.go @@ -0,0 +1,301 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +import ( + "encoding/json" + + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" +) + +type SecondaryDatabaseModel struct { + AsReplicaOf tfconfig.Variable `json:"as_replica_of,omitempty"` + Catalog tfconfig.Variable `json:"catalog,omitempty"` + Comment tfconfig.Variable `json:"comment,omitempty"` + DataRetentionTimeInDays tfconfig.Variable `json:"data_retention_time_in_days,omitempty"` + DefaultDdlCollation tfconfig.Variable `json:"default_ddl_collation,omitempty"` + EnableConsoleOutput tfconfig.Variable `json:"enable_console_output,omitempty"` + ExternalVolume tfconfig.Variable `json:"external_volume,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + IsTransient tfconfig.Variable `json:"is_transient,omitempty"` + LogLevel tfconfig.Variable `json:"log_level,omitempty"` + MaxDataExtensionTimeInDays tfconfig.Variable `json:"max_data_extension_time_in_days,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + QuotedIdentifiersIgnoreCase tfconfig.Variable `json:"quoted_identifiers_ignore_case,omitempty"` + ReplaceInvalidCharacters tfconfig.Variable `json:"replace_invalid_characters,omitempty"` + StorageSerializationPolicy tfconfig.Variable `json:"storage_serialization_policy,omitempty"` + SuspendTaskAfterNumFailures tfconfig.Variable `json:"suspend_task_after_num_failures,omitempty"` + TaskAutoRetryAttempts tfconfig.Variable `json:"task_auto_retry_attempts,omitempty"` + TraceLevel tfconfig.Variable `json:"trace_level,omitempty"` + UserTaskManagedInitialWarehouseSize tfconfig.Variable `json:"user_task_managed_initial_warehouse_size,omitempty"` + UserTaskMinimumTriggerIntervalInSeconds tfconfig.Variable `json:"user_task_minimum_trigger_interval_in_seconds,omitempty"` + UserTaskTimeoutMs tfconfig.Variable `json:"user_task_timeout_ms,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func SecondaryDatabase( + resourceName string, + asReplicaOf string, + name string, +) *SecondaryDatabaseModel { + s := &SecondaryDatabaseModel{ResourceModelMeta: config.Meta(resourceName, resources.SecondaryDatabase)} + s.WithAsReplicaOf(asReplicaOf) + s.WithName(name) + return s +} + +func SecondaryDatabaseWithDefaultMeta( + asReplicaOf string, + name string, +) *SecondaryDatabaseModel { + s := &SecondaryDatabaseModel{ResourceModelMeta: config.DefaultMeta(resources.SecondaryDatabase)} + s.WithAsReplicaOf(asReplicaOf) + s.WithName(name) + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *SecondaryDatabaseModel) MarshalJSON() ([]byte, error) { + type Alias SecondaryDatabaseModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + }) +} + +func (s *SecondaryDatabaseModel) WithDependsOn(values ...string) *SecondaryDatabaseModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (s *SecondaryDatabaseModel) WithAsReplicaOf(asReplicaOf string) *SecondaryDatabaseModel { + s.AsReplicaOf = tfconfig.StringVariable(asReplicaOf) + return s +} + +func (s *SecondaryDatabaseModel) WithCatalog(catalog string) *SecondaryDatabaseModel { + s.Catalog = tfconfig.StringVariable(catalog) + return s +} + +func (s *SecondaryDatabaseModel) WithComment(comment string) *SecondaryDatabaseModel { + s.Comment = tfconfig.StringVariable(comment) + return s +} + +func (s *SecondaryDatabaseModel) WithDataRetentionTimeInDays(dataRetentionTimeInDays int) *SecondaryDatabaseModel { + s.DataRetentionTimeInDays = tfconfig.IntegerVariable(dataRetentionTimeInDays) + return s +} + +func (s *SecondaryDatabaseModel) WithDefaultDdlCollation(defaultDdlCollation string) *SecondaryDatabaseModel { + s.DefaultDdlCollation = tfconfig.StringVariable(defaultDdlCollation) + return s +} + +func (s *SecondaryDatabaseModel) WithEnableConsoleOutput(enableConsoleOutput bool) *SecondaryDatabaseModel { + s.EnableConsoleOutput = tfconfig.BoolVariable(enableConsoleOutput) + return s +} + +func (s *SecondaryDatabaseModel) WithExternalVolume(externalVolume string) *SecondaryDatabaseModel { + s.ExternalVolume = tfconfig.StringVariable(externalVolume) + return s +} + +func (s *SecondaryDatabaseModel) WithFullyQualifiedName(fullyQualifiedName string) *SecondaryDatabaseModel { + s.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return s +} + +func (s *SecondaryDatabaseModel) WithIsTransient(isTransient bool) *SecondaryDatabaseModel { + s.IsTransient = tfconfig.BoolVariable(isTransient) + return s +} + +func (s *SecondaryDatabaseModel) WithLogLevel(logLevel string) *SecondaryDatabaseModel { + s.LogLevel = tfconfig.StringVariable(logLevel) + return s +} + +func (s *SecondaryDatabaseModel) WithMaxDataExtensionTimeInDays(maxDataExtensionTimeInDays int) *SecondaryDatabaseModel { + s.MaxDataExtensionTimeInDays = tfconfig.IntegerVariable(maxDataExtensionTimeInDays) + return s +} + +func (s *SecondaryDatabaseModel) WithName(name string) *SecondaryDatabaseModel { + s.Name = tfconfig.StringVariable(name) + return s +} + +func (s *SecondaryDatabaseModel) WithQuotedIdentifiersIgnoreCase(quotedIdentifiersIgnoreCase bool) *SecondaryDatabaseModel { + s.QuotedIdentifiersIgnoreCase = tfconfig.BoolVariable(quotedIdentifiersIgnoreCase) + return s +} + +func (s *SecondaryDatabaseModel) WithReplaceInvalidCharacters(replaceInvalidCharacters bool) *SecondaryDatabaseModel { + s.ReplaceInvalidCharacters = tfconfig.BoolVariable(replaceInvalidCharacters) + return s +} + +func (s *SecondaryDatabaseModel) WithStorageSerializationPolicy(storageSerializationPolicy string) *SecondaryDatabaseModel { + s.StorageSerializationPolicy = tfconfig.StringVariable(storageSerializationPolicy) + return s +} + +func (s *SecondaryDatabaseModel) WithSuspendTaskAfterNumFailures(suspendTaskAfterNumFailures int) *SecondaryDatabaseModel { + s.SuspendTaskAfterNumFailures = tfconfig.IntegerVariable(suspendTaskAfterNumFailures) + return s +} + +func (s *SecondaryDatabaseModel) WithTaskAutoRetryAttempts(taskAutoRetryAttempts int) *SecondaryDatabaseModel { + s.TaskAutoRetryAttempts = tfconfig.IntegerVariable(taskAutoRetryAttempts) + return s +} + +func (s *SecondaryDatabaseModel) WithTraceLevel(traceLevel string) *SecondaryDatabaseModel { + s.TraceLevel = tfconfig.StringVariable(traceLevel) + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskManagedInitialWarehouseSize(userTaskManagedInitialWarehouseSize string) *SecondaryDatabaseModel { + s.UserTaskManagedInitialWarehouseSize = tfconfig.StringVariable(userTaskManagedInitialWarehouseSize) + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskMinimumTriggerIntervalInSeconds(userTaskMinimumTriggerIntervalInSeconds int) *SecondaryDatabaseModel { + s.UserTaskMinimumTriggerIntervalInSeconds = tfconfig.IntegerVariable(userTaskMinimumTriggerIntervalInSeconds) + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskTimeoutMs(userTaskTimeoutMs int) *SecondaryDatabaseModel { + s.UserTaskTimeoutMs = tfconfig.IntegerVariable(userTaskTimeoutMs) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *SecondaryDatabaseModel) WithAsReplicaOfValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.AsReplicaOf = value + return s +} + +func (s *SecondaryDatabaseModel) WithCatalogValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.Catalog = value + return s +} + +func (s *SecondaryDatabaseModel) WithCommentValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.Comment = value + return s +} + +func (s *SecondaryDatabaseModel) WithDataRetentionTimeInDaysValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.DataRetentionTimeInDays = value + return s +} + +func (s *SecondaryDatabaseModel) WithDefaultDdlCollationValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.DefaultDdlCollation = value + return s +} + +func (s *SecondaryDatabaseModel) WithEnableConsoleOutputValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.EnableConsoleOutput = value + return s +} + +func (s *SecondaryDatabaseModel) WithExternalVolumeValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.ExternalVolume = value + return s +} + +func (s *SecondaryDatabaseModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.FullyQualifiedName = value + return s +} + +func (s *SecondaryDatabaseModel) WithIsTransientValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.IsTransient = value + return s +} + +func (s *SecondaryDatabaseModel) WithLogLevelValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.LogLevel = value + return s +} + +func (s *SecondaryDatabaseModel) WithMaxDataExtensionTimeInDaysValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.MaxDataExtensionTimeInDays = value + return s +} + +func (s *SecondaryDatabaseModel) WithNameValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.Name = value + return s +} + +func (s *SecondaryDatabaseModel) WithQuotedIdentifiersIgnoreCaseValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.QuotedIdentifiersIgnoreCase = value + return s +} + +func (s *SecondaryDatabaseModel) WithReplaceInvalidCharactersValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.ReplaceInvalidCharacters = value + return s +} + +func (s *SecondaryDatabaseModel) WithStorageSerializationPolicyValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.StorageSerializationPolicy = value + return s +} + +func (s *SecondaryDatabaseModel) WithSuspendTaskAfterNumFailuresValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.SuspendTaskAfterNumFailures = value + return s +} + +func (s *SecondaryDatabaseModel) WithTaskAutoRetryAttemptsValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.TaskAutoRetryAttempts = value + return s +} + +func (s *SecondaryDatabaseModel) WithTraceLevelValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.TraceLevel = value + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskManagedInitialWarehouseSizeValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.UserTaskManagedInitialWarehouseSize = value + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskMinimumTriggerIntervalInSecondsValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.UserTaskMinimumTriggerIntervalInSeconds = value + return s +} + +func (s *SecondaryDatabaseModel) WithUserTaskTimeoutMsValue(value tfconfig.Variable) *SecondaryDatabaseModel { + s.UserTaskTimeoutMs = value + return s +} From 3d43f2ea1f5f5ea183a1aeb7b41a313ff8646f84 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 15:40:53 +0200 Subject: [PATCH 16/16] Fix secondary database resource acceptance test setups --- .../secondary_database_acceptance_test.go | 549 +++++++++--------- .../TestAcc_SecondaryDatabase/basic/test.tf | 5 - .../basic/variables.tf | 12 - .../complete-optionals-set/test.tf | 22 - .../complete-optionals-set/variables.tf | 75 --- .../complete-optionals-unset/test.tf | 4 - .../complete-optionals-unset/variables.tf | 7 - 7 files changed, 262 insertions(+), 412 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/variables.tf diff --git a/pkg/resources/secondary_database_acceptance_test.go b/pkg/resources/secondary_database_acceptance_test.go index 22cb7c5611..548d81090c 100644 --- a/pkg/resources/secondary_database_acceptance_test.go +++ b/pkg/resources/secondary_database_acceptance_test.go @@ -2,25 +2,29 @@ package resources_test import ( "fmt" - "strconv" "testing" "time" - "github.com/hashicorp/terraform-plugin-testing/plancheck" + acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers" - - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/tfversion" "github.com/stretchr/testify/require" ) +// TODO [SNOW-1991414]: discuss and address all the nondeterministic tests in this file func TestAcc_CreateSecondaryDatabase_Basic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() @@ -54,13 +58,10 @@ func TestAcc_CreateSecondaryDatabase_Basic(t *testing.T) { accountEnableConsoleOutput = new(string) ) - configVariables := func(id sdk.AccountObjectIdentifier, primaryDatabaseName sdk.ExternalObjectIdentifier, comment string) config.Variables { - return config.Variables{ - "name": config.StringVariable(id.Name()), - "as_replica_of": config.StringVariable(primaryDatabaseName.FullyQualifiedName()), - "comment": config.StringVariable(comment), - } - } + secondaryDatabaseModel := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), id.Name()). + WithComment(comment) + renamedSecondaryDatabaseModel := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), newId.Name()). + WithComment(newComment) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -90,65 +91,62 @@ func TestAcc_CreateSecondaryDatabase_Basic(t *testing.T) { *accountQuotedIdentifiersIgnoreCase = helpers.FindParameter(t, params, sdk.AccountParameterQuotedIdentifiersIgnoreCase).Value *accountEnableConsoleOutput = helpers.FindParameter(t, params, sdk.AccountParameterEnableConsoleOutput).Value }, - ConfigVariables: configVariables(id, externalPrimaryId, comment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/basic"), + Config: accconfig.FromModels(t, secondaryDatabaseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", comment), - - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), ), }, // Rename + comment update { - ConfigVariables: configVariables(newId, externalPrimaryId, newComment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/basic"), + Config: accconfig.FromModels(t, renamedSecondaryDatabaseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "fully_qualified_name", newId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", newComment), - - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttr(renamedSecondaryDatabaseModel.ResourceReference(), "name", newId.Name()), + resource.TestCheckResourceAttr(renamedSecondaryDatabaseModel.ResourceReference(), "fully_qualified_name", newId.FullyQualifiedName()), + resource.TestCheckResourceAttr(renamedSecondaryDatabaseModel.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(renamedSecondaryDatabaseModel.ResourceReference(), "comment", newComment), + + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(renamedSecondaryDatabaseModel.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), ), }, // Import all values { - ConfigVariables: configVariables(newId, externalPrimaryId, newComment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/basic"), - ResourceName: "snowflake_secondary_database.test", + Config: accconfig.FromModels(t, renamedSecondaryDatabaseModel), + ResourceName: renamedSecondaryDatabaseModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -157,16 +155,8 @@ func TestAcc_CreateSecondaryDatabase_Basic(t *testing.T) { } func TestAcc_CreateSecondaryDatabase_complete(t *testing.T) { - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - comment := random.Comment() - - primaryDatabase, externalPrimaryId, _ := acc.SecondaryTestClient().Database.CreatePrimaryDatabase(t, []sdk.AccountIdentifier{ - sdk.NewAccountIdentifierFromAccountLocator(acc.TestClient().GetAccountLocator()), - }) - t.Cleanup(func() { - // TODO(SNOW-1562172): Create a better solution for this type of situations - require.Eventually(t, func() bool { return acc.SecondaryTestClient().Database.DropDatabase(t, primaryDatabase.ID()) == nil }, time.Second*5, time.Second) - }) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) t.Cleanup(externalVolumeCleanup) @@ -174,15 +164,25 @@ func TestAcc_CreateSecondaryDatabase_complete(t *testing.T) { catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) t.Cleanup(catalogCleanup) - newId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - newComment := random.Comment() - newExternalVolumeId, newExternalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) t.Cleanup(newExternalVolumeCleanup) newCatalogId, newCatalogCleanup := acc.TestClient().CatalogIntegration.Create(t) t.Cleanup(newCatalogCleanup) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + newId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + comment := random.Comment() + newComment := random.Comment() + + primaryDatabase, externalPrimaryId, _ := acc.SecondaryTestClient().Database.CreatePrimaryDatabase(t, []sdk.AccountIdentifier{ + sdk.NewAccountIdentifierFromAccountLocator(acc.TestClient().GetAccountLocator()), + }) + t.Cleanup(func() { + // TODO(SNOW-1562172): Create a better solution for this type of situations + require.Eventually(t, func() bool { return acc.SecondaryTestClient().Database.DropDatabase(t, primaryDatabase.ID()) == nil }, time.Second*5, time.Second) + }) + var ( accountDataRetentionTimeInDays = new(string) accountMaxDataExtensionTimeInDays = new(string) @@ -202,56 +202,43 @@ func TestAcc_CreateSecondaryDatabase_complete(t *testing.T) { accountEnableConsoleOutput = new(string) ) - unsetConfigVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "as_replica_of": config.StringVariable(externalPrimaryId.FullyQualifiedName()), - } - - setConfigVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "as_replica_of": config.StringVariable(externalPrimaryId.FullyQualifiedName()), - "comment": config.StringVariable(comment), - - "data_retention_time_in_days": config.IntegerVariable(20), - "max_data_extension_time_in_days": config.IntegerVariable(25), - "external_volume": config.StringVariable(externalVolumeId.Name()), - "catalog": config.StringVariable(catalogId.Name()), - "replace_invalid_characters": config.BoolVariable(true), - "default_ddl_collation": config.StringVariable("en_US"), - "storage_serialization_policy": config.StringVariable(string(sdk.StorageSerializationPolicyCompatible)), - "log_level": config.StringVariable(string(sdk.LogLevelDebug)), - "trace_level": config.StringVariable(string(sdk.TraceLevelAlways)), - "suspend_task_after_num_failures": config.IntegerVariable(20), - "task_auto_retry_attempts": config.IntegerVariable(20), - "user_task_managed_initial_warehouse_size": config.StringVariable(string(sdk.WarehouseSizeLarge)), - "user_task_timeout_ms": config.IntegerVariable(1200000), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(60), - "quoted_identifiers_ignore_case": config.BoolVariable(true), - "enable_console_output": config.BoolVariable(true), - } - - updatedConfigVariables := config.Variables{ - "name": config.StringVariable(newId.Name()), - "as_replica_of": config.StringVariable(externalPrimaryId.FullyQualifiedName()), - "comment": config.StringVariable(newComment), - - "data_retention_time_in_days": config.IntegerVariable(40), - "max_data_extension_time_in_days": config.IntegerVariable(45), - "external_volume": config.StringVariable(newExternalVolumeId.Name()), - "catalog": config.StringVariable(newCatalogId.Name()), - "replace_invalid_characters": config.BoolVariable(false), - "default_ddl_collation": config.StringVariable("en_GB"), - "storage_serialization_policy": config.StringVariable(string(sdk.StorageSerializationPolicyOptimized)), - "log_level": config.StringVariable(string(sdk.LogLevelInfo)), - "trace_level": config.StringVariable(string(sdk.TraceLevelOnEvent)), - "suspend_task_after_num_failures": config.IntegerVariable(40), - "task_auto_retry_attempts": config.IntegerVariable(40), - "user_task_managed_initial_warehouse_size": config.StringVariable(string(sdk.WarehouseSizeXLarge)), - "user_task_timeout_ms": config.IntegerVariable(2400000), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(120), - "quoted_identifiers_ignore_case": config.BoolVariable(false), - "enable_console_output": config.BoolVariable(false), - } + secondaryDatabaseModel := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), id.Name()) + secondaryDatabaseModelComplete := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), id.Name()). + WithComment(comment). + WithDataRetentionTimeInDays(20). + WithMaxDataExtensionTimeInDays(25). + WithExternalVolume(externalVolumeId.Name()). + WithCatalog(catalogId.Name()). + WithReplaceInvalidCharacters(true). + WithDefaultDdlCollation("en_US"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyCompatible)). + WithLogLevel(string(sdk.LogLevelDebug)). + WithTraceLevel(string(sdk.TraceLevelAlways)). + WithSuspendTaskAfterNumFailures(20). + WithTaskAutoRetryAttempts(20). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeLarge)). + WithUserTaskTimeoutMs(1200000). + WithUserTaskMinimumTriggerIntervalInSeconds(60). + WithQuotedIdentifiersIgnoreCase(true). + WithEnableConsoleOutput(true) + secondaryDatabaseModelCompleteUpdated := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), newId.Name()). + WithComment(newComment). + WithDataRetentionTimeInDays(40). + WithMaxDataExtensionTimeInDays(45). + WithExternalVolume(newExternalVolumeId.Name()). + WithCatalog(newCatalogId.Name()). + WithReplaceInvalidCharacters(false). + WithDefaultDdlCollation("en_GB"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyOptimized)). + WithLogLevel(string(sdk.LogLevelInfo)). + WithTraceLevel(string(sdk.TraceLevelOnEvent)). + WithSuspendTaskAfterNumFailures(40). + WithTaskAutoRetryAttempts(40). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeXLarge)). + WithUserTaskTimeoutMs(2400000). + WithUserTaskMinimumTriggerIntervalInSeconds(120). + WithQuotedIdentifiersIgnoreCase(false). + WithEnableConsoleOutput(false) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -281,118 +268,113 @@ func TestAcc_CreateSecondaryDatabase_complete(t *testing.T) { *accountQuotedIdentifiersIgnoreCase = helpers.FindParameter(t, params, sdk.AccountParameterQuotedIdentifiersIgnoreCase).Value *accountEnableConsoleOutput = helpers.FindParameter(t, params, sdk.AccountParameterEnableConsoleOutput).Value }, - ConfigVariables: setConfigVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModelComplete), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "is_transient", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", comment), - - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "max_data_extension_time_in_days", "25"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "external_volume", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "catalog", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "replace_invalid_characters", "true"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "default_ddl_collation", "en_US"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "log_level", string(sdk.LogLevelDebug)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "trace_level", string(sdk.TraceLevelAlways)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "suspend_task_after_num_failures", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "task_auto_retry_attempts", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", "LARGE"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_timeout_ms", "1200000"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", "60"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", "true"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "enable_console_output", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "is_transient", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "data_retention_time_in_days", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "max_data_extension_time_in_days", "25"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "external_volume", externalVolumeId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "catalog", catalogId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "replace_invalid_characters", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "default_ddl_collation", "en_US"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "log_level", string(sdk.LogLevelDebug)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "trace_level", string(sdk.TraceLevelAlways)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "suspend_task_after_num_failures", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "task_auto_retry_attempts", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_managed_initial_warehouse_size", "LARGE"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_timeout_ms", "1200000"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "60"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "quoted_identifiers_ignore_case", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "enable_console_output", "true"), ), }, { - ConfigVariables: updatedConfigVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModelCompleteUpdated), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "is_transient", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", newComment), - - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "40"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "max_data_extension_time_in_days", "45"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "external_volume", newExternalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "catalog", newCatalogId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "replace_invalid_characters", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "default_ddl_collation", "en_GB"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyOptimized)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "log_level", string(sdk.LogLevelInfo)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "trace_level", string(sdk.TraceLevelOnEvent)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "suspend_task_after_num_failures", "40"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "task_auto_retry_attempts", "40"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", "XLARGE"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_timeout_ms", "2400000"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", "120"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "enable_console_output", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "name", newId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "is_transient", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "comment", newComment), + + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "data_retention_time_in_days", "40"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "max_data_extension_time_in_days", "45"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "external_volume", newExternalVolumeId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "catalog", newCatalogId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "replace_invalid_characters", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "default_ddl_collation", "en_GB"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyOptimized)), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "log_level", string(sdk.LogLevelInfo)), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "trace_level", string(sdk.TraceLevelOnEvent)), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "suspend_task_after_num_failures", "40"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "task_auto_retry_attempts", "40"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "user_task_managed_initial_warehouse_size", "XLARGE"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "user_task_timeout_ms", "2400000"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "120"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "quoted_identifiers_ignore_case", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelCompleteUpdated.ResourceReference(), "enable_console_output", "false"), ), }, { - ConfigVariables: unsetConfigVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-unset"), + Config: accconfig.FromModels(t, secondaryDatabaseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "is_transient", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", ""), - - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_secondary_database.test", "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "is_transient", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "comment", ""), + + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "data_retention_time_in_days", accountDataRetentionTimeInDays), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "max_data_extension_time_in_days", accountMaxDataExtensionTimeInDays), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(secondaryDatabaseModel.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), ), }, { - ConfigVariables: setConfigVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModelComplete), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "is_transient", "false"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "as_replica_of", externalPrimaryId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "comment", comment), - - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "max_data_extension_time_in_days", "25"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "external_volume", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "catalog", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "replace_invalid_characters", "true"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "default_ddl_collation", "en_US"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "log_level", string(sdk.LogLevelDebug)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "trace_level", string(sdk.TraceLevelAlways)), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "suspend_task_after_num_failures", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "task_auto_retry_attempts", "20"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_managed_initial_warehouse_size", "LARGE"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_timeout_ms", "1200000"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "user_task_minimum_trigger_interval_in_seconds", "60"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "quoted_identifiers_ignore_case", "true"), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "enable_console_output", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "is_transient", "false"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "as_replica_of", externalPrimaryId.FullyQualifiedName()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "data_retention_time_in_days", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "max_data_extension_time_in_days", "25"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "external_volume", externalVolumeId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "catalog", catalogId.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "replace_invalid_characters", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "default_ddl_collation", "en_US"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyCompatible)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "log_level", string(sdk.LogLevelDebug)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "trace_level", string(sdk.TraceLevelAlways)), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "suspend_task_after_num_failures", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "task_auto_retry_attempts", "20"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_managed_initial_warehouse_size", "LARGE"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_timeout_ms", "1200000"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "60"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "quoted_identifiers_ignore_case", "true"), + resource.TestCheckResourceAttr(secondaryDatabaseModelComplete.ResourceReference(), "enable_console_output", "true"), ), }, // Import all values { - ConfigVariables: setConfigVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), - ResourceName: "snowflake_secondary_database.test", + Config: accconfig.FromModels(t, secondaryDatabaseModelComplete), + ResourceName: secondaryDatabaseModelComplete.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -401,6 +383,15 @@ func TestAcc_CreateSecondaryDatabase_complete(t *testing.T) { } func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) + t.Cleanup(externalVolumeCleanup) + + catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) + t.Cleanup(catalogCleanup) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() primaryDatabase, externalPrimaryId, _ := acc.SecondaryTestClient().Database.CreatePrimaryDatabase(t, []sdk.AccountIdentifier{ @@ -413,43 +404,31 @@ func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { accountDataRetentionTimeInDays := acc.TestClient().Parameter.ShowAccountParameter(t, sdk.AccountParameterDataRetentionTimeInDays) - externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) - t.Cleanup(externalVolumeCleanup) - - catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) - t.Cleanup(catalogCleanup) - - configVariables := func( - id sdk.AccountObjectIdentifier, - primaryDatabaseName sdk.ExternalObjectIdentifier, + secondaryDatabaseModel := func( dataRetentionTimeInDays *int, - ) config.Variables { - variables := config.Variables{ - "name": config.StringVariable(id.Name()), - "as_replica_of": config.StringVariable(primaryDatabaseName.FullyQualifiedName()), - "transient": config.BoolVariable(false), - "comment": config.StringVariable(""), - - "max_data_extension_time_in_days": config.IntegerVariable(10), - "external_volume": config.StringVariable(externalVolumeId.Name()), - "catalog": config.StringVariable(catalogId.Name()), - "replace_invalid_characters": config.BoolVariable(true), - "default_ddl_collation": config.StringVariable("en_US"), - "storage_serialization_policy": config.StringVariable("OPTIMIZED"), - "log_level": config.StringVariable("OFF"), - "trace_level": config.StringVariable("OFF"), - "suspend_task_after_num_failures": config.IntegerVariable(10), - "task_auto_retry_attempts": config.IntegerVariable(10), - "user_task_managed_initial_warehouse_size": config.StringVariable(string(sdk.WarehouseSizeSmall)), - "user_task_timeout_ms": config.IntegerVariable(120000), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(120), - "quoted_identifiers_ignore_case": config.BoolVariable(true), - "enable_console_output": config.BoolVariable(true), - } + ) *model.SecondaryDatabaseModel { + secondaryDatabaseModel := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), id.Name()). + WithMaxDataExtensionTimeInDays(10). + WithExternalVolume(externalVolumeId.Name()). + WithCatalog(catalogId.Name()). + WithReplaceInvalidCharacters(true). + WithDefaultDdlCollation("en_US"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyOptimized)). + WithLogLevel(string(sdk.LogLevelOff)). + WithTraceLevel(string(sdk.LogLevelOff)). + WithSuspendTaskAfterNumFailures(10). + WithTaskAutoRetryAttempts(10). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeSmall)). + WithUserTaskTimeoutMs(1200000). + WithUserTaskMinimumTriggerIntervalInSeconds(120). + WithQuotedIdentifiersIgnoreCase(true). + WithEnableConsoleOutput(true) + if dataRetentionTimeInDays != nil { - variables["data_retention_time_in_days"] = config.IntegerVariable(*dataRetentionTimeInDays) + secondaryDatabaseModel.WithDataRetentionTimeInDays(*dataRetentionTimeInDays) } - return variables + + return secondaryDatabaseModel } var revertAccountParameterChange func() @@ -463,22 +442,19 @@ func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SecondaryDatabase), Steps: []resource.TestStep{ { - ConfigVariables: configVariables(id, externalPrimaryId, sdk.Int(2)), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(sdk.Int(2))), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "2"), ), }, { - ConfigVariables: configVariables(id, externalPrimaryId, sdk.Int(1)), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(sdk.Int(1))), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "1"), ), }, { - ConfigVariables: configVariables(id, externalPrimaryId, nil), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-unset"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(nil)), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays.Value), ), @@ -488,8 +464,7 @@ func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { revertAccountParameterChange = acc.TestClient().Parameter.UpdateAccountParameterTemporarily(t, sdk.AccountParameterDataRetentionTimeInDays, "3") t.Cleanup(revertAccountParameterChange) }, - ConfigVariables: configVariables(id, externalPrimaryId, nil), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-unset"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(nil)), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "3"), ), @@ -498,22 +473,19 @@ func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { PreConfig: func() { revertAccountParameterChange() }, - ConfigVariables: configVariables(id, externalPrimaryId, nil), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-unset"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(nil)), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays.Value), ), }, { - ConfigVariables: configVariables(id, externalPrimaryId, sdk.Int(3)), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-set"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(sdk.Int(3))), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", "3"), ), }, { - ConfigVariables: configVariables(id, externalPrimaryId, nil), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecondaryDatabase/complete-optionals-unset"), + Config: accconfig.FromModels(t, secondaryDatabaseModel(nil)), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_secondary_database.test", "data_retention_time_in_days", accountDataRetentionTimeInDays.Value), ), @@ -523,6 +495,9 @@ func TestAcc_CreateSecondaryDatabase_DataRetentionTimeInDays(t *testing.T) { } func TestAcc_SecondaryDatabase_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() primaryDatabase, externalPrimaryId, _ := acc.SecondaryTestClient().Database.CreatePrimaryDatabase(t, []sdk.AccountIdentifier{ @@ -533,6 +508,8 @@ func TestAcc_SecondaryDatabase_migrateFromV0941_ensureSmoothUpgradeWithNewResour require.Eventually(t, func() bool { return acc.SecondaryTestClient().Database.DropDatabase(t, primaryDatabase.ID()) == nil }, time.Second*5, time.Second) }) + secondaryDatabaseModel := model.SecondaryDatabase("test", externalPrimaryId.FullyQualifiedName(), id.Name()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -548,33 +525,29 @@ func TestAcc_SecondaryDatabase_migrateFromV0941_ensureSmoothUpgradeWithNewResour Source: "Snowflake-Labs/snowflake", }, }, - Config: secondaryDatabaseConfigBasic(id.Name(), externalPrimaryId.FullyQualifiedName()), + Config: accconfig.FromModels(t, secondaryDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: secondaryDatabaseConfigBasic(id.Name(), externalPrimaryId.FullyQualifiedName()), + Config: accconfig.FromModels(t, secondaryDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "id", id.Name()), ), }, }, }) } -func secondaryDatabaseConfigBasic(name, externalDatabaseId string) string { - return fmt.Sprintf(`resource "snowflake_secondary_database" "test" { - name = "%v" - as_replica_of = %v - }`, name, strconv.Quote(externalDatabaseId)) -} - func TestAcc_SecondaryDatabase_IdentifierQuotingDiffSuppression(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - quotedId := fmt.Sprintf(`\"%s\"`, id.Name()) + quotedId := fmt.Sprintf(`"%s"`, id.Name()) primaryDatabase, externalPrimaryId, _ := acc.SecondaryTestClient().Database.CreatePrimaryDatabase(t, []sdk.AccountIdentifier{ sdk.NewAccountIdentifierFromAccountLocator(acc.TestClient().GetAccountLocator()), @@ -585,6 +558,8 @@ func TestAcc_SecondaryDatabase_IdentifierQuotingDiffSuppression(t *testing.T) { require.Eventually(t, func() bool { return acc.SecondaryTestClient().Database.DropDatabase(t, primaryDatabase.ID()) == nil }, time.Second*5, time.Second) }) + secondaryDatabaseModel := model.SecondaryDatabase("test", unquotedExternalPrimaryId, quotedId) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -601,27 +576,27 @@ func TestAcc_SecondaryDatabase_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: secondaryDatabaseConfigBasic(quotedId, unquotedExternalPrimaryId), + Config: accconfig.FromModels(t, secondaryDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: secondaryDatabaseConfigBasic(quotedId, unquotedExternalPrimaryId), + Config: accconfig.FromModels(t, secondaryDatabaseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_secondary_database.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(secondaryDatabaseModel.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_secondary_database.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(secondaryDatabaseModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_secondary_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(secondaryDatabaseModel.ResourceReference(), "id", id.Name()), ), }, }, diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/test.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/test.tf deleted file mode 100644 index 4fb82e93a2..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_secondary_database" "test" { - name = var.name - as_replica_of = var.as_replica_of - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/variables.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/variables.tf deleted file mode 100644 index 2fce70aa2f..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/basic/variables.tf +++ /dev/null @@ -1,12 +0,0 @@ -variable "name" { - type = string -} - -variable "as_replica_of" { - type = string -} - -variable "comment" { - type = string -} - diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/test.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/test.tf deleted file mode 100644 index a8688141e0..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/test.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_secondary_database" "test" { - name = var.name - as_replica_of = var.as_replica_of - comment = var.comment - - data_retention_time_in_days = var.data_retention_time_in_days - max_data_extension_time_in_days = var.max_data_extension_time_in_days - external_volume = var.external_volume - catalog = var.catalog - replace_invalid_characters = var.replace_invalid_characters - default_ddl_collation = var.default_ddl_collation - storage_serialization_policy = var.storage_serialization_policy - log_level = var.log_level - trace_level = var.trace_level - suspend_task_after_num_failures = var.suspend_task_after_num_failures - task_auto_retry_attempts = var.task_auto_retry_attempts - user_task_managed_initial_warehouse_size = var.user_task_managed_initial_warehouse_size - user_task_timeout_ms = var.user_task_timeout_ms - user_task_minimum_trigger_interval_in_seconds = var.user_task_minimum_trigger_interval_in_seconds - quoted_identifiers_ignore_case = var.quoted_identifiers_ignore_case - enable_console_output = var.enable_console_output -} diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/variables.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/variables.tf deleted file mode 100644 index 534c20a278..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-set/variables.tf +++ /dev/null @@ -1,75 +0,0 @@ -variable "name" { - type = string -} - -variable "as_replica_of" { - type = string -} - -variable "comment" { - type = string -} - -variable "data_retention_time_in_days" { - type = string -} - -variable "max_data_extension_time_in_days" { - type = string -} - -variable "external_volume" { - type = string -} - -variable "catalog" { - type = string -} - -variable "replace_invalid_characters" { - type = string -} - -variable "default_ddl_collation" { - type = string -} - -variable "storage_serialization_policy" { - type = string -} - -variable "log_level" { - type = string -} - -variable "trace_level" { - type = string -} - -variable "suspend_task_after_num_failures" { - type = number -} - -variable "task_auto_retry_attempts" { - type = number -} - -variable "user_task_managed_initial_warehouse_size" { - type = string -} - -variable "user_task_timeout_ms" { - type = number -} - -variable "user_task_minimum_trigger_interval_in_seconds" { - type = number -} - -variable "quoted_identifiers_ignore_case" { - type = bool -} - -variable "enable_console_output" { - type = bool -} diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/test.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/test.tf deleted file mode 100644 index 770f36fc00..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/test.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "snowflake_secondary_database" "test" { - name = var.name - as_replica_of = var.as_replica_of -} diff --git a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/variables.tf b/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/variables.tf deleted file mode 100644 index ecf7c3557e..0000000000 --- a/pkg/resources/testdata/TestAcc_SecondaryDatabase/complete-optionals-unset/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "name" { - type = string -} - -variable "as_replica_of" { - type = string -}