From 50749026242b301e57426bea4fa916cd363403de Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 16:00:52 +0200 Subject: [PATCH 01/30] resources part 5 starts here From e98ff2e29bf113ce409cb8dd50ef5068c4561da9 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 16:59:15 +0200 Subject: [PATCH 02/30] Verify all resource acceptance test setups --- .../helpers/security_integration_client.go | 7 +- ...th_basic_authentication_acceptance_test.go | 73 +++++----- ...ret_with_generic_string_acceptance_test.go | 58 ++++---- ...uthorization_code_grant_acceptance_test.go | 135 +++++++++--------- ...auth_client_credentials_acceptance_test.go | 50 ++++--- 5 files changed, 181 insertions(+), 142 deletions(-) diff --git a/pkg/acceptance/helpers/security_integration_client.go b/pkg/acceptance/helpers/security_integration_client.go index 85115cf084b..77c44ece874 100644 --- a/pkg/acceptance/helpers/security_integration_client.go +++ b/pkg/acceptance/helpers/security_integration_client.go @@ -26,11 +26,16 @@ func (c *SecurityIntegrationClient) client() sdk.SecurityIntegrations { } func (c *SecurityIntegrationClient) CreateApiAuthenticationWithClientCredentialsFlow(t *testing.T) (*sdk.SecurityIntegration, func()) { + t.Helper() + return c.CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t, false) +} + +func (c *SecurityIntegrationClient) CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t *testing.T, enabled bool) (*sdk.SecurityIntegration, func()) { t.Helper() ctx := context.Background() id := c.ids.RandomAccountObjectIdentifier() - request := sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(id, false, "foo", "foo") + request := sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(id, enabled, "foo", "foo") err := c.client().CreateApiAuthenticationWithClientCredentialsFlow(ctx, request) require.NoError(t, err) diff --git a/pkg/resources/secret_with_basic_authentication_acceptance_test.go b/pkg/resources/secret_with_basic_authentication_acceptance_test.go index 5fb38aa1f81..fe29abb244b 100644 --- a/pkg/resources/secret_with_basic_authentication_acceptance_test.go +++ b/pkg/resources/secret_with_basic_authentication_acceptance_test.go @@ -13,6 +13,7 @@ import ( "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/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" @@ -22,6 +23,9 @@ import ( ) func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() comment := random.Comment() @@ -31,7 +35,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { secretModelWithoutComment := model.SecretWithBasicAuthentication("s", id.DatabaseName(), name, "bar", id.SchemaName(), "bar") secretModelEmptyCredentials := model.SecretWithBasicAuthentication("s", id.DatabaseName(), name, "", id.SchemaName(), "") - secretName := secretModel.ResourceReference() + resourceReference := secretModel.ResourceReference() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -46,7 +50,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModel), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.SecretWithBasicAuthenticationResource(t, secretName). + resourceassert.SecretWithBasicAuthenticationResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -54,7 +58,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { HasPasswordString("foo"). HasCommentString(""), - resourceshowoutputassert.SecretShowOutput(t, secretName). + resourceshowoutputassert.SecretShowOutput(t, resourceReference). HasName(name). HasDatabaseName(id.DatabaseName()). HasSecretType(string(sdk.SecretTypePassword)). @@ -62,18 +66,18 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { HasComment(""), ), - resource.TestCheckResourceAttr(secretName, "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttrSet(secretName, "describe_output.0.created_on"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.name", name), - resource.TestCheckResourceAttr(secretName, "describe_output.0.database_name", id.DatabaseName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.schema_name", id.SchemaName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.secret_type", string(sdk.SecretTypePassword)), - resource.TestCheckResourceAttr(secretName, "describe_output.0.username", "foo"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_access_token_expiry_time", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_refresh_token_expiry_time", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.integration_name", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_scopes.#", "0"), + resource.TestCheckResourceAttr(resourceReference, "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.created_on"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.name", name), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.secret_type", string(sdk.SecretTypePassword)), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.username", "foo"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_access_token_expiry_time", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_refresh_token_expiry_time", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.integration_name", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_scopes.#", "0"), ), }, // set username, password and comment @@ -81,8 +85,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModelDifferentCredentialsWithComment), Check: resource.ComposeTestCheckFunc( assertThat(t, - - resourceassert.SecretWithBasicAuthenticationResource(t, secretName). + resourceassert.SecretWithBasicAuthenticationResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -90,13 +93,13 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { HasPasswordString("bar"). HasCommentString(comment), - resourceshowoutputassert.SecretShowOutput(t, secretName). + resourceshowoutputassert.SecretShowOutput(t, resourceReference). HasSecretType(string(sdk.SecretTypePassword)). HasComment(comment), ), - resource.TestCheckResourceAttr(secretName, "describe_output.0.username", "bar"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", comment), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.username", "bar"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", comment), ), }, // set username and comment externally @@ -115,17 +118,17 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretName, plancheck.ResourceActionUpdate), - planchecks.ExpectDrift(secretName, "comment", sdk.String(comment), sdk.String("test_comment")), - planchecks.ExpectDrift(secretName, "username", sdk.String("bar"), sdk.String("test_username")), + plancheck.ExpectResourceAction(resourceReference, plancheck.ResourceActionUpdate), + planchecks.ExpectDrift(resourceReference, "comment", sdk.String(comment), sdk.String("test_comment")), + planchecks.ExpectDrift(resourceReference, "username", sdk.String("bar"), sdk.String("test_username")), - planchecks.ExpectChange(secretName, "comment", tfjson.ActionUpdate, sdk.String("test_comment"), sdk.String(comment)), - planchecks.ExpectChange(secretName, "username", tfjson.ActionUpdate, sdk.String("test_username"), sdk.String("bar")), + planchecks.ExpectChange(resourceReference, "comment", tfjson.ActionUpdate, sdk.String("test_comment"), sdk.String(comment)), + planchecks.ExpectChange(resourceReference, "username", tfjson.ActionUpdate, sdk.String("test_username"), sdk.String("bar")), }, }, Config: config.FromModels(t, secretModelDifferentCredentialsWithComment), Check: assertThat(t, - resourceassert.SecretWithBasicAuthenticationResource(t, secretName). + resourceassert.SecretWithBasicAuthenticationResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -136,7 +139,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { }, // import { - ResourceName: secretName, + ResourceName: resourceReference, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"password"}, @@ -153,18 +156,18 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModelWithoutComment), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(secretName, "comment", tfjson.ActionUpdate, sdk.String(comment), nil), + plancheck.ExpectResourceAction(resourceReference, plancheck.ResourceActionUpdate), + planchecks.ExpectChange(resourceReference, "comment", tfjson.ActionUpdate, sdk.String(comment), nil), }, }, Check: assertThat(t, - resourceassert.SecretWithClientCredentialsResource(t, secretName). + resourceassert.SecretWithClientCredentialsResource(t, resourceReference). HasCommentString(""), ), }, // import with no fields set { - ResourceName: secretName, + ResourceName: resourceReference, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"password"}, @@ -181,7 +184,7 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModelEmptyCredentials), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.SecretWithBasicAuthenticationResource(t, secretName). + resourceassert.SecretWithBasicAuthenticationResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -196,6 +199,9 @@ func TestAcc_SecretWithBasicAuthentication_BasicFlow(t *testing.T) { } func TestAcc_SecretWithBasicAuthentication_CreateWithEmptyCredentials(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() secretModelEmptyCredentials := model.SecretWithBasicAuthentication("s", id.DatabaseName(), name, "", id.SchemaName(), "") @@ -227,6 +233,9 @@ func TestAcc_SecretWithBasicAuthentication_CreateWithEmptyCredentials(t *testing } func TestAcc_SecretWithBasicAuthentication_ExternalSecretTypeChange(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() secretModel := model.SecretWithBasicAuthentication("s", id.DatabaseName(), name, "test_pswd", id.SchemaName(), "test_usr") diff --git a/pkg/resources/secret_with_generic_string_acceptance_test.go b/pkg/resources/secret_with_generic_string_acceptance_test.go index 35b774b14f6..4e086f66af5 100644 --- a/pkg/resources/secret_with_generic_string_acceptance_test.go +++ b/pkg/resources/secret_with_generic_string_acceptance_test.go @@ -13,6 +13,7 @@ import ( "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/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" @@ -22,14 +23,19 @@ import ( ) func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() comment := random.Comment() secretModel := model.SecretWithGenericString("s", id.DatabaseName(), name, id.SchemaName(), "foo") + secretModelWithComment := model.SecretWithGenericString("s", id.DatabaseName(), name, id.SchemaName(), "bar"). + WithComment(comment) secretModelEmptySecretString := model.SecretWithGenericString("s", id.DatabaseName(), name, id.SchemaName(), "") - secretName := secretModel.ResourceReference() + resourceReference := secretModel.ResourceReference() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -59,30 +65,26 @@ func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { HasComment(""), ), - resource.TestCheckResourceAttr(secretName, "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttrSet(secretName, "describe_output.0.created_on"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.name", name), - resource.TestCheckResourceAttr(secretName, "describe_output.0.database_name", id.DatabaseName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.schema_name", id.SchemaName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.secret_type", string(sdk.SecretTypeGenericString)), - resource.TestCheckResourceAttr(secretName, "describe_output.0.username", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_access_token_expiry_time", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_refresh_token_expiry_time", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.integration_name", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_scopes.#", "0"), + resource.TestCheckResourceAttr(resourceReference, "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.created_on"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.name", name), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.secret_type", string(sdk.SecretTypeGenericString)), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.username", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_access_token_expiry_time", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_refresh_token_expiry_time", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.integration_name", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_scopes.#", "0"), ), }, // set secret_string and comment { - Config: config.FromModels(t, secretModel. - WithSecretString("bar"). - WithComment(comment), - ), - + Config: config.FromModels(t, secretModelWithComment), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.SecretWithGenericStringResource(t, secretName). + resourceassert.SecretWithGenericStringResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -94,7 +96,7 @@ func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { HasComment(comment), ), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", comment), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", comment), ), }, // set comment externally, external changes for secret_string are not being detected @@ -106,16 +108,16 @@ func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { ), ) }, - Config: config.FromModels(t, secretModel), + Config: config.FromModels(t, secretModelWithComment), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretName, plancheck.ResourceActionUpdate), - planchecks.ExpectDrift(secretName, "comment", sdk.String(comment), sdk.String("test_comment")), - planchecks.ExpectChange(secretName, "comment", tfjson.ActionUpdate, sdk.String("test_comment"), sdk.String(comment)), + plancheck.ExpectResourceAction(resourceReference, plancheck.ResourceActionUpdate), + planchecks.ExpectDrift(resourceReference, "comment", sdk.String(comment), sdk.String("test_comment")), + planchecks.ExpectChange(resourceReference, "comment", tfjson.ActionUpdate, sdk.String("test_comment"), sdk.String(comment)), }, }, Check: assertThat(t, - resourceassert.SecretWithGenericStringResource(t, secretName). + resourceassert.SecretWithGenericStringResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -125,7 +127,7 @@ func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { }, // import { - ResourceName: secretName, + ResourceName: resourceReference, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"secret_string"}, @@ -187,8 +189,12 @@ func TestAcc_SecretWithGenericString_BasicFlow(t *testing.T) { } func TestAcc_SecretWithGenericString_ExternalSecretTypeChange(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() + secretModel := model.SecretWithGenericString("s", id.DatabaseName(), name, id.SchemaName(), "test_usr") resource.Test(t, resource.TestCase{ diff --git a/pkg/resources/secret_with_oauth_authorization_code_grant_acceptance_test.go b/pkg/resources/secret_with_oauth_authorization_code_grant_acceptance_test.go index a41b448c82b..d5d41029b81 100644 --- a/pkg/resources/secret_with_oauth_authorization_code_grant_acceptance_test.go +++ b/pkg/resources/secret_with_oauth_authorization_code_grant_acceptance_test.go @@ -16,6 +16,7 @@ import ( "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/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" @@ -25,24 +26,25 @@ import ( ) func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + apiIntegration, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t, true) + t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() comment := random.Comment() + newComment := random.Comment() refreshTokenExpiryDateTime := time.Now().Add(24 * time.Hour).Format(time.DateTime) newRefreshTokenExpiryDateOnly := time.Now().Add(4 * 24 * time.Hour).Format(time.DateOnly) refreshToken := "test_token" newRefreshToken := "new_test_token" - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, - sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "foo", "foo"), - ) - t.Cleanup(apiIntegrationCleanup) - - secretModel := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, refreshToken, refreshTokenExpiryDateTime) - secretModelAllSet := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, newRefreshToken, newRefreshTokenExpiryDateOnly).WithComment(comment) + secretModel := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, refreshToken, refreshTokenExpiryDateTime) + secretModelAllSet := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, newRefreshToken, newRefreshTokenExpiryDateOnly).WithComment(comment) - secretName := secretModel.ResourceReference() + resourceReference := secretModel.ResourceReference() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -61,7 +63,7 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). - HasApiAuthenticationString(integrationId.Name()). + HasApiAuthenticationString(apiIntegration.ID().Name()). HasOauthRefreshTokenString(refreshToken). HasOauthRefreshTokenExpiryTimeString(refreshTokenExpiryDateTime). HasCommentString(""), @@ -74,18 +76,18 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { HasComment(""), ), - resource.TestCheckResourceAttr(secretName, "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttrSet(secretName, "describe_output.0.created_on"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.name", name), - resource.TestCheckResourceAttr(secretName, "describe_output.0.database_name", id.DatabaseName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.schema_name", id.SchemaName()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.secret_type", string(sdk.SecretTypeOAuth2)), - resource.TestCheckResourceAttr(secretName, "describe_output.0.integration_name", integrationId.Name()), - resource.TestCheckResourceAttr(secretName, "describe_output.0.username", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_access_token_expiry_time", ""), - resource.TestCheckResourceAttrSet(secretName, "describe_output.0.oauth_refresh_token_expiry_time"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", ""), - resource.TestCheckResourceAttr(secretName, "describe_output.0.oauth_scopes.#", "0"), + resource.TestCheckResourceAttr(resourceReference, "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.created_on"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.name", name), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.secret_type", string(sdk.SecretTypeOAuth2)), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.integration_name", apiIntegration.ID().Name()), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.username", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_access_token_expiry_time", ""), + resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.oauth_refresh_token_expiry_time"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", ""), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.oauth_scopes.#", "0"), ), }, // set all @@ -93,18 +95,18 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModelAllSet), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(secretName, "comment", tfjson.ActionUpdate, nil, sdk.String(comment)), - planchecks.ExpectChange(secretName, "oauth_refresh_token", tfjson.ActionUpdate, sdk.String(refreshToken), sdk.String(newRefreshToken)), + plancheck.ExpectResourceAction(resourceReference, plancheck.ResourceActionUpdate), + planchecks.ExpectChange(resourceReference, "comment", tfjson.ActionUpdate, nil, sdk.String(comment)), + planchecks.ExpectChange(resourceReference, "oauth_refresh_token", tfjson.ActionUpdate, sdk.String(refreshToken), sdk.String(newRefreshToken)), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.SecretWithAuthorizationCodeGrantResource(t, secretName). + resourceassert.SecretWithAuthorizationCodeGrantResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). - HasApiAuthenticationString(integrationId.Name()). + HasApiAuthenticationString(apiIntegration.ID().Name()). HasOauthRefreshTokenString(newRefreshToken). HasOauthRefreshTokenExpiryTimeString(newRefreshTokenExpiryDateOnly). HasCommentString(comment), @@ -113,15 +115,15 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { HasSecretType(string(sdk.SecretTypeOAuth2)). HasComment(comment), ), - resource.TestCheckResourceAttrSet(secretName, "describe_output.0.oauth_refresh_token_expiry_time"), - resource.TestCheckResourceAttr(secretName, "describe_output.0.comment", comment), + resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.oauth_refresh_token_expiry_time"), + resource.TestCheckResourceAttr(resourceReference, "describe_output.0.comment", comment), ), }, // set comment and refresh_token_expiry_time externally { PreConfig: func() { acc.TestClient().Secret.Alter(t, sdk.NewAlterSecretRequest(id).WithSet(*sdk.NewSecretSetRequest(). - WithComment("secret resource - changed comment"). + WithComment(newComment). WithSetForFlow(*sdk.NewSetForFlowRequest(). WithSetForOAuthAuthorization(*sdk.NewSetForOAuthAuthorizationRequest(). WithOauthRefreshTokenExpiryTime(time.Now().Add(24 * time.Hour).Format(time.DateOnly)), @@ -132,28 +134,28 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { Config: config.FromModels(t, secretModelAllSet), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(secretName, "comment", tfjson.ActionUpdate, sdk.String("secret resource - changed comment"), sdk.String(comment)), - planchecks.ExpectComputed(secretName, r.DescribeOutputAttributeName, true), + plancheck.ExpectResourceAction(resourceReference, plancheck.ResourceActionUpdate), + planchecks.ExpectChange(resourceReference, "comment", tfjson.ActionUpdate, sdk.String(newComment), sdk.String(comment)), + planchecks.ExpectComputed(resourceReference, r.DescribeOutputAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.SecretWithAuthorizationCodeGrantResource(t, secretName). + resourceassert.SecretWithAuthorizationCodeGrantResource(t, resourceReference). HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). - HasApiAuthenticationString(integrationId.Name()). + HasApiAuthenticationString(apiIntegration.ID().Name()). HasOauthRefreshTokenString(newRefreshToken). HasOauthRefreshTokenExpiryTimeString(newRefreshTokenExpiryDateOnly). HasCommentString(comment), - assert.Check(resource.TestCheckResourceAttrSet(secretName, "describe_output.0.oauth_refresh_token_expiry_time")), + assert.Check(resource.TestCheckResourceAttrSet(resourceReference, "describe_output.0.oauth_refresh_token_expiry_time")), ), ), }, // import { - ResourceName: secretName, + ResourceName: resourceReference, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"oauth_refresh_token"}, @@ -162,7 +164,7 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). - HasApiAuthenticationString(integrationId.Name()). + HasApiAuthenticationString(apiIntegration.ID().Name()). HasCommentString(comment). HasOauthRefreshTokenExpiryTimeNotEmpty(), ), @@ -172,24 +174,24 @@ func TestAcc_SecretWithAuthorizationCodeGrant_BasicFlow(t *testing.T) { } func TestAcc_SecretWithAuthorizationCodeGrant_DifferentTimeFormats(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, - sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "foo", "foo"), - ) + apiIntegration, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t, true) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + refreshTokenExpiryDateOnly := time.Now().Add(4 * 24 * time.Hour).Format(time.DateOnly) refreshTokenExpiryWithoutSeconds := time.Now().Add(4 * 24 * time.Hour).Format("2006-01-02 15:04") refreshTokenExpiryDateTime := time.Now().Add(4 * 24 * time.Hour).Format(time.DateTime) refreshTokenExpiryWithPDT := fmt.Sprintf("%s %s", time.Now().Add(4*24*time.Hour).Format("2006-01-02 15:04"), "PDT") - secretModelDateOnly := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryDateOnly) - secretModelWithoutSeconds := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryWithoutSeconds) - secretModelDateTime := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryDateTime) - secretModelWithPDT := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryWithPDT) + secretModelDateOnly := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryDateOnly) + secretModelWithoutSeconds := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryWithoutSeconds) + secretModelDateTime := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryDateTime) + secretModelWithPDT := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, "test_token", refreshTokenExpiryWithPDT) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -248,6 +250,12 @@ func TestAcc_SecretWithAuthorizationCodeGrant_DifferentTimeFormats(t *testing.T) } func TestAcc_SecretWithAuthorizationCodeGrant_ExternalRefreshTokenExpiryTimeChange(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + apiIntegration, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t, true) + t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() name := id.Name() comment := random.Comment() @@ -255,13 +263,7 @@ func TestAcc_SecretWithAuthorizationCodeGrant_ExternalRefreshTokenExpiryTimeChan externalRefreshTokenExpiryTime := time.Now().Add(10 * 24 * time.Hour) refreshToken := "test_token" - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, - sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "foo", "foo"), - ) - t.Cleanup(apiIntegrationCleanup) - - secretModel := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, refreshToken, refreshTokenExpiryDateTime).WithComment(comment) + secretModel := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, refreshToken, refreshTokenExpiryDateTime).WithComment(comment) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -280,7 +282,7 @@ func TestAcc_SecretWithAuthorizationCodeGrant_ExternalRefreshTokenExpiryTimeChan HasNameString(name). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). - HasApiAuthenticationString(integrationId.Name()). + HasApiAuthenticationString(apiIntegration.ID().Name()). HasOauthRefreshTokenString(refreshToken). HasOauthRefreshTokenExpiryTimeString(refreshTokenExpiryDateTime). HasCommentString(comment), @@ -326,16 +328,16 @@ func TestAcc_SecretWithAuthorizationCodeGrant_ExternalRefreshTokenExpiryTimeChan } func TestAcc_SecretWithAuthorizationCodeGrant_ExternalSecretTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, - sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "foo", "foo"), - ) + apiIntegration, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationWithClientCredentialsFlowWithEnabled(t, true) t.Cleanup(apiIntegrationCleanup) - secretModel := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_refresh_token", time.Now().Add(24*time.Hour).Format(time.DateOnly)) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + + secretModel := model.SecretWithAuthorizationCodeGrant("s", apiIntegration.ID().Name(), id.DatabaseName(), id.SchemaName(), name, "test_refresh_token", time.Now().Add(24*time.Hour).Format(time.DateOnly)) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -384,8 +386,8 @@ func TestAcc_SecretWithAuthorizationCodeGrant_ExternalSecretTypeChange(t *testin } func TestAcc_SecretWithAuthorizationCodeGrant_ExternalSecretTypeChangeToOAuthClientCredentials(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, @@ -394,6 +396,9 @@ func TestAcc_SecretWithAuthorizationCodeGrant_ExternalSecretTypeChangeToOAuthCli ) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + secretModel := model.SecretWithAuthorizationCodeGrant("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, "test_refresh_token", time.Now().Add(24*time.Hour).Format(time.DateOnly)) resource.Test(t, resource.TestCase{ diff --git a/pkg/resources/secret_with_oauth_client_credentials_acceptance_test.go b/pkg/resources/secret_with_oauth_client_credentials_acceptance_test.go index 81b4f5a2184..417a94b1802 100644 --- a/pkg/resources/secret_with_oauth_client_credentials_acceptance_test.go +++ b/pkg/resources/secret_with_oauth_client_credentials_acceptance_test.go @@ -15,6 +15,7 @@ import ( "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/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" @@ -24,10 +25,8 @@ import ( ) func TestAcc_SecretWithClientCredentials_BasicFlow(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() - comment := random.Comment() - newComment := random.Comment() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, @@ -36,11 +35,18 @@ func TestAcc_SecretWithClientCredentials_BasicFlow(t *testing.T) { ) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + comment := random.Comment() + newComment := random.Comment() + secretModel := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo", "bar"}).WithComment(comment) secretModelTestInScopes := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"test"}).WithComment(newComment) secretModelFooInScopesWithComment := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo"}).WithComment(newComment) secretModelFooInScopes := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo"}) secretModelWithoutComment := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo", "bar"}) + secretModelWithoutCommentWithOauthScopes := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo", "bar"}). + WithOauthScopes([]string{"foo", "bar"}) secretName := secretModel.ResourceReference() resource.Test(t, resource.TestCase{ @@ -186,7 +192,7 @@ func TestAcc_SecretWithClientCredentials_BasicFlow(t *testing.T) { }, // create without comment { - Config: config.FromModels(t, secretModelWithoutComment.WithOauthScopes([]string{"foo", "bar"})), + Config: config.FromModels(t, secretModelWithoutCommentWithOauthScopes), Check: resource.ComposeTestCheckFunc( assertThat(t, resourceassert.SecretWithClientCredentialsResource(t, "snowflake_secret_with_client_credentials.s"). @@ -221,18 +227,22 @@ func TestAcc_SecretWithClientCredentials_BasicFlow(t *testing.T) { } func TestAcc_SecretWithClientCredentials_EmptyScopesList(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, - sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "foo", "foo"). - WithOauthAllowedScopes([]sdk.AllowedScope{{Scope: "foo"}, {Scope: "bar"}}), + sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "test_client_id", "test_client_secret"). + WithOauthAllowedScopes([]sdk.AllowedScope{{Scope: "foo"}, {Scope: "bar"}, {Scope: "test"}}), ) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + secretModel := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{}) secretModelEmptyScopes := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{}) + secretModelWithScope := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{}).WithOauthScopes([]string{"foo"}) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -259,13 +269,11 @@ func TestAcc_SecretWithClientCredentials_EmptyScopesList(t *testing.T) { }, // Set oauth_scopes { - Config: config.FromModels(t, secretModel. - WithOauthScopes([]string{"foo"}), - ), + Config: config.FromModels(t, secretModelWithScope), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(secretModel.ResourceReference(), plancheck.ResourceActionUpdate), - planchecks.ExpectChange(secretModel.ResourceReference(), "oauth_scopes", tfjson.ActionUpdate, sdk.String("[]"), sdk.String("[foo]")), + plancheck.ExpectResourceAction(secretModelWithScope.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(secretModelWithScope.ResourceReference(), "oauth_scopes", tfjson.ActionUpdate, sdk.String("[]"), sdk.String("[foo]")), }, }, Check: assertThat(t, @@ -301,8 +309,8 @@ func TestAcc_SecretWithClientCredentials_EmptyScopesList(t *testing.T) { } func TestAcc_SecretWithClientCredentials_ExternalSecretTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, @@ -311,6 +319,9 @@ func TestAcc_SecretWithClientCredentials_ExternalSecretTypeChange(t *testing.T) ) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + secretModel := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo", "bar"}) resource.Test(t, resource.TestCase{ @@ -360,8 +371,8 @@ func TestAcc_SecretWithClientCredentials_ExternalSecretTypeChange(t *testing.T) } func TestAcc_SecretWithClientCredentials_ExternalSecretTypeChangeToOAuthAuthCodeGrant(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - name := id.Name() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, @@ -370,6 +381,9 @@ func TestAcc_SecretWithClientCredentials_ExternalSecretTypeChangeToOAuthAuthCode ) t.Cleanup(apiIntegrationCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() + secretModel := model.SecretWithClientCredentials("s", integrationId.Name(), id.DatabaseName(), id.SchemaName(), name, []string{"foo", "bar"}) resource.Test(t, resource.TestCase{ From d1cc085e622c9c366967f9981ba06ca12baae7b4 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 17:06:55 +0200 Subject: [PATCH 03/30] Verify sequence acceptance test setups --- pkg/resources/sequence_acceptance_test.go | 66 +++++++++++++---------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/pkg/resources/sequence_acceptance_test.go b/pkg/resources/sequence_acceptance_test.go index c1c901a9152..02a6fd088e5 100644 --- a/pkg/resources/sequence_acceptance_test.go +++ b/pkg/resources/sequence_acceptance_test.go @@ -6,14 +6,21 @@ import ( 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/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_Sequence(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + oldId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + comment := random.Comment() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -25,9 +32,11 @@ func TestAcc_Sequence(t *testing.T) { Steps: []resource.TestStep{ // CREATE { - Config: sequenceConfig(oldId.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: sequenceConfig(oldId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "name", oldId.Name()), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "next_value", "1"), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "fully_qualified_name", oldId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "ordering", "ORDER"), @@ -35,19 +44,23 @@ func TestAcc_Sequence(t *testing.T) { }, // Set comment and rename { - Config: sequenceConfigWithComment(newId.Name(), "look at me I am a comment", acc.TestDatabaseName, acc.TestSchemaName), + Config: sequenceConfigWithComment(newId, comment), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "comment", "look at me I am a comment"), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "schema", acc.TestSchemaName), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "comment", comment), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "next_value", "1"), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "fully_qualified_name", newId.FullyQualifiedName()), ), }, // Unset comment and set increment { - Config: sequenceConfigWithIncrement(oldId.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: sequenceConfigWithIncrement(oldId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "name", oldId.Name()), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "comment", ""), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "next_value", "1"), resource.TestCheckResourceAttr("snowflake_sequence.test_sequence", "increment", "32"), @@ -65,38 +78,35 @@ func TestAcc_Sequence(t *testing.T) { }) } -func sequenceConfigWithIncrement(sequenceName string, databaseName string, schemaName string) string { - s := ` +func sequenceConfig(sequenceId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_sequence" { - name = "%s" - database = "%s" - schema = "%s" - increment = 32 - ordering = "NOORDER" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } -` - return fmt.Sprintf(s, sequenceName, databaseName, schemaName) +`, sequenceId.DatabaseName(), sequenceId.SchemaName(), sequenceId.Name()) } -func sequenceConfig(sequenceName string, databaseName string, schemaName string) string { - s := ` +func sequenceConfigWithComment(sequenceId sdk.SchemaObjectIdentifier, comment string) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_sequence" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + comment = "%[4]s" } -` - return fmt.Sprintf(s, sequenceName, databaseName, schemaName) +`, sequenceId.DatabaseName(), sequenceId.SchemaName(), sequenceId.Name(), comment) } -func sequenceConfigWithComment(sequenceName, comment string, databaseName string, schemaName string) string { - s := ` +func sequenceConfigWithIncrement(sequenceId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_sequence" { - name = "%s" - database = "%s" - schema = "%s" - comment = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + increment = 32 + ordering = "NOORDER" } -` - return fmt.Sprintf(s, sequenceName, databaseName, schemaName, comment) +`, sequenceId.DatabaseName(), sequenceId.SchemaName(), sequenceId.Name()) } From 540784149bfeb254989ef85036ae678bf6ce81a1 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 17:08:49 +0200 Subject: [PATCH 04/30] Verify service user resource acceptance test setups --- pkg/resources/service_user_acceptance_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/resources/service_user_acceptance_test.go b/pkg/resources/service_user_acceptance_test.go index 655f53abf98..a060ff0d84d 100644 --- a/pkg/resources/service_user_acceptance_test.go +++ b/pkg/resources/service_user_acceptance_test.go @@ -26,6 +26,9 @@ import ( ) func TestAcc_ServiceUser_BasicFlows(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() id2 := acc.TestClient().Ids.RandomAccountObjectIdentifier() @@ -537,6 +540,9 @@ func TestAcc_ServiceUser_AllParameters(t *testing.T) { } func TestAcc_ServiceUser_handleExternalTypeChange(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModel := model.ServiceUserWithDefaultMeta(userId.Name()) @@ -593,6 +599,9 @@ func TestAcc_ServiceUser_handleExternalTypeChange(t *testing.T) { } func TestAcc_ServiceUser_setIncompatibleAttributes(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() resource.Test(t, resource.TestCase{ From 5ba0dd7e1adf93abf884b8c9af1b4f15195ae16e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 17:12:32 +0200 Subject: [PATCH 05/30] Verify share resource acceptance test setups --- pkg/resources/share_acceptance_test.go | 51 +++++++++++++++----------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/pkg/resources/share_acceptance_test.go b/pkg/resources/share_acceptance_test.go index 675e53f01d0..3457b4bac17 100644 --- a/pkg/resources/share_acceptance_test.go +++ b/pkg/resources/share_acceptance_test.go @@ -7,7 +7,9 @@ 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" ) @@ -15,6 +17,10 @@ import ( // TODO [SNOW-1284394]: Unskip the test func TestAcc_Share(t *testing.T) { t.Skip("second and third account must be set for Share acceptance tests") + + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + var account2 string var account3 string @@ -30,7 +36,7 @@ func TestAcc_Share(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Share), Steps: []resource.TestStep{ { - Config: shareConfig(id.Name(), shareComment), + Config: shareConfig(id, shareComment), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_share.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_share.test", "fully_qualified_name", id.FullyQualifiedName()), @@ -39,7 +45,7 @@ func TestAcc_Share(t *testing.T) { ), }, { - Config: shareConfigTwoAccounts(id.Name(), shareComment, account2, account3), + Config: shareConfigTwoAccounts(id, shareComment, account2, account3), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_share.test", "accounts.#", "2"), resource.TestCheckResourceAttr("snowflake_share.test", "accounts.0", account2), @@ -47,14 +53,14 @@ func TestAcc_Share(t *testing.T) { ), }, { - Config: shareConfigOneAccount(id.Name(), shareComment, account2), + Config: shareConfigOneAccount(id, shareComment, account2), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_share.test", "accounts.#", "1"), resource.TestCheckResourceAttr("snowflake_share.test", "accounts.0", account2), ), }, { - Config: shareConfig(id.Name(), shareComment), + Config: shareConfig(id, shareComment), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_share.test", "accounts.#", "0"), ), @@ -70,7 +76,10 @@ func TestAcc_Share(t *testing.T) { } func TestAcc_Share_validateAccounts(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -81,42 +90,42 @@ func TestAcc_Share_validateAccounts(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Share), Steps: []resource.TestStep{ { - Config: shareConfigOneAccount(name, "any comment", "incorrect"), + Config: shareConfigOneAccount(id, "any comment", "incorrect"), ExpectError: regexp.MustCompile("Unable to parse the account identifier"), }, { - Config: shareConfigTwoAccounts(name, "any comment", "correct.one", "incorrect"), + Config: shareConfigTwoAccounts(id, "any comment", "correct.one", "incorrect"), ExpectError: regexp.MustCompile("Unable to parse the account identifier"), }, }, }) } -func shareConfig(name string, comment string) string { +func shareConfig(shareId sdk.AccountObjectIdentifier, comment string) string { return fmt.Sprintf(` resource "snowflake_share" "test" { - name = "%v" - comment = "%v" + name = "%s" + comment = "%s" } -`, name, comment) +`, shareId.Name(), comment) } -func shareConfigOneAccount(name string, comment string, account string) string { +func shareConfigOneAccount(shareId sdk.AccountObjectIdentifier, comment string, account string) string { return fmt.Sprintf(` resource "snowflake_share" "test" { - name = "%v" - comment = "%v" - accounts = ["%v"] + name = "%s" + comment = "%s" + accounts = ["%s"] } -`, name, comment, account) +`, shareId.Name(), comment, account) } -func shareConfigTwoAccounts(name string, comment string, account string, account2 string) string { +func shareConfigTwoAccounts(shareId sdk.AccountObjectIdentifier, comment string, account string, account2 string) string { return fmt.Sprintf(` resource "snowflake_share" "test" { - name = "%v" - comment = "%v" - accounts = ["%v", "%v"] + name = "%s" + comment = "%s" + accounts = ["%s", "%s"] } -`, name, comment, account, account2) +`, shareId.Name(), comment, account, account2) } From ca7d1ab1165ad826e876fe96ffb766f084784c27 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 17:14:00 +0200 Subject: [PATCH 06/30] Add shared database config model builder --- .../resourceassert/gen/resource_schema_def.go | 4 + .../config/model/shared_database_model_gen.go | 268 ++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/shared_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 4da9b951ec9..7a021d6640c 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -213,4 +213,8 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "SecondaryDatabase", schema: resources.SecondaryDatabase().Schema, }, + { + name: "SharedDatabase", + schema: resources.SharedDatabase().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/shared_database_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/shared_database_model_gen.go new file mode 100644 index 00000000000..dbef4636eeb --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/shared_database_model_gen.go @@ -0,0 +1,268 @@ +// 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 SharedDatabaseModel struct { + Catalog tfconfig.Variable `json:"catalog,omitempty"` + Comment tfconfig.Variable `json:"comment,omitempty"` + DefaultDdlCollation tfconfig.Variable `json:"default_ddl_collation,omitempty"` + EnableConsoleOutput tfconfig.Variable `json:"enable_console_output,omitempty"` + ExternalVolume tfconfig.Variable `json:"external_volume,omitempty"` + FromShare tfconfig.Variable `json:"from_share,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + LogLevel tfconfig.Variable `json:"log_level,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 SharedDatabase( + resourceName string, + fromShare string, + name string, +) *SharedDatabaseModel { + s := &SharedDatabaseModel{ResourceModelMeta: config.Meta(resourceName, resources.SharedDatabase)} + s.WithFromShare(fromShare) + s.WithName(name) + return s +} + +func SharedDatabaseWithDefaultMeta( + fromShare string, + name string, +) *SharedDatabaseModel { + s := &SharedDatabaseModel{ResourceModelMeta: config.DefaultMeta(resources.SharedDatabase)} + s.WithFromShare(fromShare) + s.WithName(name) + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *SharedDatabaseModel) MarshalJSON() ([]byte, error) { + type Alias SharedDatabaseModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + }) +} + +func (s *SharedDatabaseModel) WithDependsOn(values ...string) *SharedDatabaseModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (s *SharedDatabaseModel) WithCatalog(catalog string) *SharedDatabaseModel { + s.Catalog = tfconfig.StringVariable(catalog) + return s +} + +func (s *SharedDatabaseModel) WithComment(comment string) *SharedDatabaseModel { + s.Comment = tfconfig.StringVariable(comment) + return s +} + +func (s *SharedDatabaseModel) WithDefaultDdlCollation(defaultDdlCollation string) *SharedDatabaseModel { + s.DefaultDdlCollation = tfconfig.StringVariable(defaultDdlCollation) + return s +} + +func (s *SharedDatabaseModel) WithEnableConsoleOutput(enableConsoleOutput bool) *SharedDatabaseModel { + s.EnableConsoleOutput = tfconfig.BoolVariable(enableConsoleOutput) + return s +} + +func (s *SharedDatabaseModel) WithExternalVolume(externalVolume string) *SharedDatabaseModel { + s.ExternalVolume = tfconfig.StringVariable(externalVolume) + return s +} + +func (s *SharedDatabaseModel) WithFromShare(fromShare string) *SharedDatabaseModel { + s.FromShare = tfconfig.StringVariable(fromShare) + return s +} + +func (s *SharedDatabaseModel) WithFullyQualifiedName(fullyQualifiedName string) *SharedDatabaseModel { + s.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return s +} + +func (s *SharedDatabaseModel) WithLogLevel(logLevel string) *SharedDatabaseModel { + s.LogLevel = tfconfig.StringVariable(logLevel) + return s +} + +func (s *SharedDatabaseModel) WithName(name string) *SharedDatabaseModel { + s.Name = tfconfig.StringVariable(name) + return s +} + +func (s *SharedDatabaseModel) WithQuotedIdentifiersIgnoreCase(quotedIdentifiersIgnoreCase bool) *SharedDatabaseModel { + s.QuotedIdentifiersIgnoreCase = tfconfig.BoolVariable(quotedIdentifiersIgnoreCase) + return s +} + +func (s *SharedDatabaseModel) WithReplaceInvalidCharacters(replaceInvalidCharacters bool) *SharedDatabaseModel { + s.ReplaceInvalidCharacters = tfconfig.BoolVariable(replaceInvalidCharacters) + return s +} + +func (s *SharedDatabaseModel) WithStorageSerializationPolicy(storageSerializationPolicy string) *SharedDatabaseModel { + s.StorageSerializationPolicy = tfconfig.StringVariable(storageSerializationPolicy) + return s +} + +func (s *SharedDatabaseModel) WithSuspendTaskAfterNumFailures(suspendTaskAfterNumFailures int) *SharedDatabaseModel { + s.SuspendTaskAfterNumFailures = tfconfig.IntegerVariable(suspendTaskAfterNumFailures) + return s +} + +func (s *SharedDatabaseModel) WithTaskAutoRetryAttempts(taskAutoRetryAttempts int) *SharedDatabaseModel { + s.TaskAutoRetryAttempts = tfconfig.IntegerVariable(taskAutoRetryAttempts) + return s +} + +func (s *SharedDatabaseModel) WithTraceLevel(traceLevel string) *SharedDatabaseModel { + s.TraceLevel = tfconfig.StringVariable(traceLevel) + return s +} + +func (s *SharedDatabaseModel) WithUserTaskManagedInitialWarehouseSize(userTaskManagedInitialWarehouseSize string) *SharedDatabaseModel { + s.UserTaskManagedInitialWarehouseSize = tfconfig.StringVariable(userTaskManagedInitialWarehouseSize) + return s +} + +func (s *SharedDatabaseModel) WithUserTaskMinimumTriggerIntervalInSeconds(userTaskMinimumTriggerIntervalInSeconds int) *SharedDatabaseModel { + s.UserTaskMinimumTriggerIntervalInSeconds = tfconfig.IntegerVariable(userTaskMinimumTriggerIntervalInSeconds) + return s +} + +func (s *SharedDatabaseModel) WithUserTaskTimeoutMs(userTaskTimeoutMs int) *SharedDatabaseModel { + s.UserTaskTimeoutMs = tfconfig.IntegerVariable(userTaskTimeoutMs) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *SharedDatabaseModel) WithCatalogValue(value tfconfig.Variable) *SharedDatabaseModel { + s.Catalog = value + return s +} + +func (s *SharedDatabaseModel) WithCommentValue(value tfconfig.Variable) *SharedDatabaseModel { + s.Comment = value + return s +} + +func (s *SharedDatabaseModel) WithDefaultDdlCollationValue(value tfconfig.Variable) *SharedDatabaseModel { + s.DefaultDdlCollation = value + return s +} + +func (s *SharedDatabaseModel) WithEnableConsoleOutputValue(value tfconfig.Variable) *SharedDatabaseModel { + s.EnableConsoleOutput = value + return s +} + +func (s *SharedDatabaseModel) WithExternalVolumeValue(value tfconfig.Variable) *SharedDatabaseModel { + s.ExternalVolume = value + return s +} + +func (s *SharedDatabaseModel) WithFromShareValue(value tfconfig.Variable) *SharedDatabaseModel { + s.FromShare = value + return s +} + +func (s *SharedDatabaseModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *SharedDatabaseModel { + s.FullyQualifiedName = value + return s +} + +func (s *SharedDatabaseModel) WithLogLevelValue(value tfconfig.Variable) *SharedDatabaseModel { + s.LogLevel = value + return s +} + +func (s *SharedDatabaseModel) WithNameValue(value tfconfig.Variable) *SharedDatabaseModel { + s.Name = value + return s +} + +func (s *SharedDatabaseModel) WithQuotedIdentifiersIgnoreCaseValue(value tfconfig.Variable) *SharedDatabaseModel { + s.QuotedIdentifiersIgnoreCase = value + return s +} + +func (s *SharedDatabaseModel) WithReplaceInvalidCharactersValue(value tfconfig.Variable) *SharedDatabaseModel { + s.ReplaceInvalidCharacters = value + return s +} + +func (s *SharedDatabaseModel) WithStorageSerializationPolicyValue(value tfconfig.Variable) *SharedDatabaseModel { + s.StorageSerializationPolicy = value + return s +} + +func (s *SharedDatabaseModel) WithSuspendTaskAfterNumFailuresValue(value tfconfig.Variable) *SharedDatabaseModel { + s.SuspendTaskAfterNumFailures = value + return s +} + +func (s *SharedDatabaseModel) WithTaskAutoRetryAttemptsValue(value tfconfig.Variable) *SharedDatabaseModel { + s.TaskAutoRetryAttempts = value + return s +} + +func (s *SharedDatabaseModel) WithTraceLevelValue(value tfconfig.Variable) *SharedDatabaseModel { + s.TraceLevel = value + return s +} + +func (s *SharedDatabaseModel) WithUserTaskManagedInitialWarehouseSizeValue(value tfconfig.Variable) *SharedDatabaseModel { + s.UserTaskManagedInitialWarehouseSize = value + return s +} + +func (s *SharedDatabaseModel) WithUserTaskMinimumTriggerIntervalInSecondsValue(value tfconfig.Variable) *SharedDatabaseModel { + s.UserTaskMinimumTriggerIntervalInSeconds = value + return s +} + +func (s *SharedDatabaseModel) WithUserTaskTimeoutMsValue(value tfconfig.Variable) *SharedDatabaseModel { + s.UserTaskTimeoutMs = value + return s +} From 207292f88a3caa483f1a24f4dfebc21de6d0e0d9 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 17:40:59 +0200 Subject: [PATCH 07/30] Fix shared database resource acceptance test setup --- pkg/acceptance/helpers/database_client.go | 17 +- .../shared_database_acceptance_test.go | 283 ++++++++---------- .../TestAcc_SharedDatabase/basic/test.tf | 5 - .../TestAcc_SharedDatabase/basic/variables.tf | 12 - .../TestAcc_SharedDatabase/complete/test.tf | 20 -- .../complete/variables.tf | 67 ----- 6 files changed, 132 insertions(+), 272 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_SharedDatabase/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_SharedDatabase/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_SharedDatabase/complete/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_SharedDatabase/complete/variables.tf diff --git a/pkg/acceptance/helpers/database_client.go b/pkg/acceptance/helpers/database_client.go index 579cd80baef..8d6c9e02a3c 100644 --- a/pkg/acceptance/helpers/database_client.go +++ b/pkg/acceptance/helpers/database_client.go @@ -181,25 +181,12 @@ func (c *DatabaseClient) Describe(t *testing.T, id sdk.AccountObjectIdentifier) func (c *DatabaseClient) CreateDatabaseFromShareTemporarily(t *testing.T, externalShareId sdk.ExternalObjectIdentifier) { t.Helper() - databaseId := c.ids.RandomAccountObjectIdentifier() - err := c.client().CreateShared(context.Background(), databaseId, externalShareId, new(sdk.CreateSharedDatabaseOptions)) - require.NoError(t, err) - - require.Eventually(t, func() bool { - database, err := c.Show(t, databaseId) - if err != nil { - return false - } - // Origin is returned as "" in those cases, because it's not valid sdk.ExternalObjectIdentifier parser sets it as nil. - // Once it turns into valid sdk.ExternalObjectIdentifier, we're ready to proceed with the actual test. - return database.Origin != nil - }, time.Minute, time.Second*6) + db, _ := c.CreateDatabaseFromShare(t, externalShareId) - err = c.DropDatabase(t, databaseId) + err := c.DropDatabase(t, db.ID()) require.NoError(t, err) } -// CreateDatabaseFromShare logic is duplicated from CreateDatabaseFromShareTemporarily. func (c *DatabaseClient) CreateDatabaseFromShare(t *testing.T, externalShareId sdk.ExternalObjectIdentifier) (*sdk.Database, func()) { t.Helper() diff --git a/pkg/resources/shared_database_acceptance_test.go b/pkg/resources/shared_database_acceptance_test.go index 2108bfb7769..55f171af67a 100644 --- a/pkg/resources/shared_database_acceptance_test.go +++ b/pkg/resources/shared_database_acceptance_test.go @@ -3,23 +3,29 @@ package resources_test import ( "fmt" "regexp" - "strconv" "testing" 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" "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" ) +// TODO [SNOW-1991414]: discuss and address all the nondeterministic tests in this file func TestAcc_CreateSharedDatabase_Basic(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + shareExternalId := createShareableDatabase(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() @@ -43,15 +49,10 @@ func TestAcc_CreateSharedDatabase_Basic(t *testing.T) { accountEnableConsoleOutput = new(string) ) - configVariables := func(id sdk.AccountObjectIdentifier, shareName sdk.ExternalObjectIdentifier, comment string) config.Variables { - return config.Variables{ - "name": config.StringVariable(id.Name()), - "from_share": config.StringVariable(shareName.FullyQualifiedName()), - "comment": config.StringVariable(comment), - } - } - - shareExternalId := createShareableDatabase(t) + sharedDatabaseModel := model.SharedDatabase("test", shareExternalId.FullyQualifiedName(), id.Name()). + WithComment(comment) + sharedDatabaseModelRenamed := model.SharedDatabase("test", shareExternalId.FullyQualifiedName(), newId.Name()). + WithComment(newComment) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -79,65 +80,62 @@ func TestAcc_CreateSharedDatabase_Basic(t *testing.T) { *accountQuotedIdentifiersIgnoreCase = helpers.FindParameter(t, params, sdk.AccountParameterQuotedIdentifiersIgnoreCase).Value *accountEnableConsoleOutput = helpers.FindParameter(t, params, sdk.AccountParameterEnableConsoleOutput).Value }, - ConfigVariables: configVariables(id, shareExternalId, comment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/basic"), + Config: accconfig.FromModels(t, sharedDatabaseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "from_share", shareExternalId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "comment", comment), - - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "from_share", shareExternalId.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(sharedDatabaseModel.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), ), }, { - ConfigVariables: configVariables(newId, shareExternalId, newComment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/basic"), + Config: accconfig.FromModels(t, sharedDatabaseModelRenamed), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_shared_database.test", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(sharedDatabaseModelRenamed.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "fully_qualified_name", newId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "from_share", shareExternalId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "comment", newComment), - - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "external_volume", accountExternalVolume), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "catalog", accountCatalog), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "replace_invalid_characters", accountReplaceInvalidCharacters), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "default_ddl_collation", accountDefaultDdlCollation), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "storage_serialization_policy", accountStorageSerializationPolicy), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "log_level", accountLogLevel), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "trace_level", accountTraceLevel), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "task_auto_retry_attempts", accountTaskAutoRetryAttempts), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_timeout_ms", accountUserTaskTimeoutMs), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), - resource.TestCheckResourceAttrPtr("snowflake_shared_database.test", "enable_console_output", accountEnableConsoleOutput), + resource.TestCheckResourceAttr(sharedDatabaseModelRenamed.ResourceReference(), "name", newId.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModelRenamed.ResourceReference(), "fully_qualified_name", newId.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModelRenamed.ResourceReference(), "from_share", shareExternalId.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModelRenamed.ResourceReference(), "comment", newComment), + + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "external_volume", accountExternalVolume), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "catalog", accountCatalog), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "replace_invalid_characters", accountReplaceInvalidCharacters), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "default_ddl_collation", accountDefaultDdlCollation), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "storage_serialization_policy", accountStorageSerializationPolicy), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "log_level", accountLogLevel), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "trace_level", accountTraceLevel), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "suspend_task_after_num_failures", accountSuspendTaskAfterNumFailures), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "task_auto_retry_attempts", accountTaskAutoRetryAttempts), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "user_task_managed_initial_warehouse_size", accountUserTaskMangedInitialWarehouseSize), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "user_task_timeout_ms", accountUserTaskTimeoutMs), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", accountUserTaskMinimumTriggerIntervalInSeconds), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "quoted_identifiers_ignore_case", accountQuotedIdentifiersIgnoreCase), + resource.TestCheckResourceAttrPtr(sharedDatabaseModelRenamed.ResourceReference(), "enable_console_output", accountEnableConsoleOutput), ), }, // Import all values { - ConfigVariables: configVariables(newId, shareExternalId, newComment), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/basic"), - ResourceName: "snowflake_shared_database.test", + Config: accconfig.FromModels(t, sharedDatabaseModelRenamed), + ResourceName: sharedDatabaseModelRenamed.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -149,8 +147,6 @@ func TestAcc_CreateSharedDatabase_complete(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - comment := random.Comment() externalShareId := createShareableDatabase(t) externalVolumeId, externalVolumeCleanup := acc.TestClient().ExternalVolume.Create(t) @@ -159,28 +155,25 @@ func TestAcc_CreateSharedDatabase_complete(t *testing.T) { catalogId, catalogCleanup := acc.TestClient().CatalogIntegration.Create(t) t.Cleanup(catalogCleanup) - configVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "from_share": config.StringVariable(externalShareId.FullyQualifiedName()), - "comment": config.StringVariable(comment), - - "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.StorageSerializationPolicyOptimized)), - "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), - } + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + comment := random.Comment() - acc.TestClient().Database.CreateDatabaseFromShareTemporarily(t, externalShareId) + sharedDatabaseModelComplete := model.SharedDatabase("test", externalShareId.FullyQualifiedName(), id.Name()). + WithComment(comment). + WithExternalVolume(externalVolumeId.Name()). + WithCatalog(catalogId.Name()). + WithReplaceInvalidCharacters(true). + WithDefaultDdlCollation("en_US"). + WithStorageSerializationPolicy(string(sdk.StorageSerializationPolicyOptimized)). + WithLogLevel(string(sdk.LogLevelInfo)). + WithTraceLevel(string(sdk.TraceLevelOnEvent)). + WithSuspendTaskAfterNumFailures(20). + WithTaskAutoRetryAttempts(20). + WithUserTaskManagedInitialWarehouseSize(string(sdk.WarehouseSizeXLarge)). + WithUserTaskTimeoutMs(1200000). + WithUserTaskMinimumTriggerIntervalInSeconds(120). + WithQuotedIdentifiersIgnoreCase(true). + WithEnableConsoleOutput(true) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -191,35 +184,33 @@ func TestAcc_CreateSharedDatabase_complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SharedDatabase), Steps: []resource.TestStep{ { - ConfigVariables: configVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/complete"), + Config: accconfig.FromModels(t, sharedDatabaseModelComplete), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "from_share", externalShareId.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "comment", comment), - - resource.TestCheckResourceAttr("snowflake_shared_database.test", "external_volume", externalVolumeId.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "catalog", catalogId.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "replace_invalid_characters", "true"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "default_ddl_collation", "en_US"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "storage_serialization_policy", string(sdk.StorageSerializationPolicyOptimized)), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "log_level", string(sdk.LogLevelInfo)), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "trace_level", string(sdk.TraceLevelOnEvent)), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "suspend_task_after_num_failures", "20"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "task_auto_retry_attempts", "20"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "user_task_timeout_ms", "1200000"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "user_task_minimum_trigger_interval_in_seconds", "120"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "quoted_identifiers_ignore_case", "true"), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "enable_console_output", "true"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "from_share", externalShareId.FullyQualifiedName()), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "external_volume", externalVolumeId.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "catalog", catalogId.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "replace_invalid_characters", "true"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "default_ddl_collation", "en_US"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "storage_serialization_policy", string(sdk.StorageSerializationPolicyOptimized)), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "log_level", string(sdk.LogLevelInfo)), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "trace_level", string(sdk.TraceLevelOnEvent)), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "suspend_task_after_num_failures", "20"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "task_auto_retry_attempts", "20"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "user_task_managed_initial_warehouse_size", string(sdk.WarehouseSizeXLarge)), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "user_task_timeout_ms", "1200000"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "user_task_minimum_trigger_interval_in_seconds", "120"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "quoted_identifiers_ignore_case", "true"), + resource.TestCheckResourceAttr(sharedDatabaseModelComplete.ResourceReference(), "enable_console_output", "true"), ), }, // Import all values { - ConfigVariables: configVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/complete"), - ResourceName: "snowflake_shared_database.test", + Config: accconfig.FromModels(t, sharedDatabaseModelComplete), + ResourceName: sharedDatabaseModelComplete.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -228,28 +219,17 @@ func TestAcc_CreateSharedDatabase_complete(t *testing.T) { } func TestAcc_CreateSharedDatabase_InvalidValues(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + comment := random.Comment() - configVariables := config.Variables{ - "name": config.StringVariable("name"), - "from_share": config.StringVariable("org.acc.name"), - "comment": config.StringVariable(comment), - - "external_volume": config.StringVariable(""), - "catalog": config.StringVariable(""), - "replace_invalid_characters": config.BoolVariable(false), - "default_ddl_collation": config.StringVariable(""), - "storage_serialization_policy": config.StringVariable("invalid_value"), - "log_level": config.StringVariable("invalid_value"), - "trace_level": config.StringVariable("invalid_value"), - "suspend_task_after_num_failures": config.IntegerVariable(0), - "task_auto_retry_attempts": config.IntegerVariable(0), - "user_task_managed_initial_warehouse_size": config.StringVariable(""), - "user_task_timeout_ms": config.IntegerVariable(0), - "user_task_minimum_trigger_interval_in_seconds": config.IntegerVariable(0), - "quoted_identifiers_ignore_case": config.BoolVariable(false), - "enable_console_output": config.BoolVariable(false), - } + sharedDatabaseModelInvalid := model.SharedDatabase("test", "org.acc.name", "org.acc.name"). + WithComment(comment). + WithStorageSerializationPolicy("invalid_value"). + WithLogLevel("invalid_value"). + WithTraceLevel("invalid_value"). + WithUserTaskManagedInitialWarehouseSize("invalid_value") resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -260,8 +240,7 @@ func TestAcc_CreateSharedDatabase_InvalidValues(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SharedDatabase), Steps: []resource.TestStep{ { - ConfigVariables: configVariables, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SharedDatabase/complete"), + Config: accconfig.FromModels(t, sharedDatabaseModelInvalid), ExpectError: regexp.MustCompile(`(unknown log level: invalid_value)|` + `(unknown trace level: invalid_value)|` + `(unknown storage serialization policy: invalid_value)|` + @@ -279,7 +258,7 @@ func createShareableDatabase(t *testing.T) sdk.ExternalObjectIdentifier { share, shareCleanup := acc.SecondaryTestClient().Share.CreateShare(t) t.Cleanup(shareCleanup) - sharedDatabase, sharedDatabaseCleanup := acc.SecondaryTestClient().Database.CreateDatabase(t) + sharedDatabase, sharedDatabaseCleanup := acc.SecondaryTestClient().Database.CreateDatabaseWithParametersSet(t) t.Cleanup(sharedDatabaseCleanup) revoke := acc.SecondaryTestClient().Grant.GrantPrivilegeOnDatabaseToShare(t, sharedDatabase.ID(), share.ID(), []sdk.ObjectPrivilege{sdk.ObjectPrivilegeUsage}) @@ -287,17 +266,22 @@ func createShareableDatabase(t *testing.T) sdk.ExternalObjectIdentifier { acc.SecondaryTestClient().Share.SetAccountOnShare(t, acc.TestClient().Account.GetAccountIdentifier(t), share.ID()) - return sdk.NewExternalObjectIdentifier(acc.SecondaryTestClient().Account.GetAccountIdentifier(t), share.ID()) + externalShareId := sdk.NewExternalObjectIdentifier(acc.SecondaryTestClient().Account.GetAccountIdentifier(t), share.ID()) + + acc.TestClient().Database.CreateDatabaseFromShareTemporarily(t, externalShareId) + + return externalShareId } func TestAcc_SharedDatabase_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() externalShareId := createShareableDatabase(t) - acc.TestClient().Database.CreateDatabaseFromShareTemporarily(t, externalShareId) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + + sharedDatabaseModel := model.SharedDatabase("test", externalShareId.FullyQualifiedName(), id.Name()) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -314,41 +298,34 @@ func TestAcc_SharedDatabase_migrateFromV0941_ensureSmoothUpgradeWithNewResourceI Source: "Snowflake-Labs/snowflake", }, }, - Config: sharedDatabaseConfigBasic(id.Name(), externalShareId.FullyQualifiedName()), + Config: accconfig.FromModels(t, sharedDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: sharedDatabaseConfigBasic(id.Name(), externalShareId.FullyQualifiedName()), + Config: accconfig.FromModels(t, sharedDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "id", id.Name()), ), }, }, }) } -func sharedDatabaseConfigBasic(name, externalShareId string) string { - return fmt.Sprintf(`resource "snowflake_shared_database" "test" { - name = "%v" - from_share = %v - }`, name, strconv.Quote(externalShareId)) -} - func TestAcc_SharedDatabase_IdentifierQuotingDiffSuppression(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - quotedId := fmt.Sprintf(`\"%s\"`, id.Name()) - externalShareId := createShareableDatabase(t) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + quotedId := fmt.Sprintf(`"%s"`, id.Name()) unquotedExternalShareId := fmt.Sprintf("%s.%s.%s", externalShareId.AccountIdentifier().OrganizationName(), externalShareId.AccountIdentifier().AccountName(), externalShareId.Name()) - acc.TestClient().Database.CreateDatabaseFromShareTemporarily(t, externalShareId) + sharedDatabaseModel := model.SharedDatabase("test", unquotedExternalShareId, quotedId) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -366,27 +343,27 @@ func TestAcc_SharedDatabase_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: sharedDatabaseConfigBasic(quotedId, unquotedExternalShareId), + Config: accconfig.FromModels(t, sharedDatabaseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: sharedDatabaseConfigBasic(quotedId, unquotedExternalShareId), + Config: accconfig.FromModels(t, sharedDatabaseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_shared_database.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(sharedDatabaseModel.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_shared_database.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(sharedDatabaseModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_shared_database.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_shared_database.test", "id", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(sharedDatabaseModel.ResourceReference(), "id", id.Name()), ), }, }, diff --git a/pkg/resources/testdata/TestAcc_SharedDatabase/basic/test.tf b/pkg/resources/testdata/TestAcc_SharedDatabase/basic/test.tf deleted file mode 100644 index 31b366401b5..00000000000 --- a/pkg/resources/testdata/TestAcc_SharedDatabase/basic/test.tf +++ /dev/null @@ -1,5 +0,0 @@ -resource "snowflake_shared_database" "test" { - name = var.name - from_share = var.from_share - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_SharedDatabase/basic/variables.tf b/pkg/resources/testdata/TestAcc_SharedDatabase/basic/variables.tf deleted file mode 100644 index dc80047760d..00000000000 --- a/pkg/resources/testdata/TestAcc_SharedDatabase/basic/variables.tf +++ /dev/null @@ -1,12 +0,0 @@ -variable "name" { - type = string -} - -variable "from_share" { - type = string -} - -variable "comment" { - type = string -} - diff --git a/pkg/resources/testdata/TestAcc_SharedDatabase/complete/test.tf b/pkg/resources/testdata/TestAcc_SharedDatabase/complete/test.tf deleted file mode 100644 index 417d31a68da..00000000000 --- a/pkg/resources/testdata/TestAcc_SharedDatabase/complete/test.tf +++ /dev/null @@ -1,20 +0,0 @@ -resource "snowflake_shared_database" "test" { - name = var.name - from_share = var.from_share - comment = var.comment - - 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_SharedDatabase/complete/variables.tf b/pkg/resources/testdata/TestAcc_SharedDatabase/complete/variables.tf deleted file mode 100644 index 03f5793ff23..00000000000 --- a/pkg/resources/testdata/TestAcc_SharedDatabase/complete/variables.tf +++ /dev/null @@ -1,67 +0,0 @@ -variable "name" { - type = string -} - -variable "from_share" { - type = string -} - -variable "comment" { - 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 -} From 0874b67c0ee46e836a593efb9028edb58869aca4 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 18:06:06 +0200 Subject: [PATCH 08/30] Fix stage resource acceptance test setup --- pkg/resources/stage_acceptance_test.go | 148 ++++++++++-------- .../TestAcc_Stage_CreateAndAlter/test.tf | 13 +- 2 files changed, 83 insertions(+), 78 deletions(-) diff --git a/pkg/resources/stage_acceptance_test.go b/pkg/resources/stage_acceptance_test.go index 6cb504b0f58..43502485d03 100644 --- a/pkg/resources/stage_acceptance_test.go +++ b/pkg/resources/stage_acceptance_test.go @@ -20,7 +20,18 @@ import ( ) func TestAcc_StageAlterWhenBothURLAndStorageIntegrationChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + roleArn := "arn:aws:iam::000000000001:/role/test" + baseUrl := "s3://foo" + firstUrl := baseUrl + "/allowed-location" + secondUrl := baseUrl + "/allowed-location2" + + storageIntegration, storageIntegrationCleanup := acc.TestClient().StorageIntegration.CreateS3(t, baseUrl, roleArn) + t.Cleanup(storageIntegrationCleanup) + + stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -31,34 +42,51 @@ func TestAcc_StageAlterWhenBothURLAndStorageIntegrationChange(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Stage), Steps: []resource.TestStep{ { - Config: stageIntegrationConfig(id.Name(), "si1", "s3://foo/", acc.TestDatabaseName, acc.TestSchemaName), + Config: stageIntegrationConfig(stageId, storageIntegration.ID(), firstUrl), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_stage.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_stage.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_stage.test", "url", "s3://foo/"), + resource.TestCheckResourceAttr("snowflake_stage.test", "name", stageId.Name()), + resource.TestCheckResourceAttr("snowflake_stage.test", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_stage.test", "schema", acc.TestSchemaName), + resource.TestCheckResourceAttr("snowflake_stage.test", "fully_qualified_name", stageId.FullyQualifiedName()), + resource.TestCheckResourceAttr("snowflake_stage.test", "url", firstUrl), ), }, { - Config: stageIntegrationConfig(id.Name(), "changed", "s3://changed/", acc.TestDatabaseName, acc.TestSchemaName), + Config: stageIntegrationConfig(stageId, storageIntegration.ID(), secondUrl), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_stage.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_stage.test", "fully_qualified_name", id.FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_stage.test", "url", "s3://changed/"), + resource.TestCheckResourceAttr("snowflake_stage.test", "name", stageId.Name()), + resource.TestCheckResourceAttr("snowflake_stage.test", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("snowflake_stage.test", "schema", acc.TestSchemaName), + resource.TestCheckResourceAttr("snowflake_stage.test", "fully_qualified_name", stageId.FullyQualifiedName()), + resource.TestCheckResourceAttr("snowflake_stage.test", "url", secondUrl), ), }, }, }) } +func stageIntegrationConfig(stageId sdk.SchemaObjectIdentifier, storageIntegrationId sdk.AccountObjectIdentifier, url string) string { + return fmt.Sprintf(` +resource "snowflake_stage" "test" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + storage_integration = "%[4]s" + url = "%[5]s" +} +`, stageId.DatabaseName(), stageId.SchemaName(), stageId.Name(), storageIntegrationId.Name(), url) +} + func TestAcc_Stage_CreateAndAlter(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + awsBucketUrl := testenvs.GetOrSkipTest(t, testenvs.AwsExternalBucketUrl) awsKeyId := testenvs.GetOrSkipTest(t, testenvs.AwsExternalKeyId) awsSecretKey := testenvs.GetOrSkipTest(t, testenvs.AwsExternalSecretKey) - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() - name := acc.TestClient().Ids.Alpha() - id := sdk.NewSchemaObjectIdentifier(databaseName, schemaName, name) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + name := id.Name() url := "s3://foo/" comment := random.Comment() initialStorageIntegration := "" @@ -77,8 +105,8 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { configVariables := func(url string, storageIntegration string, credentials string, encryption string, fileFormat string, comment string, copyOptions string) config.Variables { return config.Variables{ - "database": config.StringVariable(databaseName), - "schema": config.StringVariable(schemaName), + "database": config.StringVariable(id.DatabaseName()), + "schema": config.StringVariable(id.SchemaName()), "name": config.StringVariable(name), "url": config.StringVariable(url), "storage_integration": config.StringVariable(storageIntegration), @@ -91,6 +119,7 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { } resourceName := "snowflake_stage.test" + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -103,8 +132,8 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { ConfigDirectory: config.TestNameDirectory(), ConfigVariables: configVariables(url, initialStorageIntegration, credentials, encryption, "", comment, copyOptionsWithQuotes), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "database", databaseName), - resource.TestCheckResourceAttr(resourceName, "schema", schemaName), + resource.TestCheckResourceAttr(resourceName, "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(resourceName, "schema", acc.TestSchemaName), resource.TestCheckResourceAttr(resourceName, "name", name), resource.TestCheckResourceAttr(resourceName, "storage_integration", initialStorageIntegration), resource.TestCheckResourceAttr(resourceName, "credentials", credentials), @@ -122,8 +151,8 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { ConfigDirectory: config.TestNameDirectory(), ConfigVariables: configVariables(changedUrl, changedStorageIntegration.Name(), credentials, changedEncryption, changedFileFormat, changedComment, copyOptionsWithoutQuotes), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "database", databaseName), - resource.TestCheckResourceAttr(resourceName, "schema", schemaName), + resource.TestCheckResourceAttr(resourceName, "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(resourceName, "schema", acc.TestSchemaName), resource.TestCheckResourceAttr(resourceName, "name", name), resource.TestCheckResourceAttr(resourceName, "fully_qualified_name", id.FullyQualifiedName()), resource.TestCheckResourceAttr(resourceName, "storage_integration", changedStorageIntegration.Name()), @@ -142,8 +171,8 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { ConfigDirectory: config.TestNameDirectory(), ConfigVariables: configVariables(changedUrl, changedStorageIntegration.Name(), credentials, changedEncryption, changedFileFormatWithQuotes, changedComment, copyOptionsWithoutQuotes), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "database", databaseName), - resource.TestCheckResourceAttr(resourceName, "schema", schemaName), + resource.TestCheckResourceAttr(resourceName, "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(resourceName, "schema", acc.TestSchemaName), resource.TestCheckResourceAttr(resourceName, "name", name), resource.TestCheckResourceAttr(resourceName, "fully_qualified_name", id.FullyQualifiedName()), resource.TestCheckResourceAttr(resourceName, "storage_integration", changedStorageIntegration.Name()), @@ -167,8 +196,8 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { ConfigDirectory: config.TestNameDirectory(), ConfigVariables: configVariables(url, initialStorageIntegration, credentials, encryption, "", comment, copyOptionsWithoutQuotes), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "database", databaseName), - resource.TestCheckResourceAttr(resourceName, "schema", schemaName), + resource.TestCheckResourceAttr(resourceName, "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr(resourceName, "schema", acc.TestSchemaName), resource.TestCheckResourceAttr(resourceName, "name", name), resource.TestCheckResourceAttr(resourceName, "fully_qualified_name", id.FullyQualifiedName()), resource.TestCheckResourceAttr(resourceName, "storage_integration", initialStorageIntegration), @@ -187,31 +216,14 @@ func TestAcc_Stage_CreateAndAlter(t *testing.T) { }) } -func stageIntegrationConfig(name string, siNameSuffix string, url string, databaseName string, schemaName string) string { - return fmt.Sprintf(` -resource "snowflake_storage_integration" "test" { - name = "%[1]s%[2]s" - storage_allowed_locations = ["%[3]s"] - storage_provider = "S3" - - storage_aws_role_arn = "arn:aws:iam::000000000001:/role/test" -} - -resource "snowflake_stage" "test" { - name = "%[1]s" - url = "%[3]s" - storage_integration = snowflake_storage_integration.test.name - database = "%[4]s" - schema = "%[5]s" -} -`, name, siNameSuffix, url, databaseName, schemaName) -} - func TestAcc_Stage_Issue2972(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(stageId.SchemaId()) - resourceName := "snowflake_stage.test" + resourceName := "snowflake_stage.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -251,22 +263,32 @@ func TestAcc_Stage_Issue2972(t *testing.T) { func stageIssue2972Config(stageId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_stage" "test" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } -`, stageId.Name(), stageId.DatabaseName(), stageId.SchemaName()) +`, stageId.DatabaseName(), stageId.SchemaName(), stageId.Name()) } // TODO [SNOW-1348110]: fix behavior with stage rework func TestAcc_Stage_Issue2679(t *testing.T) { - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + roleArn := "arn:aws:iam::000000000001:/role/test" + baseUrl := "s3://foo" + allowedUrl := baseUrl + "/allowed-location" + + storageIntegration, storageIntegrationCleanup := acc.TestClient().StorageIntegration.CreateS3(t, baseUrl, roleArn) + t.Cleanup(storageIntegrationCleanup) + + storageIntegrationId := storageIntegration.ID() stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stage.test" fileFormatWithDefaultTypeCsv := "TYPE = CSV NULL_IF = []" fileFormatWithoutType := "NULL_IF = []" + resourceName := "snowflake_stage.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -276,7 +298,7 @@ func TestAcc_Stage_Issue2679(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Stage), Steps: []resource.TestStep{ { - Config: stageIssue2679Config(integrationId, stageId, fileFormatWithDefaultTypeCsv), + Config: stageIssue2679Config(stageId, storageIntegrationId, fileFormatWithDefaultTypeCsv, allowedUrl), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", stageId.Name()), ), @@ -288,7 +310,7 @@ func TestAcc_Stage_Issue2679(t *testing.T) { plancheck.ExpectEmptyPlan(), }, }, - Config: stageIssue2679Config(integrationId, stageId, fileFormatWithoutType), + Config: stageIssue2679Config(stageId, storageIntegrationId, fileFormatWithoutType, allowedUrl), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", stageId.Name()), // TODO [SNOW-1348110]: use generated assertions after stage rework @@ -314,23 +336,15 @@ func TestAcc_Stage_Issue2679(t *testing.T) { }) } -func stageIssue2679Config(integrationId sdk.AccountObjectIdentifier, stageId sdk.SchemaObjectIdentifier, fileFormat string) string { +func stageIssue2679Config(stageId sdk.SchemaObjectIdentifier, storageIntegrationId sdk.AccountObjectIdentifier, fileFormat string, url string) string { return fmt.Sprintf(` -resource "snowflake_storage_integration" "test" { - name = "%[1]s" - storage_allowed_locations = ["s3://aaaaa"] - storage_provider = "S3" - - storage_aws_role_arn = "arn:aws:iam::000000000001:/role/test" -} - resource "snowflake_stage" "test" { - name = "%[2]s" - database = "%[3]s" - schema = "%[4]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + storage_integration = "%[4]s" file_format = "%[5]s" - storage_integration = snowflake_storage_integration.test.name - url = "s3://aaaaa" + url = "%[6]s" } -`, integrationId.Name(), stageId.Name(), stageId.DatabaseName(), stageId.SchemaName(), fileFormat) +`, stageId.DatabaseName(), stageId.SchemaName(), stageId.Name(), storageIntegrationId.Name(), fileFormat, url) } diff --git a/pkg/resources/testdata/TestAcc_Stage_CreateAndAlter/test.tf b/pkg/resources/testdata/TestAcc_Stage_CreateAndAlter/test.tf index e2d5d700f36..783d468d83d 100644 --- a/pkg/resources/testdata/TestAcc_Stage_CreateAndAlter/test.tf +++ b/pkg/resources/testdata/TestAcc_Stage_CreateAndAlter/test.tf @@ -1,16 +1,7 @@ -resource "snowflake_database" "test" { - name = var.database -} - -resource "snowflake_schema" "test" { - name = var.schema - database = snowflake_database.test.name -} - resource "snowflake_stage" "test" { name = var.name - schema = snowflake_schema.test.name - database = snowflake_database.test.name + schema = var.schema + database = var.database comment = var.comment url = var.url storage_integration = var.storage_integration From 11756b113077b3e931dd8448678764917a878d82 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 18:11:13 +0200 Subject: [PATCH 09/30] Verify storage integration resource acceptance test setup --- .../storage_integration_acceptance_test.go | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/pkg/resources/storage_integration_acceptance_test.go b/pkg/resources/storage_integration_acceptance_test.go index 7ae40795942..8c534605bd3 100644 --- a/pkg/resources/storage_integration_acceptance_test.go +++ b/pkg/resources/storage_integration_acceptance_test.go @@ -16,6 +16,9 @@ import ( ) func TestAcc_StorageIntegration_Empty_StorageAllowedLocations(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -26,6 +29,7 @@ func TestAcc_StorageIntegration_Empty_StorageAllowedLocations(t *testing.T) { Steps: []resource.TestStep{ { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/Empty_StorageAllowedLocations"), + PlanOnly: true, ExpectError: regexp.MustCompile("Not enough list items"), }, }, @@ -33,10 +37,14 @@ func TestAcc_StorageIntegration_Empty_StorageAllowedLocations(t *testing.T) { } func TestAcc_StorageIntegration_AWSObjectACL_Update(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + configVariables := func(awsObjectACLSet bool) config.Variables { variables := config.Variables{ - "name": config.StringVariable(name), + "name": config.StringVariable(id.Name()), "allowed_locations": config.SetVariable( config.StringVariable("s3://foo/"), ), @@ -59,7 +67,7 @@ func TestAcc_StorageIntegration_AWSObjectACL_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/AWSObjectACL_Update/before"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckNoResourceAttr("snowflake_storage_integration.test", "storage_aws_object_acl"), ), @@ -68,7 +76,7 @@ func TestAcc_StorageIntegration_AWSObjectACL_Update(t *testing.T) { ConfigVariables: configVariables(true), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/AWSObjectACL_Update/after"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_aws_object_acl", "bucket-owner-full-control"), ), @@ -77,7 +85,7 @@ func TestAcc_StorageIntegration_AWSObjectACL_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/AWSObjectACL_Update/before"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_aws_object_acl", ""), ), @@ -87,8 +95,12 @@ func TestAcc_StorageIntegration_AWSObjectACL_Update(t *testing.T) { } func TestAcc_StorageIntegration_AWS_Update(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() awsRoleArn := "arn:aws:iam::000000000001:/role/test" + configVariables := func(set bool) config.Variables { variables := config.Variables{ "name": config.StringVariable(id.Name()), @@ -173,14 +185,19 @@ func TestAcc_StorageIntegration_AWS_Update(t *testing.T) { } func TestAcc_StorageIntegration_Azure_Update(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + azureBucketUrl := testenvs.GetOrSkipTest(t, testenvs.AzureExternalBucketUrl) - name := acc.TestClient().Ids.Alpha() azureTenantId, err := uuid.GenerateUUID() require.NoError(t, err) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + configVariables := func(set bool) config.Variables { variables := config.Variables{ - "name": config.StringVariable(name), + "name": config.StringVariable(id.Name()), "azure_tenant_id": config.StringVariable(azureTenantId), "allowed_locations": config.SetVariable( config.StringVariable(azureBucketUrl + "/foo"), @@ -212,7 +229,7 @@ func TestAcc_StorageIntegration_Azure_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/Azure_Update/unset"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "false"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "azure_tenant_id", azureTenantId), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "1"), @@ -225,7 +242,7 @@ func TestAcc_StorageIntegration_Azure_Update(t *testing.T) { ConfigVariables: configVariables(true), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/Azure_Update/set"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "comment", "some comment"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "azure_tenant_id", azureTenantId), @@ -241,7 +258,7 @@ func TestAcc_StorageIntegration_Azure_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/Azure_Update/unset"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "false"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "azure_tenant_id", azureTenantId), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "1"), @@ -255,10 +272,14 @@ func TestAcc_StorageIntegration_Azure_Update(t *testing.T) { } func TestAcc_StorageIntegration_GCP_Update(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + configVariables := func(set bool) config.Variables { variables := config.Variables{ - "name": config.StringVariable(name), + "name": config.StringVariable(id.Name()), "allowed_locations": config.SetVariable( config.StringVariable("gcs://allowed_foo/"), ), @@ -289,7 +310,7 @@ func TestAcc_StorageIntegration_GCP_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/GCP_Update/unset"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "false"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "1"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.0", "gcs://allowed_foo/"), @@ -301,7 +322,7 @@ func TestAcc_StorageIntegration_GCP_Update(t *testing.T) { ConfigVariables: configVariables(true), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/GCP_Update/set"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "comment", "some comment"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "2"), @@ -316,7 +337,7 @@ func TestAcc_StorageIntegration_GCP_Update(t *testing.T) { ConfigVariables: configVariables(false), ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/GCP_Update/unset"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "false"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "1"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.0", "gcs://allowed_foo/"), @@ -329,9 +350,13 @@ func TestAcc_StorageIntegration_GCP_Update(t *testing.T) { } func TestAcc_StorageIntegration_BlockedLocations_issue2985(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + configVariables := config.Variables{ - "name": config.StringVariable(name), + "name": config.StringVariable(id.Name()), "allowed_locations": config.SetVariable( config.StringVariable("gcs://allowed_foo/"), ), @@ -354,7 +379,7 @@ func TestAcc_StorageIntegration_BlockedLocations_issue2985(t *testing.T) { ConfigVariables: configVariables, ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StorageIntegration/GCP_Update/set"), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", name), + resource.TestCheckResourceAttr("snowflake_storage_integration.test", "name", id.Name()), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "enabled", "true"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "comment", "some comment"), resource.TestCheckResourceAttr("snowflake_storage_integration.test", "storage_allowed_locations.#", "1"), From 2f9ec6eb82faeb28053d6f7e8b534b765150b4a9 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Tue, 1 Apr 2025 18:44:45 +0200 Subject: [PATCH 10/30] Fix stream on directory table resource acceptance test setup --- ...ream_on_directory_table_acceptance_test.go | 90 +++++++++++-------- 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/pkg/resources/stream_on_directory_table_acceptance_test.go b/pkg/resources/stream_on_directory_table_acceptance_test.go index f3b17d290d5..3f507a8facc 100644 --- a/pkg/resources/stream_on_directory_table_acceptance_test.go +++ b/pkg/resources/stream_on_directory_table_acceptance_test.go @@ -27,13 +27,12 @@ import ( func TestAcc_StreamOnDirectoryTable_Basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_directory_table.test" stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) t.Cleanup(cleanupStage) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + baseModel := func() *model.StreamOnDirectoryTableModel { return model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) } @@ -46,6 +45,8 @@ func TestAcc_StreamOnDirectoryTable_Basic(t *testing.T) { WithCopyGrants(true). WithComment("bar") + resourceId := helpers.EncodeResourceIdentifier(id) + resourceName := modelWithExtraFields.ResourceReference() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -269,15 +270,17 @@ func TestAcc_StreamOnDirectoryTable_Basic(t *testing.T) { func TestAcc_StreamOnDirectoryTable_CopyGrants(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_directory_table.test" - - var createdOn string stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) t.Cleanup(cleanupStage) - model := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamOnDirectoryModelWithCopyGrants := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()).WithCopyGrants(true) + streamOnDirectoryModelWithoutCopyGrants := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()).WithCopyGrants(false) + + var createdOn string + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -286,20 +289,20 @@ func TestAcc_StreamOnDirectoryTable_CopyGrants(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamOnDirectoryModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamOnDirectoryModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamOnDirectoryModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), ), }, { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamOnDirectoryModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamOnDirectoryModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamOnDirectoryModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -308,10 +311,10 @@ func TestAcc_StreamOnDirectoryTable_CopyGrants(t *testing.T) { ), }, { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamOnDirectoryModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamOnDirectoryModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamOnDirectoryModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -326,8 +329,6 @@ func TestAcc_StreamOnDirectoryTable_CopyGrants(t *testing.T) { func TestAcc_StreamOnDirectoryTable_CheckGrantsAfterRecreation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_directory_table.test" stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) t.Cleanup(cleanupStage) @@ -338,6 +339,8 @@ func TestAcc_StreamOnDirectoryTable_CheckGrantsAfterRecreation(t *testing.T) { role, cleanupRole := acc.TestClient().Role.CreateRole(t) t.Cleanup(cleanupRole) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + model1 := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()).WithCopyGrants(true) model1WithoutCopyGrants := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) model2 := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage2.ID().FullyQualifiedName()).WithCopyGrants(true) @@ -351,7 +354,7 @@ func TestAcc_StreamOnDirectoryTable_CheckGrantsAfterRecreation(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(model1.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( // there should be more than one privilege, because we applied grant all privileges and initially there's always one which is ownership resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), @@ -359,14 +362,14 @@ func TestAcc_StreamOnDirectoryTable_CheckGrantsAfterRecreation(t *testing.T) { ), }, { - Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(model2.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.1.privilege", "SELECT"), ), }, { - Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(model1WithoutCopyGrants.ResourceReference(), role.ID()), ExpectNonEmptyPlan: true, ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ @@ -406,22 +409,23 @@ data "snowflake_grants" "grants" { func TestAcc_StreamOnDirectoryTable_RecreateWhenStale(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_directory_table.test" + + stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) + t.Cleanup(cleanupStage) schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, - acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), + acc.TestClient().Ids.RandomDatabaseObjectIdentifier(), &sdk.CreateSchemaOptions{ DataRetentionTimeInDays: sdk.Pointer(0), MaxDataExtensionTimeInDays: sdk.Pointer(0), }, ) t.Cleanup(cleanupSchema) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) - t.Cleanup(cleanupStage) + streamModel := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) - model := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -430,11 +434,11 @@ func TestAcc_StreamOnDirectoryTable_RecreateWhenStale(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnDirectoryTableResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnDirectoryTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), ), }, }, @@ -442,6 +446,9 @@ func TestAcc_StreamOnDirectoryTable_RecreateWhenStale(t *testing.T) { } func TestAcc_StreamOnDirectoryTable_InvalidConfiguration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() modelWithInvalidStageId := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), "invalid") @@ -456,6 +463,7 @@ func TestAcc_StreamOnDirectoryTable_InvalidConfiguration(t *testing.T) { // invalid stage id { Config: config.FromModels(t, modelWithInvalidStageId), + PlanOnly: true, ExpectError: regexp.MustCompile("Error: Invalid identifier type"), }, }, @@ -463,11 +471,15 @@ func TestAcc_StreamOnDirectoryTable_InvalidConfiguration(t *testing.T) { } func TestAcc_StreamOnDirectoryTable_ExternalStreamTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + stage, cleanupStage := acc.TestClient().Stage.CreateStageWithDirectory(t) t.Cleanup(cleanupStage) - model := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModel := model.StreamOnDirectoryTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), stage.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -477,12 +489,12 @@ func TestAcc_StreamOnDirectoryTable_ExternalStreamTypeChange(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnDirectoryTableResource(t, model.ResourceReference()). + resourceassert.StreamOnDirectoryTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeStage)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeStage), ), ), @@ -497,17 +509,17 @@ func TestAcc_StreamOnDirectoryTable_ExternalStreamTypeChange(t *testing.T) { t.Cleanup(cleanup) require.Equal(t, sdk.StreamSourceTypeTable, *externalChangeStream.SourceType) }, - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(model.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnDirectoryTableResource(t, model.ResourceReference()). + resourceassert.StreamOnDirectoryTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeStage)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeStage), ), ), From 85717563687441a41170680bded8f39fea78759e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Wed, 2 Apr 2025 11:36:42 +0200 Subject: [PATCH 11/30] Fix stream on external table resource acceptance test setup --- pkg/acceptance/helpers/stage_client.go | 5 +- pkg/datasources/streams_acceptance_test.go | 6 +- ...tream_on_external_table_acceptance_test.go | 448 +++++++++--------- .../external_tables_integration_test.go | 24 +- pkg/sdk/testint/helpers_test.go | 7 +- .../testint/streams_gen_integration_test.go | 6 +- 6 files changed, 244 insertions(+), 252 deletions(-) diff --git a/pkg/acceptance/helpers/stage_client.go b/pkg/acceptance/helpers/stage_client.go index 9742b0cbc7e..4137b3292d9 100644 --- a/pkg/acceptance/helpers/stage_client.go +++ b/pkg/acceptance/helpers/stage_client.go @@ -31,9 +31,12 @@ func (c *StageClient) client() sdk.Stages { return c.context.client.Stages } -func (c *StageClient) CreateStageWithURL(t *testing.T, id sdk.SchemaObjectIdentifier) (*sdk.Stage, func()) { +func (c *StageClient) CreateStageWithURL(t *testing.T) (*sdk.Stage, func()) { t.Helper() ctx := context.Background() + + id := c.ids.RandomSchemaObjectIdentifier() + err := c.client().CreateOnS3(ctx, sdk.NewCreateOnS3StageRequest(id). WithExternalStageParams(sdk.NewExternalS3StageParamsRequest(nycWeatherDataURL))) require.NoError(t, err) diff --git a/pkg/datasources/streams_acceptance_test.go b/pkg/datasources/streams_acceptance_test.go index ed2cd21b8f8..c42f7c00ea0 100644 --- a/pkg/datasources/streams_acceptance_test.go +++ b/pkg/datasources/streams_acceptance_test.go @@ -185,12 +185,10 @@ func TestAcc_StreamOnExternalTable(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() diff --git a/pkg/resources/stream_on_external_table_acceptance_test.go b/pkg/resources/stream_on_external_table_acceptance_test.go index 979a06f33e4..dc26af169b5 100644 --- a/pkg/resources/stream_on_external_table_acceptance_test.go +++ b/pkg/resources/stream_on_external_table_acceptance_test.go @@ -32,19 +32,14 @@ import ( func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_external_table.test" - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) - var createdOn string + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() baseModel := model.StreamOnExternalTableBase("test", id, externalTable.ID()) @@ -69,6 +64,8 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { "offset": pluginconfig.StringVariable("0"), })) + var createdOn string + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -79,14 +76,14 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { // without optionals { Config: config.FromModels(t, baseModel), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, baseModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasExternalTableString(externalTable.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, baseModel.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -101,22 +98,22 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrWith(baseModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -125,10 +122,10 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { // import without optionals { Config: config.FromModels(t, baseModel), - ResourceName: resourceName, + ResourceName: baseModel.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnExternalTableResource(t, resourceId). + resourceassert.ImportedStreamOnExternalTableResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -141,14 +138,14 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnExternalTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasExternalTableString(externalTable.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -164,21 +161,21 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // external change @@ -190,17 +187,17 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFields.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasExternalTableString(externalTable.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -216,21 +213,21 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // update fields @@ -239,17 +236,17 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFieldsModified), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFieldsModified.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithExtraFieldsModified.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasExternalTableString(externalTable.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFieldsModified.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -265,21 +262,21 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("bar"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "bar")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.comment", "bar")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModified.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // update fields to force recreation @@ -288,17 +285,17 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFieldsModifiedCauseRecreation), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithExtraFieldsModifiedCauseRecreation.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasExternalTableString(externalTable.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFieldsModifiedCauseRecreation.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -314,22 +311,22 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("bar"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "bar")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.comment", "bar")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrWith(modelWithExtraFieldsModifiedCauseRecreation.ResourceReference(), "show_output.0.created_on", func(value string) error { if value == createdOn { return fmt.Errorf("stream was not recreated") } @@ -340,10 +337,10 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { // import { Config: config.FromModels(t, modelWithExtraFieldsModified), - ResourceName: resourceName, + ResourceName: modelWithExtraFieldsModified.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnExternalTableResource(t, resourceId). + resourceassert.ImportedStreamOnExternalTableResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -360,20 +357,24 @@ func TestAcc_StreamOnExternalTable_Basic(t *testing.T) { func TestAcc_StreamOnExternalTable_CopyGrants(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_external_table.test" - var createdOn string - - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) - model := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()).WithInsertOnly(r.BooleanTrue) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModelWithCopyGrants := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()). + WithInsertOnly(r.BooleanTrue). + WithCopyGrants(true) + streamModelWithoutCopyGrants := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()). + WithInsertOnly(r.BooleanTrue). + WithCopyGrants(false) + + var createdOn string + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -382,20 +383,20 @@ func TestAcc_StreamOnExternalTable_CopyGrants(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), ), }, { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -404,10 +405,10 @@ func TestAcc_StreamOnExternalTable_CopyGrants(t *testing.T) { ), }, { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -422,23 +423,21 @@ func TestAcc_StreamOnExternalTable_CopyGrants(t *testing.T) { func TestAcc_StreamOnExternalTable_CheckGrantsAfterRecreation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_external_table.test" - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) - externalTable2, externalTableCleanup2 := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable2, externalTableCleanup2 := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup2) role, cleanupRole := acc.TestClient().Role.CreateRole(t) t.Cleanup(cleanupRole) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + model1 := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()). WithInsertOnly(r.BooleanTrue). WithCopyGrants(true) @@ -457,7 +456,7 @@ func TestAcc_StreamOnExternalTable_CheckGrantsAfterRecreation(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnExternalTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(model1.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( // there should be more than one privilege, because we applied grant all privileges and initially there's always one which is ownership resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), @@ -465,14 +464,14 @@ func TestAcc_StreamOnExternalTable_CheckGrantsAfterRecreation(t *testing.T) { ), }, { - Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(model2.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.1.privilege", "SELECT"), ), }, { - Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(model1WithoutCopyGrants.ResourceReference(), role.ID()), ExpectNonEmptyPlan: true, ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ @@ -490,7 +489,6 @@ func TestAcc_StreamOnExternalTable_CheckGrantsAfterRecreation(t *testing.T) { func TestAcc_StreamOnExternalTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_external_table.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -500,19 +498,19 @@ func TestAcc_StreamOnExternalTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t * }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateInSchemaWithLocation(t, stageLocation, schema.ID()) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateInSchemaWithLocation(t, stage.Location(), schema.ID()) t.Cleanup(externalTableCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()).WithInsertOnly(r.BooleanTrue) + var createdOn string - model := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()).WithInsertOnly(r.BooleanTrue) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -522,19 +520,19 @@ func TestAcc_StreamOnExternalTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t * Steps: []resource.TestStep{ // check that stale state is marked properly and forces an update { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -543,19 +541,19 @@ func TestAcc_StreamOnExternalTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t * // check that the resource was recreated // note that it is stale again because we still have schema parameters set to 0, this results in a permadiff { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value == createdOn { return fmt.Errorf("stream was not recreated") } @@ -570,7 +568,6 @@ func TestAcc_StreamOnExternalTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t * func TestAcc_StreamOnExternalTable_StaleWithExternalChanges(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_external_table.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -580,19 +577,19 @@ func TestAcc_StreamOnExternalTable_StaleWithExternalChanges(t *testing.T) { }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateInSchemaWithLocation(t, stageLocation, schema.ID()) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateInSchemaWithLocation(t, stage.Location(), schema.ID()) t.Cleanup(externalTableCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()).WithInsertOnly(r.BooleanTrue) + var createdOn string - model := model.StreamOnExternalTable("test", id.DatabaseName(), externalTable.ID().FullyQualifiedName(), id.Name(), id.SchemaName()).WithInsertOnly(r.BooleanTrue) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -602,12 +599,12 @@ func TestAcc_StreamOnExternalTable_StaleWithExternalChanges(t *testing.T) { Steps: []resource.TestStep{ // initial creation does not lead to stale stream { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -637,12 +634,12 @@ func TestAcc_StreamOnExternalTable_StaleWithExternalChanges(t *testing.T) { HasStale(false), ) }, - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -658,17 +655,15 @@ func TestAcc_StreamOnExternalTable_StaleWithExternalChanges(t *testing.T) { func TestAcc_StreamOnExternalTable_At(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_external_table.test" - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + commonModel := func() *model.StreamOnExternalTableModel { return model.StreamOnExternalTableBase("test", id, externalTable.ID()). WithComment("foo"). @@ -693,7 +688,7 @@ func TestAcc_StreamOnExternalTable_At(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnExternalTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -701,7 +696,7 @@ func TestAcc_StreamOnExternalTable_At(t *testing.T) { HasExternalTableString(externalTable.ID().FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -717,27 +712,27 @@ func TestAcc_StreamOnExternalTable_At(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnExternalTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, @@ -750,17 +745,15 @@ func TestAcc_StreamOnExternalTable_At(t *testing.T) { func TestAcc_StreamOnExternalTable_Before(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_external_table.test" - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + commonModel := func() *model.StreamOnExternalTableModel { return model.StreamOnExternalTableBase("test", id, externalTable.ID()). WithComment("foo"). @@ -785,7 +778,7 @@ func TestAcc_StreamOnExternalTable_Before(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnExternalTable/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnExternalTableResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -793,7 +786,7 @@ func TestAcc_StreamOnExternalTable_Before(t *testing.T) { HasExternalTableString(externalTable.ID().FullyQualifiedName()). HasInsertOnlyString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -809,27 +802,27 @@ func TestAcc_StreamOnExternalTable_Before(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeExternalTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", externalTable.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeInsertOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnExternalTable/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, @@ -839,6 +832,9 @@ func TestAcc_StreamOnExternalTable_Before(t *testing.T) { } func TestAcc_StreamOnExternalTable_InvalidConfiguration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() modelWithInvalidExternalTableId := model.StreamOnExternalTable("test", id.DatabaseName(), "invalid", id.Name(), id.SchemaName()) @@ -894,16 +890,18 @@ func TestAcc_StreamOnExternalTable_InvalidConfiguration(t *testing.T) { } func TestAcc_StreamOnExternalTable_ExternalStreamTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - stageID := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t, stageID) + + stage, stageCleanup := acc.TestClient().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stageLocation) + externalTable, externalTableCleanup := acc.TestClient().ExternalTable.CreateWithLocation(t, stage.Location()) t.Cleanup(externalTableCleanup) - model := model.StreamOnExternalTableBase("test", id, externalTable.ID()) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModel := model.StreamOnExternalTableBase("test", id, externalTable.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -913,12 +911,12 @@ func TestAcc_StreamOnExternalTable_ExternalStreamTypeChange(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnExternalTableResource(t, model.ResourceReference()). + resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeExternalTable)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeExternalTable), ), ), @@ -933,17 +931,17 @@ func TestAcc_StreamOnExternalTable_ExternalStreamTypeChange(t *testing.T) { t.Cleanup(cleanup) require.Equal(t, sdk.StreamSourceTypeTable, *externalChangeStream.SourceType) }, - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(model.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnExternalTableResource(t, model.ResourceReference()). + resourceassert.StreamOnExternalTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeExternalTable)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeExternalTable), ), ), diff --git a/pkg/sdk/testint/external_tables_integration_test.go b/pkg/sdk/testint/external_tables_integration_test.go index d614aa10d96..2f206f2ef3f 100644 --- a/pkg/sdk/testint/external_tables_integration_test.go +++ b/pkg/sdk/testint/external_tables_integration_test.go @@ -15,9 +15,7 @@ func TestInt_ExternalTables(t *testing.T) { client := testClient(t) ctx := testContext(t) - stageID := testClientHelper().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) tag, tagCleanup := testClientHelper().Tag.CreateTag(t) @@ -41,14 +39,14 @@ func TestInt_ExternalTables(t *testing.T) { minimalCreateExternalTableReq := func(id sdk.SchemaObjectIdentifier) *sdk.CreateExternalTableRequest { return sdk.NewCreateExternalTableRequest( id, - stageLocation, + stage.Location(), ).WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)) } createExternalTableWithManualPartitioningReq := func(id sdk.SchemaObjectIdentifier) *sdk.CreateWithManualPartitioningExternalTableRequest { return sdk.NewCreateWithManualPartitioningExternalTableRequest( id, - stageLocation, + stage.Location(), ). WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)). WithOrReplace(true). @@ -71,7 +69,7 @@ func TestInt_ExternalTables(t *testing.T) { t.Run("Create: with raw file format", func(t *testing.T) { externalTableID := testClientHelper().Ids.RandomSchemaObjectIdentifier() - err := client.ExternalTables.Create(ctx, sdk.NewCreateExternalTableRequest(externalTableID, stageLocation).WithRawFileFormat("TYPE = JSON")) + err := client.ExternalTables.Create(ctx, sdk.NewCreateExternalTableRequest(externalTableID, stage.Location()).WithRawFileFormat("TYPE = JSON")) require.NoError(t, err) externalTable, err := client.ExternalTables.ShowByID(ctx, externalTableID) @@ -86,7 +84,7 @@ func TestInt_ExternalTables(t *testing.T) { ctx, sdk.NewCreateExternalTableRequest( externalTableID, - stageLocation, + stage.Location(), ). WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)). WithOrReplace(true). @@ -114,12 +112,12 @@ func TestInt_ExternalTables(t *testing.T) { require.NoError(t, err) id := testClientHelper().Ids.RandomSchemaObjectIdentifier() - query := fmt.Sprintf(`SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) WITHIN GROUP (ORDER BY order_id) FROM TABLE (INFER_SCHEMA(location => '%s', FILE_FORMAT=>'%s', ignore_case => true))`, stageLocation, fileFormat.ID().FullyQualifiedName()) + query := fmt.Sprintf(`SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) WITHIN GROUP (ORDER BY order_id) FROM TABLE (INFER_SCHEMA(location => '%s', FILE_FORMAT=>'%s', ignore_case => true))`, stage.Location(), fileFormat.ID().FullyQualifiedName()) err = client.ExternalTables.CreateUsingTemplate( ctx, sdk.NewCreateExternalTableUsingTemplateRequest( id, - stageLocation, + stage.Location(), ). WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithName(fileFormat.ID().FullyQualifiedName())). WithQuery(query). @@ -148,7 +146,7 @@ func TestInt_ExternalTables(t *testing.T) { ctx, sdk.NewCreateDeltaLakeExternalTableRequest( externalTableID, - stageLocation, + stage.Location(), ). WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeParquet)). WithOrReplace(true). @@ -362,11 +360,9 @@ func TestInt_ExternalTablesShowByID(t *testing.T) { client := testClient(t) ctx := testContext(t) - stage := testClientHelper().Ids.RandomSchemaObjectIdentifier() - _, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t, stage) + stage, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - stageLocation := fmt.Sprintf("@%s", stage.FullyQualifiedName()) cleanupExternalTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) func() { t.Helper() return func() { @@ -381,7 +377,7 @@ func TestInt_ExternalTablesShowByID(t *testing.T) { createExternalTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) { t.Helper() - request := sdk.NewCreateExternalTableRequest(id, stageLocation).WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)) + request := sdk.NewCreateExternalTableRequest(id, stage.Location()).WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)) err := client.ExternalTables.Create(ctx, request) require.NoError(t, err) t.Cleanup(cleanupExternalTableHandle(t, id)) diff --git a/pkg/sdk/testint/helpers_test.go b/pkg/sdk/testint/helpers_test.go index 5f5443d945c..3aade1d925f 100644 --- a/pkg/sdk/testint/helpers_test.go +++ b/pkg/sdk/testint/helpers_test.go @@ -146,10 +146,9 @@ func createStream(t *testing.T) (*sdk.Stream, func()) { func createExternalTable(t *testing.T) (*sdk.ExternalTable, func()) { t.Helper() - stageID := testClientHelper().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t, stageID) + + stage, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) - return testClientHelper().ExternalTable.CreateWithLocation(t, stageLocation) + return testClientHelper().ExternalTable.CreateWithLocation(t, stage.Location()) } diff --git a/pkg/sdk/testint/streams_gen_integration_test.go b/pkg/sdk/testint/streams_gen_integration_test.go index 2d79d01baf4..0f15caf0ac1 100644 --- a/pkg/sdk/testint/streams_gen_integration_test.go +++ b/pkg/sdk/testint/streams_gen_integration_test.go @@ -108,13 +108,11 @@ func TestInt_Streams(t *testing.T) { }) t.Run("CreateOnExternalTable", func(t *testing.T) { - stageID := testClientHelper().Ids.RandomSchemaObjectIdentifier() - stageLocation := fmt.Sprintf("@%s", stageID.FullyQualifiedName()) - _, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t, stageID) + stage, stageCleanup := testClientHelper().Stage.CreateStageWithURL(t) t.Cleanup(stageCleanup) externalTableId := testClientHelper().Ids.RandomSchemaObjectIdentifier() - externalTableReq := sdk.NewCreateExternalTableRequest(externalTableId, stageLocation).WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)) + externalTableReq := sdk.NewCreateExternalTableRequest(externalTableId, stage.Location()).WithFileFormat(*sdk.NewExternalTableFileFormatRequest().WithFileFormatType(sdk.ExternalTableFileFormatTypeJSON)) _, externalTableCleanup := testClientHelper().ExternalTable.CreateWithRequest(t, externalTableReq) t.Cleanup(externalTableCleanup) From d8c32e753bc89a76643112f837b9ca9ec91e4ef8 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Wed, 2 Apr 2025 11:48:43 +0200 Subject: [PATCH 12/30] Fix stream on table resource acceptance test setup --- .../stream_on_table_acceptance_test.go | 363 +++++++++--------- 1 file changed, 186 insertions(+), 177 deletions(-) diff --git a/pkg/resources/stream_on_table_acceptance_test.go b/pkg/resources/stream_on_table_acceptance_test.go index 1fa974bdfe4..51d085ff945 100644 --- a/pkg/resources/stream_on_table_acceptance_test.go +++ b/pkg/resources/stream_on_table_acceptance_test.go @@ -32,13 +32,12 @@ import ( func TestAcc_StreamOnTable_Basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_table.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + baseModel := model.StreamOnTableBase("test", id, table.ID()) modelWithExtraFields := model.StreamOnTableBase("test", id, table.ID()). @@ -69,14 +68,14 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { // without optionals { Config: config.FromModels(t, baseModel), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, baseModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanDefault). HasTableString(table.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, baseModel.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -91,30 +90,30 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeDefault))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeDefault))), + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // import without optionals { Config: config.FromModels(t, baseModel), - ResourceName: resourceName, + ResourceName: baseModel.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnTableResource(t, resourceId). + resourceassert.ImportedStreamOnTableResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -127,14 +126,14 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanTrue). HasTableString(table.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -150,21 +149,21 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // external change @@ -176,17 +175,17 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFields.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanTrue). HasTableString(table.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -202,21 +201,21 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // update fields that recreate the object @@ -225,17 +224,17 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFieldsDefaultMode), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFieldsDefaultMode.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithExtraFieldsDefaultMode.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanFalse). HasTableString(table.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFieldsDefaultMode.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -251,30 +250,30 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeDefault))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeDefault))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // import { Config: config.FromModels(t, modelWithExtraFieldsDefaultMode), - ResourceName: resourceName, + ResourceName: modelWithExtraFieldsDefaultMode.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnTableResource(t, resourceId). + resourceassert.ImportedStreamOnTableResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -290,14 +289,17 @@ func TestAcc_StreamOnTable_Basic(t *testing.T) { func TestAcc_StreamOnTable_CopyGrants(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + + table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) + t.Cleanup(cleanupTable) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_table.test" + + streamModelWithoutCopyGrants := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()).WithCopyGrants(false) + streamModelWithCopyGrants := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()).WithCopyGrants(true) var createdOn string - table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) - t.Cleanup(cleanupTable) - model := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -306,20 +308,20 @@ func TestAcc_StreamOnTable_CopyGrants(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), ), }, { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -328,10 +330,10 @@ func TestAcc_StreamOnTable_CopyGrants(t *testing.T) { ), }, { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -346,8 +348,6 @@ func TestAcc_StreamOnTable_CopyGrants(t *testing.T) { func TestAcc_StreamOnTable_CheckGrantsAfterRecreation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_table.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) @@ -358,6 +358,8 @@ func TestAcc_StreamOnTable_CheckGrantsAfterRecreation(t *testing.T) { role, cleanupRole := acc.TestClient().Role.CreateRole(t) t.Cleanup(cleanupRole) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + model1 := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()). WithCopyGrants(true) model1WithoutCopyGrants := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) @@ -373,7 +375,7 @@ func TestAcc_StreamOnTable_CheckGrantsAfterRecreation(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnExternalTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(model1.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( // there should be more than one privilege, because we applied grant all privileges and initially there's always one which is ownership resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), @@ -381,14 +383,14 @@ func TestAcc_StreamOnTable_CheckGrantsAfterRecreation(t *testing.T) { ), }, { - Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(model2.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.1.privilege", "SELECT"), ), }, { - Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(model1WithoutCopyGrants.ResourceReference(), role.ID()), ExpectNonEmptyPlan: true, ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ @@ -406,7 +408,6 @@ func TestAcc_StreamOnTable_CheckGrantsAfterRecreation(t *testing.T) { func TestAcc_StreamOnTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_table.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -416,14 +417,16 @@ func TestAcc_StreamOnTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing. }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) table, cleanupTable := acc.TestClient().Table.CreateWithChangeTrackingInSchema(t, schema.ID()) t.Cleanup(cleanupTable) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) + var createdOn string - model := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -433,19 +436,19 @@ func TestAcc_StreamOnTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing. Steps: []resource.TestStep{ // check that stale state is marked properly and forces an update { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -454,19 +457,19 @@ func TestAcc_StreamOnTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing. // check that the resource was recreated // note that it is stale again because we still have schema parameters set to 0 { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value == createdOn { return fmt.Errorf("stream was not recreated") } @@ -481,7 +484,6 @@ func TestAcc_StreamOnTable_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing. func TestAcc_StreamOnTable_StaleWithExternalChanges(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_table.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -491,14 +493,16 @@ func TestAcc_StreamOnTable_StaleWithExternalChanges(t *testing.T) { }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) table, cleanupTable := acc.TestClient().Table.CreateWithChangeTrackingInSchema(t, schema.ID()) t.Cleanup(cleanupTable) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) + var createdOn string - model := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), table.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -508,12 +512,12 @@ func TestAcc_StreamOnTable_StaleWithExternalChanges(t *testing.T) { Steps: []resource.TestStep{ // initial creation does not lead to stale stream { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -544,12 +548,12 @@ func TestAcc_StreamOnTable_StaleWithExternalChanges(t *testing.T) { HasStale(false), ) }, - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -565,16 +569,15 @@ func TestAcc_StreamOnTable_StaleWithExternalChanges(t *testing.T) { func TestAcc_StreamOnTable_At(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_table.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) - acc.TestClient().Table.InsertInt(t, table.ID()) + acc.TestClient().Table.InsertInt(t, table.ID()) lastQueryId := acc.TestClient().Context.LastQueryId(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + commonModel := func() *model.StreamOnTableModel { return model.StreamOnTableBase("test", id, table.ID()). WithComment("foo"). @@ -603,7 +606,7 @@ func TestAcc_StreamOnTable_At(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -612,7 +615,7 @@ func TestAcc_StreamOnTable_At(t *testing.T) { HasAppendOnlyString(r.BooleanTrue). HasShowInitialRowsString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -628,34 +631,34 @@ func TestAcc_StreamOnTable_At(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", "APPEND_ONLY")), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", "APPEND_ONLY")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStatement), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStatement.ResourceReference()). HasNameString(id.Name()), ), }, @@ -663,10 +666,10 @@ func TestAcc_StreamOnTable_At(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - ResourceName: resourceName, + ResourceName: modelWithOffset.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnTableResource(t, resourceId). + resourceassert.ImportedStreamOnTableResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -683,15 +686,15 @@ func TestAcc_StreamOnTable_At(t *testing.T) { func TestAcc_StreamOnTable_Before(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_table.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) - acc.TestClient().Table.InsertInt(t, table.ID()) + acc.TestClient().Table.InsertInt(t, table.ID()) lastQueryId := acc.TestClient().Context.LastQueryId(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + commonModel := func() *model.StreamOnTableModel { return model.StreamOnTableBase("test", id, table.ID()). WithComment("foo"). @@ -720,7 +723,7 @@ func TestAcc_StreamOnTable_Before(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -729,7 +732,7 @@ func TestAcc_StreamOnTable_Before(t *testing.T) { HasAppendOnlyString(r.BooleanTrue). HasShowInitialRowsString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -745,34 +748,34 @@ func TestAcc_StreamOnTable_Before(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", "APPEND_ONLY")), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeTable))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", "APPEND_ONLY")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnTable/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStatement), - Check: assertThat(t, resourceassert.StreamOnTableResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnTableResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, @@ -782,6 +785,9 @@ func TestAcc_StreamOnTable_Before(t *testing.T) { } func TestAcc_StreamOnTable_InvalidConfiguration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() modelWithInvalidTableId := model.StreamOnTable("test", id.DatabaseName(), id.Name(), id.SchemaName(), "invalid") @@ -839,12 +845,15 @@ func TestAcc_StreamOnTable_InvalidConfiguration(t *testing.T) { } func TestAcc_StreamOnTable_ExternalStreamTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) - model := model.StreamOnTableBase("test", id, table.ID()) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModel := model.StreamOnTableBase("test", id, table.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -854,12 +863,12 @@ func TestAcc_StreamOnTable_ExternalStreamTypeChange(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnTableResource(t, model.ResourceReference()). + resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeTable)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeTable), ), ), @@ -875,17 +884,17 @@ func TestAcc_StreamOnTable_ExternalStreamTypeChange(t *testing.T) { t.Cleanup(cleanup) require.Equal(t, sdk.StreamSourceTypeView, *externalChangeStream.SourceType) }, - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(model.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnTableResource(t, model.ResourceReference()). + resourceassert.StreamOnTableResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeTable)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeTable), ), ), From e9fc655b04839834083b53b819356b3da4020103 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Wed, 2 Apr 2025 11:51:59 +0200 Subject: [PATCH 13/30] Fix nit from the previous review --- pkg/resources/user_acceptance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/resources/user_acceptance_test.go b/pkg/resources/user_acceptance_test.go index d153ba9a5d8..6f57af21f7e 100644 --- a/pkg/resources/user_acceptance_test.go +++ b/pkg/resources/user_acceptance_test.go @@ -1666,7 +1666,7 @@ func TestAcc_User_handleChangesToShowUsers_bcr202408_defaults(t *testing.T) { }, }, PreConfig: func() { - func() { acc.UnsetConfigPathEnv(t) }() + acc.UnsetConfigPathEnv(t) }, Config: config.FromModels(t, userModel), Check: assertThat(t, From 1d413cc245022d6fd6a095e9d553bb66311b5a64 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Wed, 2 Apr 2025 12:07:51 +0200 Subject: [PATCH 14/30] Fix stream on view resource acceptance test setup --- .../config/model/stream_on_view_model_ext.go | 9 + .../stream_on_view_acceptance_test.go | 385 +++++++++--------- 2 files changed, 209 insertions(+), 185 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/model/stream_on_view_model_ext.go diff --git a/pkg/acceptance/bettertestspoc/config/model/stream_on_view_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/stream_on_view_model_ext.go new file mode 100644 index 00000000000..3f4e134af8b --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/stream_on_view_model_ext.go @@ -0,0 +1,9 @@ +package model + +import ( + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) + +func StreamOnViewBase(resourceName string, id sdk.SchemaObjectIdentifier, viewId sdk.SchemaObjectIdentifier) *StreamOnViewModel { + return StreamOnView(resourceName, id.DatabaseName(), id.Name(), id.SchemaName(), viewId.FullyQualifiedName()) +} diff --git a/pkg/resources/stream_on_view_acceptance_test.go b/pkg/resources/stream_on_view_acceptance_test.go index 0eeee734f6e..93123988629 100644 --- a/pkg/resources/stream_on_view_acceptance_test.go +++ b/pkg/resources/stream_on_view_acceptance_test.go @@ -32,21 +32,19 @@ import ( func TestAcc_StreamOnView_Basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_view.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) - baseModel := func() *model.StreamOnViewModel { - return model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) - } + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + baseModel := model.StreamOnViewBase("test", id, view.ID()) - modelWithExtraFields := baseModel(). + modelWithExtraFields := model.StreamOnViewBase("test", id, view.ID()). WithCopyGrants(false). WithComment("foo"). WithAppendOnly(r.BooleanTrue). @@ -55,7 +53,7 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { "offset": pluginconfig.StringVariable("0"), })) - modelWithExtraFieldsDefaultMode := baseModel(). + modelWithExtraFieldsDefaultMode := model.StreamOnViewBase("test", id, view.ID()). WithCopyGrants(false). WithComment("foo"). WithAppendOnly(r.BooleanFalse). @@ -73,15 +71,15 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { Steps: []resource.TestStep{ // without optionals { - Config: config.FromModels(t, baseModel()), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, baseModel), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, baseModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanDefault). HasViewString(view.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, baseModel.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -96,30 +94,30 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeDefault))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeDefault))), + assert.Check(resource.TestCheckResourceAttrSet(baseModel.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(baseModel.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // import without optionals { - Config: config.FromModels(t, baseModel()), - ResourceName: resourceName, + Config: config.FromModels(t, baseModel), + ResourceName: baseModel.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnViewResource(t, resourceId). + resourceassert.ImportedStreamOnViewResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -132,14 +130,14 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanTrue). HasViewString(view.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -155,21 +153,21 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // external change @@ -181,17 +179,17 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFields), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFields.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithExtraFields.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanTrue). HasViewString(view.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFields.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -207,21 +205,21 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeAppendOnly))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFields.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // update fields that recreate the object @@ -230,17 +228,17 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithExtraFieldsDefaultMode), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(modelWithExtraFieldsDefaultMode.ResourceReference(), plancheck.ResourceActionUpdate), }, }, - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithExtraFieldsDefaultMode.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasAppendOnlyString(r.BooleanFalse). HasViewString(view.ID().FullyQualifiedName()), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithExtraFieldsDefaultMode.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -256,30 +254,30 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { HasInvalidReason("N/A"). HasComment("foo"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", string(sdk.StreamModeDefault))), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.mode", string(sdk.StreamModeDefault))), + assert.Check(resource.TestCheckResourceAttrSet(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithExtraFieldsDefaultMode.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, // import { Config: config.FromModels(t, modelWithExtraFieldsDefaultMode), - ResourceName: resourceName, + ResourceName: modelWithExtraFieldsDefaultMode.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnViewResource(t, resourceId). + resourceassert.ImportedStreamOnViewResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -295,18 +293,21 @@ func TestAcc_StreamOnView_Basic(t *testing.T) { func TestAcc_StreamOnView_CopyGrants(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_view.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModelWithoutCopyGrants := model.StreamOnViewBase("test", id, view.ID()).WithCopyGrants(false) + streamModelWithCopyGrants := model.StreamOnViewBase("test", id, view.ID()).WithCopyGrants(true) + var createdOn string - model := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -315,20 +316,20 @@ func TestAcc_StreamOnView_CopyGrants(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnView), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, streamModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), ), }, { - Config: config.FromModels(t, model.WithCopyGrants(true)), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, streamModelWithCopyGrants), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModelWithCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("view was recreated") } @@ -337,10 +338,10 @@ func TestAcc_StreamOnView_CopyGrants(t *testing.T) { ), }, { - Config: config.FromModels(t, model.WithCopyGrants(false)), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, streamModelWithoutCopyGrants), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModelWithoutCopyGrants.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttrWith(streamModelWithoutCopyGrants.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("view was recreated") } @@ -355,8 +356,6 @@ func TestAcc_StreamOnView_CopyGrants(t *testing.T) { func TestAcc_StreamOnView_CheckGrantsAfterRecreation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_view.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) @@ -364,12 +363,15 @@ func TestAcc_StreamOnView_CheckGrantsAfterRecreation(t *testing.T) { statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) + view2, cleanupView2 := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView2) role, cleanupRole := acc.TestClient().Role.CreateRole(t) t.Cleanup(cleanupRole) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + model1 := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()). WithCopyGrants(true) model1WithoutCopyGrants := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) @@ -385,7 +387,7 @@ func TestAcc_StreamOnView_CheckGrantsAfterRecreation(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnExternalTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1) + grantStreamPrivilegesConfig(model1.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( // there should be more than one privilege, because we applied grant all privileges and initially there's always one which is ownership resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), @@ -393,14 +395,14 @@ func TestAcc_StreamOnView_CheckGrantsAfterRecreation(t *testing.T) { ), }, { - Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model2) + grantStreamPrivilegesConfig(model2.ResourceReference(), role.ID()), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.#", "2"), resource.TestCheckResourceAttr("data.snowflake_grants.grants", "grants.1.privilege", "SELECT"), ), }, { - Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(resourceName, role.ID()), + Config: config.FromModels(t, model1WithoutCopyGrants) + grantStreamPrivilegesConfig(model1WithoutCopyGrants.ResourceReference(), role.ID()), ExpectNonEmptyPlan: true, ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ @@ -418,7 +420,6 @@ func TestAcc_StreamOnView_CheckGrantsAfterRecreation(t *testing.T) { func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_view.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -428,7 +429,6 @@ func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) table, cleanupTable := acc.TestClient().Table.CreateWithChangeTrackingInSchema(t, schema.ID()) t.Cleanup(cleanupTable) @@ -437,9 +437,12 @@ func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnViewBase("test", id, view.ID()) + var createdOn string - model := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -449,19 +452,19 @@ func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T Steps: []resource.TestStep{ // check that stale state is marked properly and forces an update { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -470,19 +473,19 @@ func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T // check that the resource was recreated // note that it is stale again because we still have schema parameters set to 0 { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), - planchecks.ExpectChange(resourceName, "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(streamModel.ResourceReference(), "stale", tfjson.ActionUpdate, sdk.String(r.BooleanTrue), sdk.String(r.BooleanFalse)), }, }, ExpectNonEmptyPlan: true, - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanTrue), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "true")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "true")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value == createdOn { return fmt.Errorf("stream was not recreated") } @@ -497,7 +500,6 @@ func TestAcc_StreamOnView_PermadiffWhenIsStaleAndHasNoRetentionTime(t *testing.T func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - resourceName := "snowflake_stream_on_view.test" schema, cleanupSchema := acc.TestClient().Schema.CreateSchemaWithOpts(t, acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(acc.TestClient().Ids.DatabaseId()), @@ -507,7 +509,6 @@ func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { }, ) t.Cleanup(cleanupSchema) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) table, cleanupTable := acc.TestClient().Table.CreateWithChangeTrackingInSchema(t, schema.ID()) t.Cleanup(cleanupTable) @@ -516,9 +517,12 @@ func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { view, cleanupView := acc.TestClient().View.CreateViewInSchema(t, statement, schema.ID()) t.Cleanup(cleanupView) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + streamModel := model.StreamOnViewBase("test", id, view.ID()) + var createdOn string - model := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -528,12 +532,12 @@ func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { Steps: []resource.TestStep{ // initial creation does not lead to stale stream { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { createdOn = value return nil })), @@ -564,12 +568,12 @@ func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { HasStale(false), ) }, - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Config: config.FromModels(t, streamModel), + Check: assertThat(t, resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasNameString(id.Name()). HasStaleString(r.BooleanFalse), - assert.Check(resource.TestCheckResourceAttr(resourceName, "show_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttrWith(resourceName, "show_output.0.created_on", func(value string) error { + assert.Check(resource.TestCheckResourceAttr(streamModel.ResourceReference(), "show_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttrWith(streamModel.ResourceReference(), "show_output.0.created_on", func(value string) error { if value != createdOn { return fmt.Errorf("stream was recreated") } @@ -585,12 +589,10 @@ func TestAcc_StreamOnView_StaleWithExternalChanges(t *testing.T) { func TestAcc_StreamOnView_At(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) - resourceName := "snowflake_stream_on_view.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) @@ -598,8 +600,10 @@ func TestAcc_StreamOnView_At(t *testing.T) { acc.TestClient().Table.InsertInt(t, table.ID()) lastQueryId := acc.TestClient().Context.LastQueryId(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + baseModel := func() *model.StreamOnViewModel { - return model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()). + return model.StreamOnViewBase("test", id, view.ID()). WithComment("foo"). WithAppendOnly(r.BooleanTrue). WithShowInitialRows(r.BooleanTrue). @@ -626,7 +630,7 @@ func TestAcc_StreamOnView_At(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -635,7 +639,7 @@ func TestAcc_StreamOnView_At(t *testing.T) { HasAppendOnlyString(r.BooleanTrue). HasShowInitialRowsString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -651,34 +655,34 @@ func TestAcc_StreamOnView_At(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", "APPEND_ONLY")), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", "APPEND_ONLY")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStatement), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithStatement.ResourceReference()). HasNameString(id.Name()), ), }, @@ -686,10 +690,10 @@ func TestAcc_StreamOnView_At(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/at"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - ResourceName: resourceName, + ResourceName: modelWithOffset.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - resourceassert.ImportedStreamOnViewResource(t, resourceId). + resourceassert.ImportedStreamOnViewResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -706,11 +710,10 @@ func TestAcc_StreamOnView_At(t *testing.T) { func TestAcc_StreamOnView_Before(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_stream_on_view.test" table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) @@ -718,6 +721,8 @@ func TestAcc_StreamOnView_Before(t *testing.T) { acc.TestClient().Table.InsertInt(t, table.ID()) lastQueryId := acc.TestClient().Context.LastQueryId(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + baseModel := func() *model.StreamOnViewModel { return model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()). WithComment("foo"). @@ -746,7 +751,7 @@ func TestAcc_StreamOnView_Before(t *testing.T) { { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithOffset), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithOffset.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). @@ -755,7 +760,7 @@ func TestAcc_StreamOnView_Before(t *testing.T) { HasAppendOnlyString(r.BooleanTrue). HasShowInitialRowsString(r.BooleanTrue). HasCommentString("foo"), - resourceshowoutputassert.StreamShowOutput(t, resourceName). + resourceshowoutputassert.StreamShowOutput(t, modelWithOffset.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -771,34 +776,34 @@ func TestAcc_StreamOnView_Before(t *testing.T) { HasStaleAfterNotEmpty(). HasInvalidReason("N/A"). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.comment", "foo")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.table_name", view.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.#", "1")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.type", "DELTA")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.stale", "false")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.mode", "APPEND_ONLY")), - assert.Check(resource.TestCheckResourceAttrSet(resourceName, "describe_output.0.stale_after")), - assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.owner_role_type", "ROLE")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner", snowflakeroles.Accountadmin.Name())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.comment", "foo")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.table_name", view.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.source_type", string(sdk.StreamSourceTypeView))), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.#", "1")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.base_tables.0", table.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.type", "DELTA")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.stale", "false")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.mode", "APPEND_ONLY")), + assert.Check(resource.TestCheckResourceAttrSet(modelWithOffset.ResourceReference(), "describe_output.0.stale_after")), + assert.Check(resource.TestCheckResourceAttr(modelWithOffset.ResourceReference(), "describe_output.0.owner_role_type", "ROLE")), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStream), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithStream.ResourceReference()). HasNameString(id.Name()), ), }, { ConfigDirectory: acc.ConfigurationDirectory("TestAcc_StreamOnView/before"), ConfigVariables: tfconfig.ConfigVariablesFromModel(t, modelWithStatement), - Check: assertThat(t, resourceassert.StreamOnViewResource(t, resourceName). + Check: assertThat(t, resourceassert.StreamOnViewResource(t, modelWithStatement.ResourceReference()). HasNameString(id.Name()), ), }, @@ -808,6 +813,9 @@ func TestAcc_StreamOnView_Before(t *testing.T) { } func TestAcc_StreamOnView_InvalidConfiguration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() modelWithInvalidTableId := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), "invalid") @@ -865,15 +873,19 @@ func TestAcc_StreamOnView_InvalidConfiguration(t *testing.T) { } func TestAcc_StreamOnView_ExternalStreamTypeChange(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) t.Cleanup(cleanupTable) + statement := fmt.Sprintf("SELECT * FROM %s", table.ID().FullyQualifiedName()) view, cleanupView := acc.TestClient().View.CreateView(t, statement) t.Cleanup(cleanupView) - model := model.StreamOnView("test", id.DatabaseName(), id.Name(), id.SchemaName(), view.ID().FullyQualifiedName()) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamModel := model.StreamOnViewBase("test", id, view.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -883,12 +895,12 @@ func TestAcc_StreamOnView_ExternalStreamTypeChange(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.StreamOnDirectoryTable), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnViewResource(t, model.ResourceReference()). + resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeView)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeView), ), ), @@ -896,24 +908,27 @@ func TestAcc_StreamOnView_ExternalStreamTypeChange(t *testing.T) { // external change with a different type { PreConfig: func() { - table, cleanupTable := acc.TestClient().Table.CreateWithChangeTracking(t) - t.Cleanup(cleanupTable) + table2, cleanupTable2 := acc.TestClient().Table.CreateWithChangeTracking(t) + t.Cleanup(cleanupTable2) + acc.TestClient().Stream.DropFunc(t, id)() - externalChangeStream, cleanup := acc.TestClient().Stream.CreateOnTableWithRequest(t, sdk.NewCreateOnTableStreamRequest(id, table.ID())) + + externalChangeStream, cleanup := acc.TestClient().Stream.CreateOnTableWithRequest(t, sdk.NewCreateOnTableStreamRequest(id, table2.ID())) t.Cleanup(cleanup) + require.Equal(t, sdk.StreamSourceTypeTable, *externalChangeStream.SourceType) }, - Config: config.FromModels(t, model), + Config: config.FromModels(t, streamModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(model.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(streamModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeTestCheckFunc( assertThat(t, - resourceassert.StreamOnViewResource(t, model.ResourceReference()). + resourceassert.StreamOnViewResource(t, streamModel.ResourceReference()). HasStreamTypeString(string(sdk.StreamSourceTypeView)), - resourceshowoutputassert.StreamShowOutput(t, model.ResourceReference()). + resourceshowoutputassert.StreamShowOutput(t, streamModel.ResourceReference()). HasSourceType(sdk.StreamSourceTypeView), ), ), From da06d1e05a2ad5f84d6ee9fe4b21842c4ac22732 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Wed, 2 Apr 2025 18:14:40 +0200 Subject: [PATCH 15/30] Fix streamlit resource acceptance test setup --- pkg/resources/streamlit_acceptance_test.go | 527 ++++++++---------- .../testdata/TestAcc_Streamlit/basic/test.tf | 7 - .../TestAcc_Streamlit/basic/variables.tf | 16 - .../basicWithComment/test.tf | 8 - .../basicWithComment/variables.tf | 19 - .../TestAcc_Streamlit/complete/test.tf | 12 - .../TestAcc_Streamlit/complete/variables.tf | 30 - 7 files changed, 242 insertions(+), 377 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/complete/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Streamlit/complete/variables.tf diff --git a/pkg/resources/streamlit_acceptance_test.go b/pkg/resources/streamlit_acceptance_test.go index 415bd2a22a8..ffe3db6be26 100644 --- a/pkg/resources/streamlit_acceptance_test.go +++ b/pkg/resources/streamlit_acceptance_test.go @@ -3,20 +3,20 @@ package resources_test import ( "fmt" "regexp" - "strconv" "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/helpers" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + 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/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/helpers" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" - - tfjson "github.com/hashicorp/terraform-json" - "github.com/hashicorp/terraform-plugin-testing/config" + "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" @@ -26,41 +26,34 @@ func TestAcc_Streamlit_basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - databaseId := acc.TestClient().Ids.DatabaseId() - schemaId := acc.TestClient().Ids.SchemaId() - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stage, stageCleanup := acc.TestClient().Stage.CreateStage(t) t.Cleanup(stageCleanup) + // warehouse is needed because default warehouse uses lowercase, and it fails in snowflake. // TODO(SNOW-1541938): use a default warehouse after fix on snowflake side warehouse, warehouseCleanup := acc.TestClient().Warehouse.CreateWarehouse(t) t.Cleanup(warehouseCleanup) + networkRule, networkRuleCleanup := acc.TestClient().NetworkRule.Create(t) t.Cleanup(networkRuleCleanup) + externalAccessIntegrationId, externalAccessIntegrationCleanup := acc.TestClient().ExternalAccessIntegration.CreateExternalAccessIntegration(t, networkRule.ID()) t.Cleanup(externalAccessIntegrationCleanup) - rootLocation := fmt.Sprintf("@%s", stage.ID().FullyQualifiedName()) - rootLocationWithCatalog := fmt.Sprintf("%s/foo", rootLocation) - - m := func(complete bool) map[string]config.Variable { - c := map[string]config.Variable{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "stage": config.StringVariable(stage.ID().FullyQualifiedName()), - "name": config.StringVariable(id.Name()), - "main_file": config.StringVariable("foo"), - } - if complete { - c["directory_location"] = config.StringVariable("foo") - c["query_warehouse"] = config.StringVariable(warehouse.ID().Name()) - c["external_access_integrations"] = config.SetVariable(config.StringVariable(externalAccessIntegrationId.Name())) - c["title"] = config.StringVariable("foo") - c["comment"] = config.StringVariable("foo") - } - return c - } + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + directoryLocation := "abc" + rootLocationWithCatalog := fmt.Sprintf("%s/%s", stage.Location(), directoryLocation) + comment := random.Comment() + mainFile := "foo" + title := "foo" + + streamlitModelBasic := model.StreamlitWithIds("test", id, mainFile, stage.ID()) + streamlitModelComplete := model.StreamlitWithIds("test", id, mainFile, stage.ID()). + WithComment(comment). + WithTitle(title). + WithDirectoryLocation(directoryLocation). + WithQueryWarehouse(warehouse.ID().Name()). + WithExternalAccessIntegrations(externalAccessIntegrationId) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -72,180 +65,174 @@ func TestAcc_Streamlit_basic(t *testing.T) { Steps: []resource.TestStep{ // create with empty optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basic"), - ConfigVariables: m(false), + Config: accconfig.FromModels(t, streamlitModelBasic), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "stage", stage.ID().FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "main_file", "foo"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.#", "1"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.created_on"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.schema_name", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.title", ""), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", ""), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.query_warehouse", ""), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.url_id"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner_role_type", "ROLE"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.title", ""), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.root_location", rootLocation), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.main_file", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.query_warehouse", ""), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.url_id"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.default_packages"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.user_packages.#"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.import_urls.#"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.external_access_integrations.#", "0"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.external_access_secrets"), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "stage", stage.ID().FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "main_file", "foo"), + + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "show_output.0.created_on"), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.title", ""), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.comment", ""), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.query_warehouse", ""), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "show_output.0.url_id"), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "show_output.0.owner_role_type", "ROLE"), + + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.title", ""), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.root_location", stage.Location()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.main_file", "foo"), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.query_warehouse", ""), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "describe_output.0.url_id"), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "describe_output.0.default_packages"), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "describe_output.0.user_packages.#"), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "describe_output.0.import_urls.#"), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "describe_output.0.external_access_integrations.#", "0"), + resource.TestCheckResourceAttrSet(streamlitModelBasic.ResourceReference(), "describe_output.0.external_access_secrets"), ), }, // import - without optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basic"), - ConfigVariables: m(false), - ResourceName: "snowflake_streamlit.test", - ImportState: true, + Config: accconfig.FromModels(t, streamlitModelBasic), + ResourceName: streamlitModelBasic.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), "schema", schemaId.Name()), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "database", id.DatabaseName()), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "schema", id.SchemaName()), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "stage", stage.ID().FullyQualifiedName()), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "main_file", "foo"), ), }, // set optionals { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/complete"), - ConfigVariables: m(true), + Config: accconfig.FromModels(t, streamlitModelComplete), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "main_file", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.#", "1"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.0", externalAccessIntegrationId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.#", "1"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.created_on"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.schema_name", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.url_id"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner_role_type", "ROLE"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.root_location", rootLocationWithCatalog), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.main_file", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.url_id"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.default_packages"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.user_packages.#"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.import_urls.#"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.external_access_integrations.#", "1"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.external_access_integrations.0", externalAccessIntegrationId.Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.external_access_secrets")), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "main_file", "foo"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "external_access_integrations.#", "1"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "external_access_integrations.0", externalAccessIntegrationId.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "show_output.0.created_on"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "show_output.0.url_id"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.owner_role_type", "ROLE"), + + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.root_location", rootLocationWithCatalog), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.main_file", "foo"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.url_id"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.default_packages"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.user_packages.#"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.import_urls.#"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_integrations.#", "1"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_integrations.0", externalAccessIntegrationId.Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_secrets")), }, // import - complete { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/complete"), - ConfigVariables: m(true), - ResourceName: "snowflake_streamlit.test", - ImportState: true, + Config: accconfig.FromModels(t, streamlitModelComplete), + ResourceName: streamlitModelComplete.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), "schema", schemaId.Name()), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "database", id.DatabaseName()), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "schema", id.SchemaName()), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "stage", stage.ID().FullyQualifiedName()), - importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "directory_location", "foo"), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "directory_location", directoryLocation), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "main_file", "foo"), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "query_warehouse", warehouse.ID().Name()), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "external_access_integrations.#", "1"), importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "external_access_integrations.0", externalAccessIntegrationId.Name()), - importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "title", "foo"), - importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "comment", "foo")), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "title", title), + importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "comment", comment)), }, // change externally { PreConfig: func() { acc.TestClient().Streamlit.Update(t, sdk.NewAlterStreamlitRequest(id).WithSet( *sdk.NewStreamlitSetRequest(). - WithRootLocation(fmt.Sprintf("@%s/bar", stage.ID().FullyQualifiedName())). + WithRootLocation(fmt.Sprintf("%s/bar", stage.Location())). WithComment("bar"), )) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/complete"), - ConfigVariables: m(true), + Config: accconfig.FromModels(t, streamlitModelComplete), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_streamlit.test", plancheck.ResourceActionUpdate), - planchecks.ExpectDrift("snowflake_streamlit.test", "directory_location", sdk.String("foo"), sdk.String("bar")), - planchecks.ExpectChange("snowflake_streamlit.test", "directory_location", tfjson.ActionUpdate, sdk.String("bar"), sdk.String("foo")), - planchecks.ExpectDrift("snowflake_streamlit.test", "comment", sdk.String("foo"), sdk.String("bar")), - planchecks.ExpectChange("snowflake_streamlit.test", "comment", tfjson.ActionUpdate, sdk.String("bar"), sdk.String("foo")), + plancheck.ExpectResourceAction(streamlitModelComplete.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectDrift(streamlitModelComplete.ResourceReference(), "directory_location", sdk.String(directoryLocation), sdk.String("bar")), + planchecks.ExpectChange(streamlitModelComplete.ResourceReference(), "directory_location", tfjson.ActionUpdate, sdk.String("bar"), sdk.String(directoryLocation)), + planchecks.ExpectDrift(streamlitModelComplete.ResourceReference(), "comment", sdk.String(comment), sdk.String("bar")), + planchecks.ExpectChange(streamlitModelComplete.ResourceReference(), "comment", tfjson.ActionUpdate, sdk.String("bar"), sdk.String(comment)), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "main_file", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.#", "1"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.0", externalAccessIntegrationId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "comment", "foo"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.#", "1"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.created_on"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.schema_name", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.url_id"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner_role_type", "ROLE"), - - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.root_location", rootLocationWithCatalog), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.main_file", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.query_warehouse", warehouse.ID().Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.url_id"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.default_packages"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.user_packages.#"), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.import_urls.#"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.external_access_integrations.#", "1"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.external_access_integrations.0", externalAccessIntegrationId.Name()), - resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.external_access_secrets")), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "main_file", "foo"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "external_access_integrations.#", "1"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "external_access_integrations.0", externalAccessIntegrationId.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "comment", comment), + + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "show_output.0.created_on"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.schema_name", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "show_output.0.url_id"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "show_output.0.owner_role_type", "ROLE"), + + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.title", title), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.root_location", rootLocationWithCatalog), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.main_file", "foo"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.query_warehouse", warehouse.ID().Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.url_id"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.default_packages"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.user_packages.#"), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.import_urls.#"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_integrations.#", "1"), + resource.TestCheckResourceAttr(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_integrations.0", externalAccessIntegrationId.Name()), + resource.TestCheckResourceAttrSet(streamlitModelComplete.ResourceReference(), "describe_output.0.external_access_secrets")), }, // unset { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basic"), - ConfigVariables: m(false), + Config: accconfig.FromModels(t, streamlitModelBasic), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", schemaId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "stage", stage.ID().FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "directory_location", ""), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "main_file", "foo")), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "database", id.DatabaseName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "stage", stage.ID().FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "directory_location", ""), + resource.TestCheckResourceAttr(streamlitModelBasic.ResourceReference(), "main_file", "foo")), }, }, }) @@ -255,37 +242,34 @@ func TestAcc_Streamlit_complete(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - databaseId := acc.TestClient().Ids.DatabaseId() - schemaId := acc.TestClient().Ids.SchemaId() - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - stage, stageCleanup := acc.TestClient().Stage.CreateStage(t) t.Cleanup(stageCleanup) + // warehouse is needed because default warehouse uses lowercase, and it fails in snowflake. // TODO(SNOW-1541938): use a default warehouse after fix on snowflake side warehouse, warehouseCleanup := acc.TestClient().Warehouse.CreateWarehouse(t) t.Cleanup(warehouseCleanup) + networkRule, networkRuleCleanup := acc.TestClient().NetworkRule.Create(t) t.Cleanup(networkRuleCleanup) + externalAccessIntegrationId, externalAccessIntegrationCleanup := acc.TestClient().ExternalAccessIntegration.CreateExternalAccessIntegration(t, networkRule.ID()) t.Cleanup(externalAccessIntegrationCleanup) - rootLocation := fmt.Sprintf("@%s/foo", stage.ID().FullyQualifiedName()) - - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "stage": config.StringVariable(stage.ID().FullyQualifiedName()), - "directory_location": config.StringVariable("foo"), - "name": config.StringVariable(id.Name()), - "main_file": config.StringVariable("foo"), - "query_warehouse": config.StringVariable(warehouse.ID().Name()), - "external_access_integrations": config.SetVariable(config.StringVariable(externalAccessIntegrationId.Name())), - "title": config.StringVariable("foo"), - "comment": config.StringVariable("foo"), - } - } + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + directoryLocation := "abc" + rootLocationWithCatalog := fmt.Sprintf("%s/%s", stage.Location(), directoryLocation) + comment := random.Comment() + mainFile := "foo" + title := "foo" + + streamlitModelComplete := model.StreamlitWithIds("test", id, mainFile, stage.ID()). + WithComment(comment). + WithTitle(title). + WithDirectoryLocation(directoryLocation). + WithQueryWarehouse(warehouse.ID().Name()). + WithExternalAccessIntegrations(externalAccessIntegrationId) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -295,37 +279,36 @@ func TestAcc_Streamlit_complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Streamlit), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/complete"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, streamlitModelComplete), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", schemaId.Name()), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", id.DatabaseName()), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", id.SchemaName()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "stage", stage.ID().FullyQualifiedName()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "directory_location", "foo"), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "directory_location", directoryLocation), resource.TestCheckResourceAttr("snowflake_streamlit.test", "main_file", "foo"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "query_warehouse", warehouse.ID().Name()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.#", "1"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "external_access_integrations.0", externalAccessIntegrationId.Name()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "comment", "foo"), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "comment", comment), resource.TestCheckResourceAttr("snowflake_streamlit.test", "fully_qualified_name", id.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.#", "1"), resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.created_on"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.schema_name", schemaId.Name()), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.schema_name", id.SchemaName()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.title", "foo"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner", acc.TestClient().Context.CurrentRole(t).Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", "foo"), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", comment), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.query_warehouse", warehouse.ID().Name()), resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "show_output.0.url_id"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.owner_role_type", "ROLE"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.name", id.Name()), resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.title", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.root_location", rootLocation), + resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.root_location", rootLocationWithCatalog), resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.main_file", "foo"), resource.TestCheckResourceAttr("snowflake_streamlit.test", "describe_output.0.query_warehouse", warehouse.ID().Name()), resource.TestCheckResourceAttrSet("snowflake_streamlit.test", "describe_output.0.url_id"), @@ -338,8 +321,7 @@ func TestAcc_Streamlit_complete(t *testing.T) { ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/complete"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, streamlitModelComplete), ResourceName: "snowflake_streamlit.test", ImportState: true, ImportStateVerify: true, @@ -349,23 +331,24 @@ func TestAcc_Streamlit_complete(t *testing.T) { } func TestAcc_Streamlit_Rename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - databaseId := acc.TestClient().Ids.DatabaseId() - schemaId := acc.TestClient().Ids.SchemaId() - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + stage, stageCleanup := acc.TestClient().Stage.CreateStage(t) t.Cleanup(stageCleanup) - m := func(name, comment string) map[string]config.Variable { - return map[string]config.Variable{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "stage": config.StringVariable(stage.ID().FullyQualifiedName()), - "name": config.StringVariable(name), - "main_file": config.StringVariable("foo"), - "comment": config.StringVariable(comment), - } - } + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + comment := random.Comment() + newComment := random.Comment() + mainFile := "foo" + + streamlitModel := model.StreamlitWithIds("test", id, mainFile, stage.ID()). + WithComment(comment) + streamlitModelRenamedAndUpdated := model.StreamlitWithIds("test", newId, mainFile, stage.ID()). + WithComment(newComment) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -374,28 +357,26 @@ func TestAcc_Streamlit_Rename(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.NetworkPolicy), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basicWithComment"), - ConfigVariables: m(id.Name(), "foo"), + Config: accconfig.FromModels(t, streamlitModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "show_output.0.comment", comment), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "fully_qualified_name", id.FullyQualifiedName()), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basicWithComment"), - ConfigVariables: m(newId.Name(), "bar"), + Config: accconfig.FromModels(t, streamlitModelRenamedAndUpdated), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_streamlit.test", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(streamlitModelRenamedAndUpdated.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.name", newId.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "show_output.0.comment", "bar"), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "fully_qualified_name", newId.FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModelRenamedAndUpdated.ResourceReference(), "name", newId.Name()), + resource.TestCheckResourceAttr(streamlitModelRenamedAndUpdated.ResourceReference(), "show_output.0.name", newId.Name()), + resource.TestCheckResourceAttr(streamlitModelRenamedAndUpdated.ResourceReference(), "show_output.0.comment", newComment), + resource.TestCheckResourceAttr(streamlitModelRenamedAndUpdated.ResourceReference(), "fully_qualified_name", newId.FullyQualifiedName()), ), }, }, @@ -403,21 +384,13 @@ func TestAcc_Streamlit_Rename(t *testing.T) { } func TestAcc_Streamlit_InvalidStage(t *testing.T) { - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - - schemaId := acc.TestClient().Ids.SchemaId() - databaseId := acc.TestClient().Ids.DatabaseId() - - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "schema": config.StringVariable(schemaId.FullyQualifiedName()), - "database": config.StringVariable(databaseId.FullyQualifiedName()), - "name": config.StringVariable(id.Name()), - "stage": config.StringVariable("foo"), - "main_file": config.StringVariable("foo"), - "query_warehouse": config.StringVariable("foo"), - } - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamlitModel := model.Streamlit("test", id.DatabaseId().FullyQualifiedName(), "some", id.Name(), id.SchemaId().FullyQualifiedName(), "some") + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { @@ -427,20 +400,25 @@ func TestAcc_Streamlit_InvalidStage(t *testing.T) { }, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Streamlit/basic"), - ConfigVariables: m(), - ExpectError: regexp.MustCompile(`Invalid identifier type`), + Config: accconfig.FromModels(t, streamlitModel), + PlanOnly: true, + ExpectError: regexp.MustCompile(`Invalid identifier type`), }, }, }) } func TestAcc_Streamlit_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) stage, stageCleanup := acc.TestClient().Stage.CreateStage(t) t.Cleanup(stageCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + streamlitModel := model.StreamlitWithIds("test", id, "main_file", stage.ID()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -456,45 +434,37 @@ func TestAcc_Streamlit_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t * Source: "Snowflake-Labs/snowflake", }, }, - Config: streamlitBasicConfig(id, stage.ID(), "main_file"), + Config: accconfig.FromModels(t, streamlitModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "id", helpers.EncodeSnowflakeID(id)), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(id)), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: streamlitBasicConfig(id, stage.ID(), "main_file"), + Config: accconfig.FromModels(t, streamlitModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "id", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "id", id.FullyQualifiedName()), ), }, }, }) } -func streamlitBasicConfig(id sdk.SchemaObjectIdentifier, stageId sdk.SchemaObjectIdentifier, mainFile string) string { - return fmt.Sprintf(` -resource "snowflake_streamlit" "test" { - database = "%s" - schema = "%s" - name = "%s" - stage = %s - main_file = "%s" -} -`, id.DatabaseName(), id.SchemaName(), id.Name(), strconv.Quote(stageId.FullyQualifiedName()), mainFile) -} - func TestAcc_Streamlit_IdentifierQuotingDiffSuppression(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - quotedDatabaseName := fmt.Sprintf(`\"%s\"`, id.DatabaseName()) - quotedSchemaName := fmt.Sprintf(`\"%s\"`, id.SchemaName()) - quotedName := fmt.Sprintf(`\"%s\"`, id.Name()) stage, stageCleanup := acc.TestClient().Stage.CreateStage(t) t.Cleanup(stageCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + quotedDatabaseName := fmt.Sprintf(`"%s"`, id.DatabaseName()) + quotedSchemaName := fmt.Sprintf(`"%s"`, id.SchemaName()) + quotedName := fmt.Sprintf(`"%s"`, id.Name()) + + streamlitModel := model.Streamlit("test", quotedDatabaseName, "main_file", quotedName, quotedSchemaName, stage.ID().FullyQualifiedName()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -511,46 +481,33 @@ func TestAcc_Streamlit_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: streamlitBasicConfigWithRawIdentifierValues(quotedDatabaseName, quotedSchemaName, quotedName, stage.ID().Name(), "main_file"), + Config: accconfig.FromModels(t, streamlitModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", fmt.Sprintf("\"%s\"", id.DatabaseName())), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", id.SchemaName()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "id", helpers.EncodeSnowflakeID(id)), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "database", fmt.Sprintf("\"%s\"", id.DatabaseName())), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(id)), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: streamlitBasicConfigWithRawIdentifierValues(quotedDatabaseName, quotedSchemaName, quotedName, stage.ID().Name(), "main_file"), + Config: accconfig.FromModels(t, streamlitModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_streamlit.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(streamlitModel.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_streamlit.test", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(streamlitModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_streamlit.test", "database", fmt.Sprintf("\"%s\"", id.DatabaseName())), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "schema", id.SchemaName()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_streamlit.test", "id", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "database", fmt.Sprintf("\"%s\"", id.DatabaseName())), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "schema", id.SchemaName()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(streamlitModel.ResourceReference(), "id", id.FullyQualifiedName()), ), }, }, }) } - -func streamlitBasicConfigWithRawIdentifierValues(databaseName, schemaName, name, stageName, mainFile string) string { - stageId := fmt.Sprintf("%s.%s.%s", databaseName, schemaName, stageName) - return fmt.Sprintf(` -resource "snowflake_streamlit" "test" { - database = "%s" - schema = "%s" - name = "%s" - stage = "%s" - main_file = "%s" -} -`, databaseName, schemaName, name, stageId, mainFile) -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/basic/test.tf b/pkg/resources/testdata/TestAcc_Streamlit/basic/test.tf deleted file mode 100644 index bcd2f2c26d7..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/basic/test.tf +++ /dev/null @@ -1,7 +0,0 @@ -resource "snowflake_streamlit" "test" { - database = var.database - schema = var.schema - stage = var.stage - name = var.name - main_file = var.main_file -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/basic/variables.tf b/pkg/resources/testdata/TestAcc_Streamlit/basic/variables.tf deleted file mode 100644 index cb9c2220cda..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/basic/variables.tf +++ /dev/null @@ -1,16 +0,0 @@ - -variable "database" { - type = string -} -variable "schema" { - type = string -} -variable "stage" { - type = string -} -variable "name" { - type = string -} -variable "main_file" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/test.tf b/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/test.tf deleted file mode 100644 index 4256831bc2b..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/test.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "snowflake_streamlit" "test" { - database = var.database - schema = var.schema - stage = var.stage - name = var.name - main_file = var.main_file - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/variables.tf b/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/variables.tf deleted file mode 100644 index 603f6b6535a..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/basicWithComment/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ - -variable "database" { - type = string -} -variable "schema" { - type = string -} -variable "stage" { - type = string -} -variable "name" { - type = string -} -variable "main_file" { - type = string -} -variable "comment" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/complete/test.tf b/pkg/resources/testdata/TestAcc_Streamlit/complete/test.tf deleted file mode 100644 index e62a871a674..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/complete/test.tf +++ /dev/null @@ -1,12 +0,0 @@ -resource "snowflake_streamlit" "test" { - schema = var.schema - database = var.database - name = var.name - stage = var.stage - directory_location = var.directory_location - main_file = var.main_file - query_warehouse = var.query_warehouse - external_access_integrations = var.external_access_integrations - title = var.title - comment = var.comment -} diff --git a/pkg/resources/testdata/TestAcc_Streamlit/complete/variables.tf b/pkg/resources/testdata/TestAcc_Streamlit/complete/variables.tf deleted file mode 100644 index 4f4de6c3c00..00000000000 --- a/pkg/resources/testdata/TestAcc_Streamlit/complete/variables.tf +++ /dev/null @@ -1,30 +0,0 @@ -variable "database" { - type = string -} -variable "schema" { - type = string -} -variable "name" { - type = string -} -variable "stage" { - type = string -} -variable "directory_location" { - type = string -} -variable "main_file" { - type = string -} -variable "query_warehouse" { - type = string -} -variable "external_access_integrations" { - type = list(string) -} -variable "title" { - type = string -} -variable "comment" { - type = string -} From 45e72d4eb36d7cb8e830e182214ea69f5fe51a1e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 3 Apr 2025 18:56:43 +0200 Subject: [PATCH 16/30] Fix table resource acceptance test setup --- pkg/acceptance/helpers/schema_client.go | 10 + pkg/resources/table_acceptance_test.go | 1073 ++++++++--------- .../WithDatabaseDataRetentionSet/test.tf | 20 - .../WithDatabaseDataRetentionSet/variables.tf | 15 - .../WithSchemaDataRetentionSet/test.tf | 21 - .../WithSchemaDataRetentionSet/variables.tf | 19 - .../WithTableDataRetentionSet/test.tf | 22 - .../WithTableDataRetentionSet/variables.tf | 23 - 8 files changed, 544 insertions(+), 659 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/variables.tf diff --git a/pkg/acceptance/helpers/schema_client.go b/pkg/acceptance/helpers/schema_client.go index 5373bb11563..2d865dacbc4 100644 --- a/pkg/acceptance/helpers/schema_client.go +++ b/pkg/acceptance/helpers/schema_client.go @@ -85,6 +85,16 @@ func (c *SchemaClient) UpdateDataRetentionTime(t *testing.T, id sdk.DatabaseObje }) } +func (c *SchemaClient) UnsetDataRetentionTime(t *testing.T, id sdk.DatabaseObjectIdentifier) { + t.Helper() + + c.Alter(t, id, &sdk.AlterSchemaOptions{ + Unset: &sdk.SchemaUnset{ + DataRetentionTimeInDays: sdk.Bool(true), + }, + }) +} + func (c *SchemaClient) Show(t *testing.T, id sdk.DatabaseObjectIdentifier) (*sdk.Schema, error) { t.Helper() ctx := context.Background() diff --git a/pkg/resources/table_acceptance_test.go b/pkg/resources/table_acceptance_test.go index 8ba4f24a8af..62c5bb0b3d8 100644 --- a/pkg/resources/table_acceptance_test.go +++ b/pkg/resources/table_acceptance_test.go @@ -3,6 +3,7 @@ package resources_test import ( "context" "fmt" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "regexp" "strconv" "testing" @@ -12,11 +13,11 @@ import ( tfjson "github.com/hashicorp/terraform-json" "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/provider" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk/datatypes" - "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" @@ -24,7 +25,10 @@ import ( ) func TestAcc_TableWithSeparateDataRetentionObjectParameterWithoutLifecycle(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -35,9 +39,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithoutLifecycle(t *te CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfig(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -51,9 +55,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithoutLifecycle(t *te ), }, { - Config: tableAndDataRetentionParameterConfigWithoutLifecycle(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableAndDataRetentionParameterConfigWithoutLifecycle(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -73,7 +77,10 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithoutLifecycle(t *te } func TestAcc_TableWithSeparateDataRetentionObjectParameterWithLifecycle(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -84,9 +91,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithLifecycle(t *testi CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfig(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -100,9 +107,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithLifecycle(t *testi ), }, { - Config: tableAndDataRetentionParameterConfigWithLifecycle(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableAndDataRetentionParameterConfigWithLifecycle(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -117,9 +124,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithLifecycle(t *testi ), }, { - Config: updatedTableAndDataRetentionParameterConfigWithLifecycle(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: updatedTableAndDataRetentionParameterConfigWithLifecycle(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -138,6 +145,9 @@ func TestAcc_TableWithSeparateDataRetentionObjectParameterWithLifecycle(t *testi } func TestAcc_Table(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + table1Id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() table2Id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() table3Id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() @@ -151,7 +161,7 @@ func TestAcc_Table(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfig(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -170,7 +180,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig2(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig2(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -190,7 +200,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig3(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig3(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -208,7 +218,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig4(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig4(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -225,7 +235,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig5(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig5(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -242,7 +252,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig6(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig6(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -262,7 +272,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig7(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig7(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -283,7 +293,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig8(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig8(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -305,7 +315,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig9CreateTableWithColumnComment(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig9CreateTableWithColumnComment(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -327,7 +337,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig10AlterTableColumnComment(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig10AlterTableColumnComment(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -349,7 +359,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig11AlterTableAddColumnWithComment(table2Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig11AlterTableAddColumnWithComment(table2Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table2", "name", table2Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table2", "fully_qualified_name", table2Id.FullyQualifiedName()), @@ -375,7 +385,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig12CreateTableWithDataRetention(table3Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig12CreateTableWithDataRetention(table3Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table3", "name", table3Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table3", "fully_qualified_name", table3Id.FullyQualifiedName()), @@ -393,7 +403,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig13AlterTableDataRetention(table3Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig13AlterTableDataRetention(table3Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table3", "name", table3Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table3", "fully_qualified_name", table3Id.FullyQualifiedName()), @@ -411,7 +421,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig14AlterTableEnableChangeTracking(table3Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig14AlterTableEnableChangeTracking(table3Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table3", "name", table3Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table3", "fully_qualified_name", table3Id.FullyQualifiedName()), @@ -429,7 +439,7 @@ func TestAcc_Table(t *testing.T) { ), }, { - Config: tableConfig15CreateTableWithChangeTracking(table1Id.Name(), acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfig15CreateTableWithChangeTracking(table1Id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", table1Id.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", table1Id.FullyQualifiedName()), @@ -450,12 +460,12 @@ func TestAcc_Table(t *testing.T) { }) } -func tableAndDataRetentionParameterConfigWithoutLifecycle(name string, databaseName string, schemaName string) string { - s := ` +func tableAndDataRetentionParameterConfigWithoutLifecycle(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -473,22 +483,21 @@ resource "snowflake_object_parameter" "data_retention_in_time" { value = "30" object_type = "TABLE" object_identifier { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } depends_on = [snowflake_table.test_table] } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableAndDataRetentionParameterConfigWithLifecycle(name string, databaseName string, schemaName string) string { - s := ` +func tableAndDataRetentionParameterConfigWithLifecycle(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -511,22 +520,21 @@ resource "snowflake_object_parameter" "data_retention_in_time" { value = "30" object_type = "TABLE" object_identifier { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } depends_on = [snowflake_table.test_table] } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func updatedTableAndDataRetentionParameterConfigWithLifecycle(name string, databaseName string, schemaName string) string { - s := ` +func updatedTableAndDataRetentionParameterConfigWithLifecycle(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Table with a separate data retention parameter" column { name = "column1" @@ -547,22 +555,21 @@ resource "snowflake_object_parameter" "data_retention_in_time" { value = "30" object_type = "TABLE" object_identifier { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } depends_on = [snowflake_table.test_table] } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" data_retention_time_in_days = 1 comment = "Terraform acceptance test" column { @@ -574,16 +581,15 @@ resource "snowflake_table" "test_table" { type = "VARCHAR(16)" } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig2(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig2(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -595,16 +601,15 @@ resource "snowflake_table" "test_table" { type = "FLOAT" } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig3(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig3(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" data_retention_time_in_days = 1 comment = "Terraform acceptance test" cluster_by = ["COL1"] @@ -617,16 +622,15 @@ resource "snowflake_table" "test_table2" { type = "FLOAT" } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig4(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig4(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 cluster_by = ["COL1","\"col2\""] @@ -639,16 +643,15 @@ resource "snowflake_table" "test_table2" { type = "FLOAT" } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig5(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig5(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 cluster_by = ["\"col2\"","COL1"] @@ -661,16 +664,15 @@ resource "snowflake_table" "test_table2" { type = "FLOAT" } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig6(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig6(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -683,16 +685,15 @@ resource "snowflake_table" "test_table" { nullable = false } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig7(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig7(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -708,16 +709,15 @@ resource "snowflake_table" "test_table" { keys = ["column2"] } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig8(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig8(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -734,16 +734,15 @@ resource "snowflake_table" "test_table" { keys = ["column2","column3"] } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig9CreateTableWithColumnComment(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig9CreateTableWithColumnComment(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -757,16 +756,15 @@ resource "snowflake_table" "test_table2" { comment = "some comment" } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig10AlterTableColumnComment(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig10AlterTableColumnComment(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -780,16 +778,15 @@ resource "snowflake_table" "test_table2" { nullable = false } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig11AlterTableAddColumnWithComment(table2Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig11AlterTableAddColumnWithComment(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table2" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 column { @@ -809,16 +806,15 @@ resource "snowflake_table" "test_table2" { comment = "extra" } } -` - return fmt.Sprintf(s, table2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig12CreateTableWithDataRetention(table3Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig12CreateTableWithDataRetention(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table3" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 10 column { @@ -830,16 +826,15 @@ resource "snowflake_table" "test_table3" { type = "VARCHAR(16)" } } -` - return fmt.Sprintf(s, table3Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig13AlterTableDataRetention(table3Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig13AlterTableDataRetention(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table3" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 0 column { @@ -851,16 +846,15 @@ resource "snowflake_table" "test_table3" { type = "VARCHAR(16)" } } -` - return fmt.Sprintf(s, table3Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig14AlterTableEnableChangeTracking(table3Name string, databaseName string, schemaName string) string { - s := ` +func tableConfig14AlterTableEnableChangeTracking(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table3" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 0 change_tracking = true @@ -873,16 +867,15 @@ resource "snowflake_table" "test_table3" { type = "VARCHAR(16)" } } -` - return fmt.Sprintf(s, table3Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConfig15CreateTableWithChangeTracking(name string, databaseName string, schemaName string) string { - s := ` +func tableConfig15CreateTableWithChangeTracking(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" data_retention_time_in_days = 1 change_tracking = true @@ -895,12 +888,14 @@ resource "snowflake_table" "test_table" { type = "VARCHAR(16)" } } -` - return fmt.Sprintf(s, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_TableDefaults(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -911,9 +906,9 @@ func TestAcc_TableDefaults(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableColumnWithDefaults(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableColumnWithDefaults(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -933,14 +928,14 @@ func TestAcc_TableDefaults(t *testing.T) { resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.type", "NUMBER(38,0)"), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "column.2.type.default.0.constant"), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "column.2.type.default.0.expression"), - resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.default.0.sequence", fmt.Sprintf(`"%v"."%v"."%v"`, acc.TestDatabaseName, acc.TestSchemaName, accName)), + resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.default.0.sequence", fmt.Sprintf(`"%v"."%v"."%v"`, acc.TestDatabaseName, acc.TestSchemaName, tableId.Name())), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "primary_key.0"), ), }, { - Config: tableColumnWithoutDefaults(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableColumnWithoutDefaults(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -956,7 +951,7 @@ func TestAcc_TableDefaults(t *testing.T) { resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.type", "NUMBER(38,0)"), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "column.2.type.default.0.constant"), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "column.2.type.default.0.expression"), - resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.default.0.sequence", fmt.Sprintf(`"%v"."%v"."%v"`, acc.TestDatabaseName, acc.TestSchemaName, accName)), + resource.TestCheckResourceAttr("snowflake_table.test_table", "column.2.default.0.sequence", fmt.Sprintf(`"%v"."%v"."%v"`, acc.TestDatabaseName, acc.TestSchemaName, tableId.Name())), resource.TestCheckNoResourceAttr("snowflake_table.test_table", "primary_key.0"), ), }, @@ -964,18 +959,18 @@ func TestAcc_TableDefaults(t *testing.T) { }) } -func tableColumnWithDefaults(name string, databaseName string, schemaName string) string { - s := ` +func tableColumnWithDefaults(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_seq" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -1000,22 +995,21 @@ resource "snowflake_table" "test_table" { } } } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableColumnWithoutDefaults(name string, databaseName string, schemaName string) string { - s := ` +func tableColumnWithoutDefaults(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_seq" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -1034,14 +1028,21 @@ resource "snowflake_table" "test_table" { } } } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_TableTags(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() - tagName := acc.TestClient().Ids.Alpha() - tag2Name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tag1, tag1Cleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tag1Cleanup) + + tag2, tag2Cleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tag2Cleanup) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + tagValue := random.AlphaN(4) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1052,17 +1053,17 @@ func TestAcc_TableTags(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableWithTags(accName, tagName, tag2Name, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableWithTags(tableId, tag1.ID(), tag2.ID(), tagValue), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), - resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.name", tagName), - resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.value", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.name", tag1.ID().Name()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.value", tagValue), resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.0.schema", acc.TestSchemaName), - resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.name", tag2Name), - resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.value", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.name", tag2.ID().Name()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.value", tagValue), resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "tag.1.schema", acc.TestSchemaName), ), @@ -1071,28 +1072,12 @@ func TestAcc_TableTags(t *testing.T) { }) } -func tableWithTags(name string, tagName string, tag2Name string, databaseName string, schemaName string) string { - s := ` -resource "snowflake_tag" "test_tag" { - name = "%[2]s" - database = "%[4]s" - schema = "%[5]s" - allowed_values = ["%[1]s"] - comment = "Terraform acceptance test" -} - -resource "snowflake_tag" "test2_tag" { - name = "%[3]s" - database = "%[4]s" - schema = "%[5]s" - allowed_values = ["%[1]s"] - comment = "Terraform acceptance test" -} - +func tableWithTags(tableId sdk.SchemaObjectIdentifier, tagId sdk.SchemaObjectIdentifier, tag2Id sdk.SchemaObjectIdentifier, tagValue string) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - database = "%[4]s" - schema = "%[5]s" - name = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -1101,25 +1086,27 @@ resource "snowflake_table" "test_table" { } tag { - name = snowflake_tag.test_tag.name - schema = snowflake_tag.test_tag.schema - database = snowflake_tag.test_tag.database - value = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[4]s" + value = "%[6]s" } tag { - name = snowflake_tag.test2_tag.name - schema = snowflake_tag.test2_tag.schema - database = snowflake_tag.test2_tag.database - value = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[5]s" + value = "%[6]s" } } -` - return fmt.Sprintf(s, name, tagName, tag2Name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), tagId.Name(), tag2Id.Name(), tagValue) } func TestAcc_TableIdentity(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1130,9 +1117,9 @@ func TestAcc_TableIdentity(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableColumnWithIdentityDefault(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableColumnWithIdentityDefault(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -1156,9 +1143,9 @@ func TestAcc_TableIdentity(t *testing.T) { ), }, { - Config: tableColumnWithIdentity(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableColumnWithIdentity(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "change_tracking", "false"), @@ -1186,18 +1173,18 @@ func TestAcc_TableIdentity(t *testing.T) { }) } -func tableColumnWithIdentityDefault(name string, databaseName string, schemaName string) string { - s := ` +func tableColumnWithIdentityDefault(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_seq" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -1214,23 +1201,23 @@ resource "snowflake_table" "test_table" { identity { } } + depends_on = [snowflake_sequence.test_seq] } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableColumnWithIdentity(name string, databaseName string, schemaName string) string { - s := ` +func tableColumnWithIdentity(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_sequence" "test_seq" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Terraform acceptance test" column { @@ -1250,13 +1237,16 @@ resource "snowflake_table" "test_table" { step_num = 4 } } + depends_on = [snowflake_sequence.test_seq] } -` - return fmt.Sprintf(s, name, databaseName, schemaName, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_TableCollate(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1267,9 +1257,9 @@ func TestAcc_TableCollate(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableColumnWithCollate(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableColumnWithCollate(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.#", "3"), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.name", "column1"), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.collate", "en"), @@ -1280,7 +1270,7 @@ func TestAcc_TableCollate(t *testing.T) { ), }, { - Config: addColumnWithCollate(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: addColumnWithCollate(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "column.#", "4"), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.3.name", "column4"), @@ -1288,19 +1278,19 @@ func TestAcc_TableCollate(t *testing.T) { ), }, { - Config: alterTableColumnWithIncompatibleCollate(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: alterTableColumnWithIncompatibleCollate(tableId), ExpectError: regexp.MustCompile("\"VARCHAR\\(100\\) COLLATE 'fr'\" because they have incompatible collations\\."), }, }, }) } -func tableColumnWithCollate(name string, databaseName string, schemaName string) string { +func tableColumnWithCollate(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - database = "%[2]s" - schema = "%[3]s" - name = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "column1" @@ -1317,15 +1307,15 @@ resource "snowflake_table" "test_table" { type = "VARCHAR(100)" } } -`, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func addColumnWithCollate(name string, databaseName string, schemaName string) string { +func addColumnWithCollate(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - database = "%[2]s" - schema = "%[3]s" - name = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "column1" @@ -1347,15 +1337,15 @@ resource "snowflake_table" "test_table" { collate = "utf8" } } -`, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func alterTableColumnWithIncompatibleCollate(name string, databaseName string, schemaName string) string { +func alterTableColumnWithIncompatibleCollate(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - database = "%[2]s" - schema = "%[3]s" - name = "%[1]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "column1" @@ -1377,14 +1367,17 @@ resource "snowflake_table" "test_table" { collate = "utf8" } } -`, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_TableRename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + oldId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - oldComment := acc.TestClient().Ids.Alpha() - newComment := acc.TestClient().Ids.Alpha() + oldComment := random.Comment() + newComment := random.Comment() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1395,7 +1388,7 @@ func TestAcc_TableRename(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfigWithName(oldId.Name(), acc.TestDatabaseName, acc.TestSchemaName, oldComment), + Config: tableConfigWithName(oldId, oldComment), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test_table", "name", oldId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "fully_qualified_name", oldId.FullyQualifiedName()), @@ -1410,7 +1403,7 @@ func TestAcc_TableRename(t *testing.T) { ), }, { - Config: tableConfigWithName(newId.Name(), acc.TestDatabaseName, acc.TestSchemaName, newComment), + Config: tableConfigWithName(newId, newComment), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectResourceAction("snowflake_table.test_table", plancheck.ResourceActionUpdate), @@ -1433,24 +1426,32 @@ func TestAcc_TableRename(t *testing.T) { }) } -func tableConfigWithName(tableName string, databaseName string, schemaName string, comment string) string { - s := ` +func tableConfigWithName(tableId sdk.SchemaObjectIdentifier, comment string) string { + return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%s" - database = "%s" - schema = "%s" - comment = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + comment = "%[4]s" column { name = "column1" type = "VARIANT" } } -` - return fmt.Sprintf(s, tableName, databaseName, schemaName, comment) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), comment) } func TestAcc_Table_MaskingPolicy(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + maskingPolicy1, maskingPolicy1Cleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicyIdentity(t, sdk.DataTypeVARCHAR) + t.Cleanup(maskingPolicy1Cleanup) + + maskingPolicy2, maskingPolicy2Cleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicyIdentity(t, sdk.DataTypeVARCHAR) + t.Cleanup(maskingPolicy2Cleanup) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1461,50 +1462,53 @@ func TestAcc_Table_MaskingPolicy(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableWithMaskingPolicy(accName, acc.TestDatabaseName, acc.TestSchemaName, "policy1"), + Config: tableWithMaskingPolicy(tableId, maskingPolicy1.ID()), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), - resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.masking_policy", acc.TestClient().Ids.NewSchemaObjectIdentifier(fmt.Sprintf("%s1", accName)).FullyQualifiedName()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.masking_policy", maskingPolicy1.ID().FullyQualifiedName()), ), }, // this step proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/pull/2186 { - Config: tableWithMaskingPolicy(accName, acc.TestDatabaseName, acc.TestSchemaName, "policy2"), + Config: tableWithMaskingPolicy(tableId, maskingPolicy2.ID()), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), - resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.masking_policy", acc.TestClient().Ids.NewSchemaObjectIdentifier(fmt.Sprintf("%s2", accName)).FullyQualifiedName()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), + resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.masking_policy", maskingPolicy2.ID().FullyQualifiedName()), ), }, }, }) } +func tableWithMaskingPolicy(tableId sdk.SchemaObjectIdentifier, maskingPolicyId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` +resource "snowflake_table" "test_table" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + comment = "Terraform acceptance test" + + column { + name = "column1" + type = "VARCHAR(16)" + masking_policy = "\"%s\".\"%s\".\"%s\"" + } +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), maskingPolicyId.DatabaseName(), maskingPolicyId.SchemaName(), maskingPolicyId.Name()) +} + // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2356 issue is fixed. func TestAcc_Table_DefaultDataRetentionTime(t *testing.T) { - databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) - tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schemaId) - - configWithDatabaseDataRetentionSet := func(databaseDataRetentionTime int) config.Variables { - return config.Variables{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "table": config.StringVariable(tableId.Name()), - "database_data_retention_time": config.IntegerVariable(databaseDataRetentionTime), - } - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - configWithSchemaDataRetentionSet := func(databaseDataRetentionTime int, schemaDataRetentionTime int) config.Variables { - vars := configWithDatabaseDataRetentionSet(databaseDataRetentionTime) - vars["schema_data_retention_time"] = config.IntegerVariable(schemaDataRetentionTime) - return vars - } + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) - configWithTableDataRetentionSet := func(databaseDataRetentionTime int, schemaDataRetentionTime int, tableDataRetentionTime int) config.Variables { - vars := configWithSchemaDataRetentionSet(databaseDataRetentionTime, schemaDataRetentionTime) - vars["table_data_retention_time"] = config.IntegerVariable(tableDataRetentionTime) - return vars - } + schema, schemaCleanup := acc.TestClient().Schema.CreateSchemaInDatabase(t, database.ID()) + t.Cleanup(schemaCleanup) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1515,64 +1519,72 @@ func TestAcc_Table_DefaultDataRetentionTime(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet"), - ConfigVariables: configWithDatabaseDataRetentionSet(5), + PreConfig: func() { + acc.TestClient().Database.UpdateDataRetentionTime(t, database.ID(), 5) + }, + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 5, 5, 5), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet"), - ConfigVariables: configWithSchemaDataRetentionSet(5, 10), + PreConfig: func() { + acc.TestClient().Schema.UpdateDataRetentionTime(t, schema.ID(), 10) + }, + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 5, 10, 10), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, 5), + PreConfig: func() { + acc.TestClient().Database.UpdateDataRetentionTime(t, database.ID(), 10) + acc.TestClient().Schema.UpdateDataRetentionTime(t, schema.ID(), 3) + }, + Config: tableConfigWithDataRetentionTimeInDays(tableId, 5), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "5"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 5), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, 15), + Config: tableConfigWithDataRetentionTimeInDays(tableId, 15), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "15"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 15), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet"), - ConfigVariables: configWithSchemaDataRetentionSet(10, 3), + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 3), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet"), - ConfigVariables: configWithDatabaseDataRetentionSet(10), + PreConfig: func() { + acc.TestClient().Schema.UnsetDataRetentionTime(t, schema.ID()) + }, + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 10, 10), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 5, 0), + PreConfig: func() { + acc.TestClient().Schema.UpdateDataRetentionTime(t, schema.ID(), 5) + }, + Config: tableConfigWithDataRetentionTimeInDays(tableId, 0), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "0"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 5, 0), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 5, 3), + Config: tableConfigWithDataRetentionTimeInDays(tableId, 3), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "3"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 5, 3), @@ -1582,27 +1594,49 @@ func TestAcc_Table_DefaultDataRetentionTime(t *testing.T) { }) } +func tableConfigWithoutDataRetentionTimeInDays(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` +resource "snowflake_table" "test" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + + column { + name = "id" + type = "NUMBER(38,0)" + } +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) +} + +func tableConfigWithDataRetentionTimeInDays(tableId sdk.SchemaObjectIdentifier, dataRetentionTimeInDays int) string { + return fmt.Sprintf(` +resource "snowflake_table" "test" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + data_retention_time_in_days = %[4]d + + column { + name = "id" + type = "NUMBER(38,0)" + } +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), dataRetentionTimeInDays) +} + // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2356 issue is fixed. func TestAcc_Table_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) { - databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) - tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schemaId) - - configWithDatabaseDataRetentionSet := func(databaseDataRetentionTime int) config.Variables { - return config.Variables{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "table": config.StringVariable(tableId.Name()), - "database_data_retention_time": config.IntegerVariable(databaseDataRetentionTime), - } - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - configWithTableDataRetentionSet := func(databaseDataRetentionTime int, schemaDataRetentionTime int, tableDataRetentionTime int) config.Variables { - vars := configWithDatabaseDataRetentionSet(databaseDataRetentionTime) - vars["schema_data_retention_time"] = config.IntegerVariable(schemaDataRetentionTime) - vars["table_data_retention_time"] = config.IntegerVariable(tableDataRetentionTime) - return vars - } + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := acc.TestClient().Schema.CreateSchemaInDatabase(t, database.ID()) + t.Cleanup(schemaCleanup) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1613,8 +1647,10 @@ func TestAcc_Table_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet"), - ConfigVariables: configWithDatabaseDataRetentionSet(5), + PreConfig: func() { + acc.TestClient().Database.UpdateDataRetentionTime(t, database.ID(), 5) + }, + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 5, 5, 5), @@ -1624,16 +1660,17 @@ func TestAcc_Table_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) PreConfig: func() { acc.TestClient().Table.SetDataRetentionTime(t, tableId, 20) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet"), - ConfigVariables: configWithDatabaseDataRetentionSet(5), + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 5, 5, 5), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(5, 10, 3), + PreConfig: func() { + acc.TestClient().Schema.UpdateDataRetentionTime(t, schema.ID(), 10) + }, + Config: tableConfigWithDataRetentionTimeInDays(tableId, 3), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "3"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 5, 10, 3), @@ -1650,30 +1687,16 @@ func TestAcc_Table_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.T) // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2356 issue is fixed. func TestAcc_Table_DefaultDataRetentionTimeSettingUnsetting(t *testing.T) { - databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - schemaId := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(databaseId) - tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schemaId) - - configWithDatabaseDataRetentionSet := func(databaseDataRetentionTime int) config.Variables { - return config.Variables{ - "database": config.StringVariable(databaseId.Name()), - "schema": config.StringVariable(schemaId.Name()), - "table": config.StringVariable(tableId.Name()), - "database_data_retention_time": config.IntegerVariable(databaseDataRetentionTime), - } - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) - configWithSchemaDataRetentionSet := func(databaseDataRetentionTime int, schemaDataRetentionTime int) config.Variables { - vars := configWithDatabaseDataRetentionSet(databaseDataRetentionTime) - vars["schema_data_retention_time"] = config.IntegerVariable(schemaDataRetentionTime) - return vars - } + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) - configWithTableDataRetentionSet := func(databaseDataRetentionTime int, schemaDataRetentionTime int, tableDataRetentionTime int) config.Variables { - vars := configWithSchemaDataRetentionSet(databaseDataRetentionTime, schemaDataRetentionTime) - vars["table_data_retention_time"] = config.IntegerVariable(tableDataRetentionTime) - return vars - } + schema, schemaCleanup := acc.TestClient().Schema.CreateSchemaInDatabase(t, database.ID()) + t.Cleanup(schemaCleanup) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1684,40 +1707,39 @@ func TestAcc_Table_DefaultDataRetentionTimeSettingUnsetting(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, 5), + PreConfig: func() { + acc.TestClient().Database.UpdateDataRetentionTime(t, database.ID(), 10) + acc.TestClient().Schema.UpdateDataRetentionTime(t, schema.ID(), 3) + }, + Config: tableConfigWithDataRetentionTimeInDays(tableId, 5), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "5"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 5), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, -1), + Config: tableConfigWithDataRetentionTimeInDays(tableId, -1), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 3), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet"), - ConfigVariables: configWithSchemaDataRetentionSet(10, 3), + Config: tableConfigWithoutDataRetentionTimeInDays(tableId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 3), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, -1), + Config: tableConfigWithDataRetentionTimeInDays(tableId, -1), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", r.IntDefaultString), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 3), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet"), - ConfigVariables: configWithTableDataRetentionSet(10, 3, 5), + Config: tableConfigWithDataRetentionTimeInDays(tableId, 5), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table.test", "data_retention_time_in_days", "5"), checkDatabaseSchemaAndTableDataRetentionTime(tableId, 10, 3, 5), @@ -1727,51 +1749,62 @@ func TestAcc_Table_DefaultDataRetentionTimeSettingUnsetting(t *testing.T) { }) } -func tableWithMaskingPolicy(name string, databaseName string, schemaName string, policy string) string { - s := ` -resource "snowflake_masking_policy" "policy1" { - name = "%[1]s1" - database = "%[2]s" - schema = "%[3]s" - argument { - name = "val" - type = "VARCHAR" - } - body = "case when current_role() in ('ANALYST') then val else sha2(val, 512) end" - return_data_type = "VARCHAR(16777216)" -} +func checkDatabaseSchemaAndTableDataRetentionTime(id sdk.SchemaObjectIdentifier, expectedDatabaseRetentionDays int, expectedSchemaRetentionDays int, expectedTableRetentionsDays int) func(state *terraform.State) error { + return func(state *terraform.State) error { + client := acc.TestAccProvider.Meta().(*provider.Context).Client + ctx := context.Background() -resource "snowflake_masking_policy" "policy2" { - name = "%[1]s2" - database = "%[2]s" - schema = "%[3]s" - argument { - name = "val" - type = "VARCHAR" - } - body = "case when current_role() in ('ANALYST') then val else sha2(val, 512) end" - return_data_type = "VARCHAR(16777216)" -} + database, err := client.Databases.ShowByID(ctx, id.DatabaseId()) + if err != nil { + return err + } -resource "snowflake_table" "test_table" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" - comment = "Terraform acceptance test" + if database.RetentionTime != expectedDatabaseRetentionDays { + return fmt.Errorf("invalid database retention time, expected: %d, got: %d", expectedDatabaseRetentionDays, database.RetentionTime) + } - column { - name = "column1" - type = "VARCHAR(16)" - masking_policy = snowflake_masking_policy.%[4]s.fully_qualified_name + s, err := client.Schemas.ShowByID(ctx, id.SchemaId()) + if err != nil { + return err + } + + // "retention_time" may sometimes be an empty string instead of an integer + var schemaRetentionTime int64 + { + rt := s.RetentionTime + if rt == "" { + rt = "0" + } + + schemaRetentionTime, err = strconv.ParseInt(rt, 10, 64) + if err != nil { + return err + } + } + + if schemaRetentionTime != int64(expectedSchemaRetentionDays) { + return fmt.Errorf("invalid schema retention time, expected: %d, got: %d", expectedSchemaRetentionDays, schemaRetentionTime) + } + + table, err := client.Tables.ShowByID(ctx, id) + if err != nil { + return err + } + + if table.RetentionTime != expectedTableRetentionsDays { + return fmt.Errorf("invalid table retention time, expected: %d, got: %d", expectedTableRetentionsDays, table.RetentionTime) + } + + return nil } } -` - return fmt.Sprintf(s, name, databaseName, schemaName, policy) -} // proves issues https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2110 and https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2495 func TestAcc_Table_ClusterBy(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1782,9 +1815,9 @@ func TestAcc_Table_ClusterBy(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfigWithComplexClusterBy(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConfigWithComplexClusterBy(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "cluster_by.#", "2"), @@ -1796,12 +1829,12 @@ func TestAcc_Table_ClusterBy(t *testing.T) { }) } -func tableConfigWithComplexClusterBy(name string, databaseName string, schemaName string) string { +func tableConfigWithComplexClusterBy(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" cluster_by = ["date_trunc('month', LAST_LOAD_TIME)", "COL1"] column { name = "COL1" @@ -1813,14 +1846,18 @@ resource "snowflake_table" "test_table" { nullable = true } } -`, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } // TODO [SNOW-1348114]: do not trim the data type (e.g. NUMBER(38,0) -> NUMBER(36,0) diff is ignored); finish the test // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2588 is fixed func TestAcc_ColumnTypeChangeWithNonTextType(t *testing.T) { t.Skipf("Will be fixed with tables redesign in SNOW-1348114") - accName := acc.TestClient().Ids.Alpha() + + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1831,9 +1868,9 @@ func TestAcc_ColumnTypeChangeWithNonTextType(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfigWithNumberColumnType(accName, acc.TestDatabaseName, acc.TestSchemaName, "NUMBER(38,0)"), + Config: tableConfigWithNumberColumnType(tableId, "NUMBER(38,0)"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.name", "id"), @@ -1841,9 +1878,9 @@ func TestAcc_ColumnTypeChangeWithNonTextType(t *testing.T) { ), }, { - Config: tableConfigWithNumberColumnType(accName, acc.TestDatabaseName, acc.TestSchemaName, "NUMBER(36,0)"), + Config: tableConfigWithNumberColumnType(tableId, "NUMBER(36,0)"), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", accName), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("snowflake_table.test_table", "schema", acc.TestSchemaName), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.name", "id"), @@ -1854,74 +1891,27 @@ func TestAcc_ColumnTypeChangeWithNonTextType(t *testing.T) { }) } -func tableConfigWithNumberColumnType(name string, databaseName string, schemaName string, columnType string) string { +func tableConfigWithNumberColumnType(tableId sdk.SchemaObjectIdentifier, columnType string) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "id" type = "%[4]s" } } -`, name, databaseName, schemaName, columnType) -} - -func checkDatabaseSchemaAndTableDataRetentionTime(id sdk.SchemaObjectIdentifier, expectedDatabaseRetentionDays int, expectedSchemaRetentionDays int, expectedTableRetentionsDays int) func(state *terraform.State) error { - return func(state *terraform.State) error { - client := acc.TestAccProvider.Meta().(*provider.Context).Client - ctx := context.Background() - - database, err := client.Databases.ShowByID(ctx, id.DatabaseId()) - if err != nil { - return err - } - - if database.RetentionTime != expectedDatabaseRetentionDays { - return fmt.Errorf("invalid database retention time, expected: %d, got: %d", expectedDatabaseRetentionDays, database.RetentionTime) - } - - s, err := client.Schemas.ShowByID(ctx, id.SchemaId()) - if err != nil { - return err - } - - // "retention_time" may sometimes be an empty string instead of an integer - var schemaRetentionTime int64 - { - rt := s.RetentionTime - if rt == "" { - rt = "0" - } - - schemaRetentionTime, err = strconv.ParseInt(rt, 10, 64) - if err != nil { - return err - } - } - - if schemaRetentionTime != int64(expectedSchemaRetentionDays) { - return fmt.Errorf("invalid schema retention time, expected: %d, got: %d", expectedSchemaRetentionDays, schemaRetentionTime) - } - - table, err := client.Tables.ShowByID(ctx, id) - if err != nil { - return err - } - - if table.RetentionTime != expectedTableRetentionsDays { - return fmt.Errorf("invalid table retention time, expected: %d, got: %d", expectedTableRetentionsDays, table.RetentionTime) - } - - return nil - } +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), columnType) } // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2733 is fixed func TestAcc_Table_gh2733(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1932,9 +1922,9 @@ func TestAcc_Table_gh2733(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Table), Steps: []resource.TestStep{ { - Config: tableConfigGh2733(acc.TestDatabaseName, acc.TestSchemaName, name), + Config: tableConfigGh2733(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table.test_table", "name", name), + resource.TestCheckResourceAttr("snowflake_table.test_table", "name", tableId.Name()), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.name", "MY_INT"), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.type", "NUMBER(38,0)"), resource.TestCheckResourceAttr("snowflake_table.test_table", "column.1.name", "MY_STRING"), @@ -1949,7 +1939,7 @@ func TestAcc_Table_gh2733(t *testing.T) { }) } -func tableConfigGh2733(database string, schema string, name string) string { +func tableConfigGh2733(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { database = "%[1]s" @@ -1980,13 +1970,16 @@ resource "snowflake_table" "test_table" { # type = "TIMESTAMP_NTZ" # Equivalent to TIMESTAMP_NTZ } } -`, database, schema, name) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_Table_migrateFromVersion_0_94_1(t *testing.T) { - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_table.test_table" + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resourceName := "snowflake_table.test_table" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2002,19 +1995,19 @@ func TestAcc_Table_migrateFromVersion_0_94_1(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: tableConfig(id.Name(), id.DatabaseName(), id.SchemaName()), + Config: tableConfig(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "name", id.Name()), - resource.TestCheckResourceAttr(resourceName, "qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(resourceName, "name", tableId.Name()), + resource.TestCheckResourceAttr(resourceName, "qualified_name", tableId.FullyQualifiedName()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: tableConfig(id.Name(), id.DatabaseName(), id.SchemaName()), + Config: tableConfig(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "name", id.Name()), - resource.TestCheckResourceAttr(resourceName, "fully_qualified_name", id.FullyQualifiedName()), + resource.TestCheckResourceAttr(resourceName, "name", tableId.Name()), + resource.TestCheckResourceAttr(resourceName, "fully_qualified_name", tableId.FullyQualifiedName()), resource.TestCheckNoResourceAttr(resourceName, "qualified_name"), ), }, @@ -2023,11 +2016,18 @@ func TestAcc_Table_migrateFromVersion_0_94_1(t *testing.T) { } func TestAcc_Table_SuppressQuotingOnDefaultSequence_issue2644(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() - name := acc.TestClient().Ids.Alpha() - resourceName := "snowflake_table.test_table" + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + database, databaseCleanup := acc.TestClient().Database.CreateDatabaseWithParametersSet(t) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := acc.TestClient().Schema.CreateSchemaInDatabase(t, database.ID()) + t.Cleanup(schemaCleanup) + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) + + resourceName := "snowflake_table.test_table" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2043,63 +2043,55 @@ func TestAcc_Table_SuppressQuotingOnDefaultSequence_issue2644(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: tableConfigWithSequence(name, databaseName, schemaName), + Config: tableConfigWithSequence(tableId), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: tableConfigWithSequence(name, databaseName, schemaName), + Config: tableConfigWithSequence(tableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "column.0.default.0.sequence", sdk.NewSchemaObjectIdentifier(databaseName, schemaName, name).FullyQualifiedName()), + resource.TestCheckResourceAttr(resourceName, "column.0.default.0.sequence", tableId.FullyQualifiedName()), ), }, }, }) } -func tableConfigWithSequence(name string, databaseName string, schemaName string) string { +func tableConfigWithSequence(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` -resource "snowflake_database" "test_database" { - name = "%[2]s" -} - -resource "snowflake_schema" "test_schema" { - depends_on = [snowflake_database.test_database] - name = "%[3]s" - database = "%[2]s" -} - resource "snowflake_sequence" "test_sequence" { - depends_on = [snowflake_schema.test_schema] - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" } resource "snowflake_table" "test_table" { - depends_on = [snowflake_sequence.test_sequence] - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" data_retention_time_in_days = 1 comment = "Terraform acceptance test" column { name = "column1" type = "NUMBER" default { - sequence = "%[2]s.%[3]s.%[1]s" + sequence = "%[1]s.%[2]s.%[3]s" } } + depends_on = [snowflake_sequence.test_sequence] } -`, name, databaseName, schemaName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } func TestAcc_Table_issue3007_textColumn(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_table.test_table" defaultVarchar := fmt.Sprintf("VARCHAR(%d)", datatypes.DefaultVarcharLength) + resourceName := "snowflake_table.test_table" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2168,11 +2160,14 @@ func TestAcc_Table_issue3007_textColumn(t *testing.T) { // TODO [SNOW-1348114]: visit with table rework (e.g. changing scale is not supported: err 040052 (22000): SQL compilation error: cannot change column SOME_COLUMN from type NUMBER(38,0) to NUMBER(11,2) because changing the scale of a number is not supported.) func TestAcc_Table_issue3007_numberColumn(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_table.test_table" defaultNumber := fmt.Sprintf("NUMBER(%d,%d)", datatypes.DefaultNumberPrecision, datatypes.DefaultNumberScale) + resourceName := "snowflake_table.test_table" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2243,9 +2238,9 @@ func TestAcc_Table_issue3007_numberColumn(t *testing.T) { func tableConfigIssue3007(tableId sdk.SchemaObjectIdentifier, dataType string) string { return fmt.Sprintf(` resource "snowflake_table" "test_table" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" comment = "Issue 3007 confirmation" column { @@ -2258,5 +2253,5 @@ resource "snowflake_table" "test_table" { type = "%[4]s" } } -`, tableId.Name(), tableId.DatabaseName(), tableId.SchemaName(), dataType) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), dataType) } diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/test.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/test.tf deleted file mode 100644 index f5ec2ef4717..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/test.tf +++ /dev/null @@ -1,20 +0,0 @@ -resource "snowflake_database" "test" { - name = var.database - data_retention_time_in_days = var.database_data_retention_time -} - -resource "snowflake_schema" "test" { - database = snowflake_database.test.name - name = var.schema -} - -resource "snowflake_table" "test" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = var.table - - column { - name = "id" - type = "NUMBER(38,0)" - } -} diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/variables.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/variables.tf deleted file mode 100644 index 38cd514cf96..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithDatabaseDataRetentionSet/variables.tf +++ /dev/null @@ -1,15 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "table" { - type = string -} - -variable "database_data_retention_time" { - type = number -} diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/test.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/test.tf deleted file mode 100644 index 30c3360a8fe..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/test.tf +++ /dev/null @@ -1,21 +0,0 @@ -resource "snowflake_database" "test" { - name = var.database - data_retention_time_in_days = var.database_data_retention_time -} - -resource "snowflake_schema" "test" { - database = snowflake_database.test.name - name = var.schema - data_retention_time_in_days = var.schema_data_retention_time -} - -resource "snowflake_table" "test" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = var.table - - column { - name = "id" - type = "NUMBER(38,0)" - } -} diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/variables.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/variables.tf deleted file mode 100644 index 9f9ad3fd5a4..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithSchemaDataRetentionSet/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "table" { - type = string -} - -variable "database_data_retention_time" { - type = number -} - -variable "schema_data_retention_time" { - type = number -} diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/test.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/test.tf deleted file mode 100644 index 05571c11122..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/test.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_database" "test" { - name = var.database - data_retention_time_in_days = var.database_data_retention_time -} - -resource "snowflake_schema" "test" { - database = snowflake_database.test.name - name = var.schema - data_retention_time_in_days = var.schema_data_retention_time -} - -resource "snowflake_table" "test" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = var.table - data_retention_time_in_days = var.table_data_retention_time - - column { - name = "id" - type = "NUMBER(38,0)" - } -} diff --git a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/variables.tf b/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/variables.tf deleted file mode 100644 index 9ca350baee5..00000000000 --- a/pkg/resources/testdata/TestAcc_Table_DefaultDataRetentionTime/WithTableDataRetentionSet/variables.tf +++ /dev/null @@ -1,23 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "table" { - type = string -} - -variable "database_data_retention_time" { - type = number -} - -variable "schema_data_retention_time" { - type = number -} - -variable "table_data_retention_time" { - type = number -} From ce3e550b815dedd7cf1e114c806dfc812f52f21f Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 09:04:17 +0200 Subject: [PATCH 17/30] Fix table column masking policy application resource acceptance test setup --- ...table_column_masking_policy_application.go | 24 ++++++++-------- ...king_policy_application_acceptance_test.go | 28 ++++++++++++------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/pkg/resources/table_column_masking_policy_application.go b/pkg/resources/table_column_masking_policy_application.go index 87a15a2ca61..ad9b72d3561 100644 --- a/pkg/resources/table_column_masking_policy_application.go +++ b/pkg/resources/table_column_masking_policy_application.go @@ -4,22 +4,21 @@ import ( "context" "fmt" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/provider" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/previewfeatures" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/provider" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/snowflake" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) var tableColumnMaskingPolicyApplicationSchema = map[string]*schema.Schema{ "table": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "The fully qualified name (`database.schema.table`) of the table to apply the masking policy to.", + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The fully qualified name (`database.schema.table`) of the table to apply the masking policy to.", + DiffSuppressFunc: suppressIdentifierQuoting, }, "column": { Type: schema.TypeString, @@ -28,10 +27,11 @@ var tableColumnMaskingPolicyApplicationSchema = map[string]*schema.Schema{ Description: "The column to apply the masking policy to.", }, "masking_policy": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Fully qualified name (`database.schema.policyname`) of the policy to apply.", + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Fully qualified name (`database.schema.policyname`) of the policy to apply.", + DiffSuppressFunc: suppressIdentifierQuoting, }, } diff --git a/pkg/resources/table_column_masking_policy_application_acceptance_test.go b/pkg/resources/table_column_masking_policy_application_acceptance_test.go index 25b51a3405f..286d800dd48 100644 --- a/pkg/resources/table_column_masking_policy_application_acceptance_test.go +++ b/pkg/resources/table_column_masking_policy_application_acceptance_test.go @@ -6,11 +6,19 @@ 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/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_TableColumnMaskingPolicyApplication(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + maskingPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -20,9 +28,9 @@ func TestAcc_TableColumnMaskingPolicyApplication(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: maskingPolicyApplicationTestConfig(acc.TestDatabaseName, acc.TestSchemaName), + Config: maskingPolicyApplicationTestConfig(tableId, maskingPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_table_column_masking_policy_application.mpa", "table", fmt.Sprintf(`"%s"."%s"."table"`, acc.TestDatabaseName, acc.TestSchemaName)), + resource.TestCheckResourceAttr("snowflake_table_column_masking_policy_application.mpa", "table", tableId.FullyQualifiedName()), ), }, { @@ -34,12 +42,12 @@ func TestAcc_TableColumnMaskingPolicyApplication(t *testing.T) { }) } -func maskingPolicyApplicationTestConfig(databaseName string, schemaName string) string { +func maskingPolicyApplicationTestConfig(tableId sdk.SchemaObjectIdentifier, maskingPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_masking_policy" "test" { - name = "mypolicy" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[4]s" argument { name = "val" type = "VARCHAR" @@ -50,9 +58,9 @@ resource "snowflake_masking_policy" "test" { } resource "snowflake_table" "table" { - database = "%s" - schema = "%s" - name = "table" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "secret" @@ -68,5 +76,5 @@ resource "snowflake_table_column_masking_policy_application" "mpa" { table = snowflake_table.table.fully_qualified_name column = "secret" masking_policy = snowflake_masking_policy.test.fully_qualified_name -}`, databaseName, schemaName, databaseName, schemaName) +}`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), maskingPolicyId.Name()) } From cd919684cb8f2acddeac513586b8a1af5186514c Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 09:19:21 +0200 Subject: [PATCH 18/30] Fix table constraint resource acceptance test setup --- .../table_constraint_acceptance_test.go | 232 ++++++++++-------- 1 file changed, 125 insertions(+), 107 deletions(-) diff --git a/pkg/resources/table_constraint_acceptance_test.go b/pkg/resources/table_constraint_acceptance_test.go index 89c83573a51..c4c5da0caa7 100644 --- a/pkg/resources/table_constraint_acceptance_test.go +++ b/pkg/resources/table_constraint_acceptance_test.go @@ -9,6 +9,7 @@ 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/internal/provider" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -17,7 +18,10 @@ import ( ) func TestAcc_TableConstraint_fk(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -28,7 +32,7 @@ func TestAcc_TableConstraint_fk(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: tableConstraintFKConfig(name, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConstraintFKConfig(id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.fk", "type", "FOREIGN KEY"), @@ -41,12 +45,12 @@ func TestAcc_TableConstraint_fk(t *testing.T) { }) } -func tableConstraintFKConfig(n string, databaseName string, schemaName string) string { +func tableConstraintFKConfig(id sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "t" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "col1" @@ -55,9 +59,9 @@ resource "snowflake_table" "t" { } resource "snowflake_table" "fk_t" { - name = "fk_%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "fk_%[3]s" column { name = "fk_col1" type = "text" @@ -66,7 +70,7 @@ resource "snowflake_table" "fk_t" { } resource "snowflake_table_constraint" "fk" { - name="%s" + name="%[3]s" type= "FOREIGN KEY" table_id = snowflake_table.t.fully_qualified_name columns = ["col1"] @@ -82,16 +86,18 @@ resource "snowflake_table_constraint" "fk" { comment = "hello fk" } -`, n, databaseName, schemaName, n, databaseName, schemaName, n) +`, id.DatabaseName(), id.SchemaName(), id.Name()) } // proves issue https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2674 // It is connected with https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2629. // Provider defaults will be reworked during resources redesign. func TestAcc_TableConstraint_pk(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - tableName := tableId.Name() - constraintName := fmt.Sprintf("%s_pk", tableName) + constraintName := fmt.Sprintf("pk_%s", tableId.Name()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -102,7 +108,7 @@ func TestAcc_TableConstraint_pk(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: tableConstraintPKConfig(acc.TestDatabaseName, acc.TestSchemaName, tableName, constraintName), + Config: tableConstraintPKConfig(tableId, constraintName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.pk", "type", "PRIMARY KEY"), resource.TestCheckResourceAttr("snowflake_table_constraint.pk", "comment", "hello pk"), @@ -113,7 +119,7 @@ func TestAcc_TableConstraint_pk(t *testing.T) { }) } -func tableConstraintPKConfig(databaseName string, schemaName string, tableName string, constraintName string) string { +func tableConstraintPKConfig(tableId sdk.SchemaObjectIdentifier, constraintName string) string { return fmt.Sprintf(` resource "snowflake_table" "t" { database = "%[1]s" @@ -135,7 +141,7 @@ resource "snowflake_table_constraint" "pk" { deferrable = false comment = "hello pk" } -`, databaseName, schemaName, tableName, constraintName) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), constraintName) } type PrimaryKeys struct { @@ -169,7 +175,10 @@ func checkPrimaryKeyExists(tableId sdk.SchemaObjectIdentifier, constraintName st } func TestAcc_TableConstraint_unique(t *testing.T) { - name := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -180,7 +189,7 @@ func TestAcc_TableConstraint_unique(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: tableConstraintUniqueConfig(name, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConstraintUniqueConfig(id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.unique", "type", "UNIQUE"), @@ -193,12 +202,12 @@ func TestAcc_TableConstraint_unique(t *testing.T) { }) } -func tableConstraintUniqueConfig(n string, databaseName string, schemaName string) string { +func tableConstraintUniqueConfig(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "t" { - name = "%s" - database = "%s" - schema = "%s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "col1" @@ -207,7 +216,7 @@ resource "snowflake_table" "t" { } resource "snowflake_table_constraint" "unique" { - name="%s" + name="%[3]s" type= "UNIQUE" table_id = snowflake_table.t.fully_qualified_name columns = ["col1"] @@ -217,12 +226,15 @@ resource "snowflake_table_constraint" "unique" { comment = "hello unique" } -`, n, databaseName, schemaName, n) +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } // proves issue https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2535 func TestAcc_Table_issue2535_newConstraint(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -239,7 +251,7 @@ func TestAcc_Table_issue2535_newConstraint(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: tableConstraintUniqueConfigUsingTableId(accName, acc.TestDatabaseName, acc.TestSchemaName, "|"), + Config: tableConstraintUniqueConfigUsingTableId(id, "|"), ExpectError: regexp.MustCompile(`.*table id is incorrect.*`), }, { @@ -249,7 +261,7 @@ func TestAcc_Table_issue2535_newConstraint(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: tableConstraintUniqueConfigUsingTableId(accName, acc.TestDatabaseName, acc.TestSchemaName, "|"), + Config: tableConstraintUniqueConfigUsingTableId(id, "|"), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.unique", "type", "UNIQUE"), ), @@ -257,12 +269,12 @@ func TestAcc_Table_issue2535_newConstraint(t *testing.T) { { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: tableConstraintUniqueConfigUsingTableId(accName, acc.TestDatabaseName, acc.TestSchemaName, "|"), + Config: tableConstraintUniqueConfigUsingTableId(id, "|"), ExpectError: regexp.MustCompile(`.*Expected SchemaObjectIdentifier identifier type, but got:.*`), }, { ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: tableConstraintUniqueConfigUsingTableId(accName, acc.TestDatabaseName, acc.TestSchemaName, "."), + Config: tableConstraintUniqueConfigUsingTableId(id, "."), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.unique", "type", "UNIQUE"), ), @@ -273,7 +285,10 @@ func TestAcc_Table_issue2535_newConstraint(t *testing.T) { // proves issue https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2535 func TestAcc_Table_issue2535_existingTable(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -291,7 +306,7 @@ func TestAcc_Table_issue2535_existingTable(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: tableConstraintUniqueConfigUsingTableId(accName, acc.TestDatabaseName, acc.TestSchemaName, "|"), + Config: tableConstraintUniqueConfigUsingTableId(id, "|"), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.unique", "type", "UNIQUE"), ), @@ -304,14 +319,14 @@ func TestAcc_Table_issue2535_existingTable(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: tableConstraintUniqueConfigUsingQualifiedName(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConstraintUniqueConfigUsingQualifiedName(id), ExpectError: regexp.MustCompile(`.*table id is incorrect.*`), }, // fixed in the current version { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: tableConstraintUniqueConfigUsingFullyQualifiedName(accName, acc.TestDatabaseName, acc.TestSchemaName), + Config: tableConstraintUniqueConfigUsingFullyQualifiedName(id), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_table_constraint.unique", "type", "UNIQUE"), ), @@ -320,6 +335,72 @@ func TestAcc_Table_issue2535_existingTable(t *testing.T) { }) } +func tableConstraintUniqueConfigUsingTableId(tableId sdk.SchemaObjectIdentifier, idSeparator string) string { + return fmt.Sprintf(` +resource "snowflake_table" "t" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + + column { + name = "col1" + type = "NUMBER(38,0)" + } +} + +resource "snowflake_table_constraint" "unique" { + name = "%[3]s" + type = "UNIQUE" + table_id = "${snowflake_table.t.database}%[4]s${snowflake_table.t.schema}%[4]s${snowflake_table.t.name}" + columns = ["col1"] +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), idSeparator) +} + +func tableConstraintUniqueConfigUsingQualifiedName(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` +resource "snowflake_table" "t" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + + column { + name = "col1" + type = "NUMBER(38,0)" + } +} + +resource "snowflake_table_constraint" "unique" { + name = "%[3]s" + type = "UNIQUE" + table_id = snowflake_table.t.qualified_name + columns = ["col1"] +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) +} + +func tableConstraintUniqueConfigUsingFullyQualifiedName(tableId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` +resource "snowflake_table" "t" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + + column { + name = "col1" + type = "NUMBER(38,0)" + } +} + +resource "snowflake_table_constraint" "unique" { + name = "%[3]s" + type = "UNIQUE" + table_id = snowflake_table.t.fully_qualified_name + columns = ["col1"] +} +`, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) +} + // TODO(issue-2683): Uncomment once the Update operation is ready // func TestAcc_TableConstraint_Rename(t *testing.T) { // name := acctest.RandStringFromCharSet(10, acctest.CharSetAlpha) @@ -355,6 +436,9 @@ func TestAcc_Table_issue2535_existingTable(t *testing.T) { //} func TestAcc_TableConstraint_ProperlyHandles_EmptyForeignKeyProperties(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ @@ -366,88 +450,22 @@ func TestAcc_TableConstraint_ProperlyHandles_EmptyForeignKeyProperties(t *testin CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: tableConstraintEmptyForeignKeyProperties(id.Name(), id.DatabaseName(), id.SchemaName()), + Config: tableConstraintEmptyForeignKeyProperties(id), ExpectError: regexp.MustCompile(`At least 1 "references" blocks are required.`), }, { - Config: tableConstraintForeignKeyProperties(id.Name(), id.DatabaseName(), id.SchemaName()), + Config: tableConstraintForeignKeyProperties(id), }, }, }) } -func tableConstraintUniqueConfigUsingQualifiedName(n string, databaseName string, schemaName string) string { - return fmt.Sprintf(` -resource "snowflake_table" "t" { - name = "%s" - database = "%s" - schema = "%s" - - column { - name = "col1" - type = "NUMBER(38,0)" - } -} - -resource "snowflake_table_constraint" "unique" { - name = "%s" - type = "UNIQUE" - table_id = snowflake_table.t.qualified_name - columns = ["col1"] -} -`, n, databaseName, schemaName, n) -} - -func tableConstraintUniqueConfigUsingFullyQualifiedName(n string, databaseName string, schemaName string) string { - return fmt.Sprintf(` -resource "snowflake_table" "t" { - name = "%s" - database = "%s" - schema = "%s" - - column { - name = "col1" - type = "NUMBER(38,0)" - } -} - -resource "snowflake_table_constraint" "unique" { - name = "%s" - type = "UNIQUE" - table_id = snowflake_table.t.fully_qualified_name - columns = ["col1"] -} -`, n, databaseName, schemaName, n) -} - -func tableConstraintUniqueConfigUsingTableId(name string, databaseName string, schemaName string, idSeparator string) string { - return fmt.Sprintf(` -resource "snowflake_table" "t" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" - - column { - name = "col1" - type = "NUMBER(38,0)" - } -} - -resource "snowflake_table_constraint" "unique" { - name = "%[1]s" - type = "UNIQUE" - table_id = "${snowflake_table.t.database}%[4]s${snowflake_table.t.schema}%[4]s${snowflake_table.t.name}" - columns = ["col1"] -} -`, name, databaseName, schemaName, idSeparator) -} - -func tableConstraintEmptyForeignKeyProperties(name string, databaseName string, schemaName string) string { +func tableConstraintEmptyForeignKeyProperties(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "t" { - name = "%[3]s" database = "%[1]s" schema = "%[2]s" + name = "%[3]s" column { name = "col1" @@ -463,15 +481,15 @@ func tableConstraintEmptyForeignKeyProperties(name string, databaseName string, foreign_key_properties { } } - `, databaseName, schemaName, name) + `, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } -func tableConstraintForeignKeyProperties(name string, databaseName string, schemaName string) string { +func tableConstraintForeignKeyProperties(tableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_table" "t" { - name = "%[3]s" database = "%[1]s" schema = "%[2]s" + name = "%[3]s" column { name = "col1" @@ -491,5 +509,5 @@ func tableConstraintForeignKeyProperties(name string, databaseName string, schem } } } - `, databaseName, schemaName, name) + `, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name()) } From c92616ca0197f7035cd46cf4e07af0c21e1b697e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 09:26:14 +0200 Subject: [PATCH 19/30] Fix tag resource acceptance test setup --- pkg/resources/tag_acceptance_test.go | 119 ++++++++++++++------------- 1 file changed, 64 insertions(+), 55 deletions(-) diff --git a/pkg/resources/tag_acceptance_test.go b/pkg/resources/tag_acceptance_test.go index e48b1364dae..af86be4b36e 100644 --- a/pkg/resources/tag_acceptance_test.go +++ b/pkg/resources/tag_acceptance_test.go @@ -12,6 +12,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/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" @@ -24,7 +25,6 @@ import ( func TestAcc_Tag_basic(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() maskingPolicy, maskingPolicyCleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicy(t) t.Cleanup(maskingPolicyCleanup) @@ -32,20 +32,24 @@ func TestAcc_Tag_basic(t *testing.T) { maskingPolicy2, maskingPolicy2Cleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicy(t) t.Cleanup(maskingPolicy2Cleanup) - baseModel := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + comment := random.Comment() + newComment := random.Comment() - modelWithExtraFields := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()). - WithComment("foo"). + baseModel := model.TagBase("test", id) + + modelWithExtraFields := model.TagBase("test", id). + WithComment(comment). WithAllowedValues("foo", "", "bar"). WithMaskingPolicies(maskingPolicy.ID()) - modelWithDifferentListOrder := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()). - WithComment("foo"). + modelWithDifferentListOrder := model.TagBase("test", id). + WithComment(comment). WithAllowedValues("", "bar", "foo"). WithMaskingPolicies(maskingPolicy.ID()) - modelWithDifferentValues := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()). - WithComment("bar"). + modelWithDifferentValues := model.TagBase("test", id). + WithComment(newComment). WithAllowedValues("abc", "def", ""). WithMaskingPolicies(maskingPolicy2.ID()) @@ -94,7 +98,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("foo"), + HasCommentString(comment), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "masking_policies.#", "1")), assert.Check(resource.TestCheckTypeSetElemAttr(modelWithExtraFields.ResourceReference(), "masking_policies.*", maskingPolicy.ID().FullyQualifiedName())), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "allowed_values.#", "3")), @@ -106,7 +110,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). - HasComment("foo"). + HasComment(comment). HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "show_output.0.allowed_values.#", "3")), @@ -126,7 +130,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("foo"), + HasCommentString(comment), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "masking_policies.#", "1")), assert.Check(resource.TestCheckTypeSetElemAttr(modelWithExtraFields.ResourceReference(), "masking_policies.*", maskingPolicy.ID().FullyQualifiedName())), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "allowed_values.#", "3")), @@ -138,7 +142,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). - HasComment("foo"). + HasComment(comment). HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"), assert.Check(resource.TestCheckResourceAttr(modelWithExtraFields.ResourceReference(), "show_output.0.allowed_values.#", "3")), @@ -160,7 +164,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("foo"), + HasCommentString(comment), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentListOrder.ResourceReference(), "masking_policies.#", "1")), assert.Check(resource.TestCheckTypeSetElemAttr(modelWithDifferentListOrder.ResourceReference(), "masking_policies.*", maskingPolicy.ID().FullyQualifiedName())), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentListOrder.ResourceReference(), "allowed_values.#", "3")), @@ -172,7 +176,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). - HasComment("foo"). + HasComment(comment). HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentListOrder.ResourceReference(), "show_output.0.allowed_values.#", "3")), @@ -189,7 +193,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). - HasCommentString("bar"), + HasCommentString(newComment), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentValues.ResourceReference(), "masking_policies.#", "1")), assert.Check(resource.TestCheckTypeSetElemAttr(modelWithDifferentValues.ResourceReference(), "masking_policies.*", maskingPolicy2.ID().FullyQualifiedName())), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentValues.ResourceReference(), "allowed_values.#", "3")), @@ -201,7 +205,7 @@ func TestAcc_Tag_basic(t *testing.T) { HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). - HasComment("bar"). + HasComment(newComment). HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"), assert.Check(resource.TestCheckResourceAttr(modelWithDifferentValues.ResourceReference(), "show_output.0.allowed_values.#", "3")), @@ -239,12 +243,13 @@ func TestAcc_Tag_basic(t *testing.T) { func TestAcc_Tag_complete(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() maskingPolicy, maskingPolicyCleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicy(t) t.Cleanup(maskingPolicyCleanup) - model := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()). + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + tagModel := model.TagBase("test", id). WithComment("foo"). WithAllowedValuesValue(tfconfig.ListVariable(tfconfig.StringVariable("foo"), tfconfig.StringVariable(""), tfconfig.StringVariable("bar"))). WithMaskingPoliciesValue(tfconfig.ListVariable(tfconfig.StringVariable(maskingPolicy.ID().FullyQualifiedName()))) @@ -257,20 +262,20 @@ func TestAcc_Tag_complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Tag), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.TagResource(t, model.ResourceReference()). + Config: config.FromModels(t, tagModel), + Check: assertThat(t, resourceassert.TagResource(t, tagModel.ResourceReference()). HasNameString(id.Name()). HasDatabaseString(id.DatabaseName()). HasSchemaString(id.SchemaName()). HasFullyQualifiedNameString(id.FullyQualifiedName()). HasCommentString("foo"), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "masking_policies.#", "1")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "masking_policies.*", maskingPolicy.ID().FullyQualifiedName())), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "allowed_values.#", "3")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "allowed_values.*", "foo")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "allowed_values.*", "")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "allowed_values.*", "bar")), - resourceshowoutputassert.TagShowOutput(t, model.ResourceReference()). + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "masking_policies.#", "1")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "masking_policies.*", maskingPolicy.ID().FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "allowed_values.#", "3")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "allowed_values.*", "foo")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "allowed_values.*", "")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "allowed_values.*", "bar")), + resourceshowoutputassert.TagShowOutput(t, tagModel.ResourceReference()). HasCreatedOnNotEmpty(). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). @@ -278,15 +283,15 @@ func TestAcc_Tag_complete(t *testing.T) { HasComment("foo"). HasOwner(snowflakeroles.Accountadmin.Name()). HasOwnerRoleType("ROLE"), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "show_output.0.allowed_values.#", "3")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "show_output.0.allowed_values.*", "foo")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "show_output.0.allowed_values.*", "")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "show_output.0.allowed_values.*", "bar")), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "show_output.0.allowed_values.#", "3")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "show_output.0.allowed_values.*", "foo")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "show_output.0.allowed_values.*", "")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "show_output.0.allowed_values.*", "bar")), ), }, { - Config: config.FromModels(t, model), - ResourceName: model.ResourceReference(), + Config: config.FromModels(t, tagModel), + ResourceName: tagModel.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -295,11 +300,14 @@ func TestAcc_Tag_complete(t *testing.T) { } func TestAcc_Tag_Rename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + oldId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - modelWithOldId := model.Tag("test", oldId.DatabaseName(), oldId.Name(), oldId.SchemaName()) - modelWithNewId := model.Tag("test", newId.DatabaseName(), newId.Name(), newId.SchemaName()) + modelWithOldId := model.TagBase("test", oldId) + modelWithNewId := model.TagBase("test", newId) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -335,12 +343,14 @@ func TestAcc_Tag_Rename(t *testing.T) { } func TestAcc_Tag_migrateFromVersion_0_98_0(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - model := model.Tag("test", id.DatabaseName(), id.Name(), id.SchemaName()). + tagModel := model.TagBase("test", id). WithAllowedValuesValue(tfconfig.ListVariable(tfconfig.StringVariable("foo"), tfconfig.StringVariable("bar"))) resource.Test(t, resource.TestCase{ @@ -350,41 +360,40 @@ func TestAcc_Tag_migrateFromVersion_0_98_0(t *testing.T) { Steps: []resource.TestStep{ { ExternalProviders: acc.ExternalProviderWithExactVersion("0.98.0"), - Config: tag_v_0_98_0(id), - Check: assertThat(t, resourceassert.TagResource(t, model.ResourceReference()). + Config: tagV098(id), + Check: assertThat(t, resourceassert.TagResource(t, tagModel.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "allowed_values.#", "2")), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "allowed_values.0", "bar")), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "allowed_values.1", "foo")), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "allowed_values.#", "2")), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "allowed_values.0", "bar")), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "allowed_values.1", "foo")), ), }, { ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: config.FromModels(t, model), + Config: config.FromModels(t, tagModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(model.ResourceReference(), plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(tagModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, - Check: assertThat(t, resourceassert.TagResource(t, model.ResourceReference()). + Check: assertThat(t, resourceassert.TagResource(t, tagModel.ResourceReference()). HasNameString(id.Name()), - assert.Check(resource.TestCheckResourceAttr(model.ResourceReference(), "allowed_values.#", "2")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "allowed_values.*", "foo")), - assert.Check(resource.TestCheckTypeSetElemAttr(model.ResourceReference(), "allowed_values.*", "bar")), + assert.Check(resource.TestCheckResourceAttr(tagModel.ResourceReference(), "allowed_values.#", "2")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "allowed_values.*", "foo")), + assert.Check(resource.TestCheckTypeSetElemAttr(tagModel.ResourceReference(), "allowed_values.*", "bar")), ), }, }, }) } -func tag_v_0_98_0(id sdk.SchemaObjectIdentifier) string { - s := ` +func tagV098(id sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_tag" "test" { - name = "%[1]s" - database = "%[2]s" - schema = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" allowed_values = ["bar", "foo"] } -` - return fmt.Sprintf(s, id.Name(), id.DatabaseName(), id.SchemaName()) +`, id.DatabaseName(), id.SchemaName(), id.Name()) } From 60e3f13d443c8880c69dce59bfeb9167166670d4 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:20:07 +0200 Subject: [PATCH 20/30] Fix tag association resource acceptance test setup --- .../tag_association_acceptance_test.go | 463 +++++++++--------- .../TestAcc_TagAssociation/basic/test.tf | 14 - .../TestAcc_TagAssociation/basic/variables.tf | 19 - .../TestAcc_TagAssociation/column/test.tf | 25 - .../column/variables.tf | 23 - .../TestAcc_TagAssociation/issue1202/main.tf | 22 - .../issue1202/variables.tf | 15 - .../TestAcc_TagAssociation/issue1909/test.tf | 32 -- .../issue1909/variables.tf | 31 -- .../TestAcc_TagAssociation/issue1910/test.tf | 12 - .../issue1910/variables.tf | 15 - .../TestAcc_TagAssociation/schema/test.tf | 14 - .../schema/variables.tf | 15 - 13 files changed, 232 insertions(+), 468 deletions(-) delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/basic/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/basic/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/column/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/column/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1202/main.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1202/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1909/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1909/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1910/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/issue1910/variables.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/schema/test.tf delete mode 100644 pkg/resources/testdata/TestAcc_TagAssociation/schema/variables.tf diff --git a/pkg/resources/tag_association_acceptance_test.go b/pkg/resources/tag_association_acceptance_test.go index 453905a8e20..64b1f33762d 100644 --- a/pkg/resources/tag_association_acceptance_test.go +++ b/pkg/resources/tag_association_acceptance_test.go @@ -7,16 +7,16 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" - tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + accconfig "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/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "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/internal/provider" "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" @@ -25,21 +25,23 @@ import ( func TestAcc_TagAssociation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() tag2Id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() tagValue := "foo" tagValue2 := "bar" databaseId := acc.TestClient().Ids.DatabaseId() - resourceName := "snowflake_tag_association.test" - m := func(tagId sdk.SchemaObjectIdentifier, tagValue string) map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "tag_value": tfconfig.StringVariable(tagValue), - "database": tfconfig.StringVariable(databaseId.Name()), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - "database_fully_qualified_name": tfconfig.StringVariable(databaseId.FullyQualifiedName()), - } - } + + tag1Model := model.TagBase("test", tagId).WithAllowedValues("bar", "foo", "external") + tag2Model := model.TagBase("test", tag2Id).WithAllowedValues("bar", "foo", "external") + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{databaseId}, string(sdk.ObjectTypeDatabase), tagId.FullyQualifiedName(), tagValue). + WithDependsOn(tag1Model.ResourceReference()) + tagAssociationModelDifferentValue := model.TagAssociation("test", []sdk.ObjectIdentifier{databaseId}, string(sdk.ObjectTypeDatabase), tagId.FullyQualifiedName(), tagValue2). + WithDependsOn(tag1Model.ResourceReference()) + tagAssociationModelTag2 := model.TagAssociation("test", []sdk.ObjectIdentifier{databaseId}, string(sdk.ObjectTypeDatabase), tag2Id.FullyQualifiedName(), tagValue2). + WithDependsOn(tag2Model.ResourceReference()) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -49,15 +51,14 @@ func TestAcc_TagAssociation(t *testing.T) { CheckDestroy: acc.CheckResourceTagUnset(t), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ConfigVariables: m(tagId, tagValue), + Config: accconfig.FromModels(t, tag1Model, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, // external change - unset tag @@ -65,15 +66,14 @@ func TestAcc_TagAssociation(t *testing.T) { PreConfig: func() { acc.TestClient().Tag.Unset(t, sdk.ObjectTypeDatabase, databaseId, []sdk.ObjectIdentifier{tagId}) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ConfigVariables: m(tagId, tagValue), + Config: accconfig.FromModels(t, tag1Model, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, // external change - set a different value @@ -86,58 +86,54 @@ func TestAcc_TagAssociation(t *testing.T) { }, }) }, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ConfigVariables: m(tagId, tagValue), + Config: accconfig.FromModels(t, tag1Model, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, // change tag value { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ConfigVariables: m(tagId, tagValue2), + Config: accconfig.FromModels(t, tag1Model, tagAssociationModelDifferentValue), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(tagAssociationModelDifferentValue.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue2), + resource.TestCheckResourceAttr(tagAssociationModelDifferentValue.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModelDifferentValue.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModelDifferentValue.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModelDifferentValue.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelDifferentValue.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelDifferentValue.ResourceReference(), "tag_value", tagValue2), ), }, // change tag id { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ConfigVariables: m(tag2Id, tagValue2), + Config: accconfig.FromModels(t, tag2Model, tagAssociationModelTag2), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(tagAssociationModelTag2.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tag2Id.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tag2Id.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue2), - acc.CheckTagUnset(t, tagId, acc.TestClient().Ids.DatabaseId(), sdk.ObjectTypeDatabase), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "id", helpers.EncodeSnowflakeID(tag2Id.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModelTag2.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "tag_id", tag2Id.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "tag_value", tagValue2), + acc.CheckTagUnset(t, tagId, databaseId, sdk.ObjectTypeDatabase), ), }, { - ConfigVariables: m(tag2Id, tagValue2), - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/basic"), - ResourceName: resourceName, + Config: accconfig.FromModels(t, tag2Model, tagAssociationModelTag2), + ResourceName: tagAssociationModelTag2.ResourceReference(), ImportState: true, ImportStateVerify: true, // object_identifiers does not get set because during the import, the configuration is considered as empty @@ -147,12 +143,12 @@ func TestAcc_TagAssociation(t *testing.T) { { RefreshState: true, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tag2Id.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeDatabase)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tag2Id.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", tagValue2), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "id", helpers.EncodeSnowflakeID(tag2Id.FullyQualifiedName(), tagValue2, string(sdk.ObjectTypeDatabase))), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "object_type", string(sdk.ObjectTypeDatabase)), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModelTag2.ResourceReference(), "object_identifiers.*", acc.TestClient().Ids.DatabaseId().FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "tag_id", tag2Id.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModelTag2.ResourceReference(), "tag_value", tagValue2), ), }, }, @@ -186,7 +182,7 @@ func TestAcc_TagAssociation_objectIdentifiers(t *testing.T) { ), Steps: []resource.TestStep{ { - Config: config.FromModels(t, model12), + Config: accconfig.FromModels(t, model12), Check: assertThat(t, resourceassert.TagAssociationResource(t, model12.ResourceReference()). HasObjectTypeString(string(sdk.ObjectTypeDatabaseRole)). HasTagIdString(tag.ID().FullyQualifiedName()). @@ -197,7 +193,7 @@ func TestAcc_TagAssociation_objectIdentifiers(t *testing.T) { ), }, { - Config: config.FromModels(t, model123), + Config: accconfig.FromModels(t, model123), Check: assertThat(t, resourceassert.TagAssociationResource(t, model12.ResourceReference()). HasObjectTypeString(string(sdk.ObjectTypeDatabaseRole)). HasTagIdString(tag.ID().FullyQualifiedName()). @@ -209,7 +205,7 @@ func TestAcc_TagAssociation_objectIdentifiers(t *testing.T) { ), }, { - Config: config.FromModels(t, model13), + Config: accconfig.FromModels(t, model13), Check: assertThat(t, resourceassert.TagAssociationResource(t, model13.ResourceReference()). HasObjectTypeString(string(sdk.ObjectTypeDatabaseRole)). HasTagIdString(tag.ID().FullyQualifiedName()). @@ -248,7 +244,7 @@ func TestAcc_TagAssociation_objectType(t *testing.T) { ), Steps: []resource.TestStep{ { - Config: config.FromModels(t, baseModel), + Config: accconfig.FromModels(t, baseModel), Check: assertThat(t, resourceassert.TagAssociationResource(t, baseModel.ResourceReference()). HasObjectTypeString(string(sdk.ObjectTypeRole)). HasTagIdString(tag.ID().FullyQualifiedName()). @@ -257,7 +253,7 @@ func TestAcc_TagAssociation_objectType(t *testing.T) { ), }, { - Config: config.FromModels(t, modelWithDifferentObjectType), + Config: accconfig.FromModels(t, modelWithDifferentObjectType), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectResourceAction(modelWithDifferentObjectType.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), @@ -277,17 +273,16 @@ func TestAcc_TagAssociation_objectType(t *testing.T) { func TestAcc_TagAssociationSchema(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() schemaId := acc.TestClient().Ids.SchemaId() - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - "schema_fully_qualified_name": tfconfig.StringVariable(schemaId.FullyQualifiedName()), - } - } + tagValue := "TAG_VALUE" + + tagModel := model.TagBase("test", tagId) + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{schemaId}, string(sdk.ObjectTypeSchema), tagId.FullyQualifiedName(), tagValue). + WithDependsOn(tagModel.ResourceReference()) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -297,15 +292,14 @@ func TestAcc_TagAssociationSchema(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/schema"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagModel, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), "TAG_VALUE", string(sdk.ObjectTypeSchema))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeSchema)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", schemaId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "TAG_VALUE"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeSchema))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeSchema)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", schemaId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, }, @@ -319,10 +313,13 @@ func TestAcc_TagAssociation_lowercaseObjectType(t *testing.T) { tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) t.Cleanup(tagCleanup) + objectType := strings.ToLower(string(sdk.ObjectTypeSchema)) objectId := acc.TestClient().Ids.SchemaId() + tagValue := "TAG_VALUE" + + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{objectId}, objectType, tag.ID().FullyQualifiedName(), tagValue) - model := model.TagAssociation("test", []sdk.ObjectIdentifier{objectId}, objectType, tag.ID().FullyQualifiedName(), "foo") resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -332,13 +329,13 @@ func TestAcc_TagAssociation_lowercaseObjectType(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: config.FromModels(t, model), - Check: assertThat(t, resourceassert.TagAssociationResource(t, model.ResourceReference()). - HasIdString(helpers.EncodeSnowflakeID(tag.ID().FullyQualifiedName(), "foo", string(sdk.ObjectTypeSchema))). + Config: accconfig.FromModels(t, tagAssociationModel), + Check: assertThat(t, resourceassert.TagAssociationResource(t, tagAssociationModel.ResourceReference()). + HasIdString(helpers.EncodeSnowflakeID(tag.ID().FullyQualifiedName(), tagValue, string(sdk.ObjectTypeSchema))). HasObjectTypeString(string(sdk.ObjectTypeSchema)). HasTagIdString(tag.ID().FullyQualifiedName()). HasObjectIdentifiersLength(1). - HasTagValueString("foo"), + HasTagValueString(tagValue), ), }, }, @@ -347,21 +344,24 @@ func TestAcc_TagAssociation_lowercaseObjectType(t *testing.T) { func TestAcc_TagAssociationColumn(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tagCleanup) + + table, tableCleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ + *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), + *sdk.NewTableColumnRequest("TEST_COLUMN", sdk.DataTypeNumber), + }) + t.Cleanup(tableCleanup) + + tagId := tag.ID() + tableId := table.ID() + columnId := sdk.NewTableColumnIdentifier(tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), "TEST_COLUMN") + tagValue := "TAG_VALUE" + + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{columnId}, string(sdk.ObjectTypeColumn), tag.ID().FullyQualifiedName(), tagValue) - tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - columnId := sdk.NewTableColumnIdentifier(tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), "column") - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "table_name": tfconfig.StringVariable(tableId.Name()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - "column": tfconfig.StringVariable("column"), - "column_fully_qualified_name": tfconfig.StringVariable(columnId.FullyQualifiedName()), - } - } resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -371,15 +371,14 @@ func TestAcc_TagAssociationColumn(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/column"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), "TAG_VALUE", string(sdk.ObjectTypeColumn))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeColumn)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", columnId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "TAG_VALUE"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeColumn))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeColumn)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", columnId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, }, @@ -388,18 +387,20 @@ func TestAcc_TagAssociationColumn(t *testing.T) { func TestAcc_TagAssociationIssue1202(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tagCleanup) + + table, tableCleanup := acc.TestClient().Table.CreateWithPredefinedColumns(t) + t.Cleanup(tableCleanup) + + tagId := tag.ID() + tableId := table.ID() + tagValue := "v1" + + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{tableId}, string(sdk.ObjectTypeTable), tag.ID().FullyQualifiedName(), tagValue) - tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - tableName := acc.TestClient().Ids.Alpha() - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "table_name": tfconfig.StringVariable(tableName), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - } - } resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -409,12 +410,11 @@ func TestAcc_TagAssociationIssue1202(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/issue1202"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "object_type", "TABLE"), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "v1"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", "TABLE"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", "v1"), ), }, }, @@ -423,25 +423,32 @@ func TestAcc_TagAssociationIssue1202(t *testing.T) { func TestAcc_TagAssociationIssue1909(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tagCleanup) + + table, tableCleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ + *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), + *sdk.NewTableColumnRequest(`"test.column"`, sdk.DataTypeNumber), + }) + t.Cleanup(tableCleanup) + + table2, table2Cleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ + *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), + *sdk.NewTableColumnRequest(`"test.column"`, sdk.DataTypeNumber), + }) + t.Cleanup(table2Cleanup) + + tagId := tag.ID() + tableId := table.ID() + table2Id := table2.ID() + columnId := sdk.NewTableColumnIdentifier(tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), "test.column") + column2Id := sdk.NewTableColumnIdentifier(table2Id.DatabaseName(), table2Id.SchemaName(), table2Id.Name(), "test.column") + tagValue := "v1" + + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{columnId, column2Id}, string(sdk.ObjectTypeColumn), tag.ID().FullyQualifiedName(), tagValue) - tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - tableId1 := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - tableId2 := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - columnId1 := sdk.NewTableColumnIdentifier(tableId1.DatabaseName(), tableId1.SchemaName(), tableId1.Name(), "test.column") - columnId2 := sdk.NewTableColumnIdentifier(tableId2.DatabaseName(), tableId2.SchemaName(), tableId2.Name(), "test.column") - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "table_name": tfconfig.StringVariable(tableId1.Name()), - "table_name2": tfconfig.StringVariable(tableId2.Name()), - "column_name": tfconfig.StringVariable("test.column"), - "column_fully_qualified_name": tfconfig.StringVariable(columnId1.FullyQualifiedName()), - "column2_fully_qualified_name": tfconfig.StringVariable(columnId2.FullyQualifiedName()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - } - } resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -451,14 +458,13 @@ func TestAcc_TagAssociationIssue1909(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/issue1909"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeColumn)), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "v1"), - testAccCheckTableColumnTagAssociation(tagId, columnId1, "v1"), - testAccCheckTableColumnTagAssociation(tagId, columnId2, "v1"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeColumn)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), + testAccCheckTableColumnTagAssociation(tagId, columnId, tagValue), + testAccCheckTableColumnTagAssociation(tagId, column2Id, tagValue), ), }, }, @@ -487,18 +493,15 @@ func testAccCheckTableColumnTagAssociation(tagID sdk.SchemaObjectIdentifier, obj func TestAcc_TagAssociationAccountIssues1910(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() accountId := acc.TestClient().Context.CurrentAccountIdentifier(t) - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "account_fully_qualified_name": tfconfig.StringVariable(accountId.FullyQualifiedName()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - } - } + tagValue := "v1" + + tagModel := model.TagBase("test", tagId) + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{accountId}, string(sdk.ObjectTypeAccount), tagId.FullyQualifiedName(), tagValue). + WithDependsOn(tagModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -509,14 +512,13 @@ func TestAcc_TagAssociationAccountIssues1910(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/issue1910"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagModel, tagAssociationModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeAccount)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", accountId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "v1"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeAccount)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", accountId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, }, @@ -525,33 +527,37 @@ func TestAcc_TagAssociationAccountIssues1910(t *testing.T) { func TestAcc_TagAssociationIssue1926(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() tableId1 := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + tableId2 := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix("table.test") columnId1 := sdk.NewTableColumnIdentifier(tableId1.DatabaseName(), tableId1.SchemaName(), tableId1.Name(), "init") - resourceName := "snowflake_tag_association.test" - m := func() map[string]tfconfig.Variable { - return map[string]tfconfig.Variable{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "table_name": tfconfig.StringVariable(tableId1.Name()), - "column_name": tfconfig.StringVariable(columnId1.Name()), - "column_fully_qualified_name": tfconfig.StringVariable(columnId1.FullyQualifiedName()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), + columnId2 := sdk.NewTableColumnIdentifier(tableId2.DatabaseName(), tableId2.SchemaName(), tableId2.Name(), "column") + columnId3 := sdk.NewTableColumnIdentifier(tableId2.DatabaseName(), tableId2.SchemaName(), tableId2.Name(), "column.test") + + m := func() map[string]config.Variable { + return map[string]config.Variable{ + "tag_name": config.StringVariable(tagId.Name()), + "table_name": config.StringVariable(tableId1.Name()), + "column_name": config.StringVariable(columnId1.Name()), + "column_fully_qualified_name": config.StringVariable(columnId1.FullyQualifiedName()), + "database": config.StringVariable(acc.TestDatabaseName), + "schema": config.StringVariable(acc.TestSchemaName), } } m2 := m() - tableId2 := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix("table.test") - columnId2 := sdk.NewTableColumnIdentifier(tableId2.DatabaseName(), tableId2.SchemaName(), tableId2.Name(), "column") - columnId3 := sdk.NewTableColumnIdentifier(tableId2.DatabaseName(), tableId2.SchemaName(), tableId2.Name(), "column.test") - m2["table_name"] = tfconfig.StringVariable(tableId2.Name()) - m2["column_name"] = tfconfig.StringVariable(columnId2.Name()) - m2["column_fully_qualified_name"] = tfconfig.StringVariable(columnId2.FullyQualifiedName()) + m2["table_name"] = config.StringVariable(tableId2.Name()) + m2["column_name"] = config.StringVariable(columnId2.Name()) + m2["column_fully_qualified_name"] = config.StringVariable(columnId2.FullyQualifiedName()) + m3 := m() - m3["table_name"] = tfconfig.StringVariable(tableId2.Name()) - m3["column_name"] = tfconfig.StringVariable(columnId3.Name()) - m3["column_fully_qualified_name"] = tfconfig.StringVariable(columnId3.FullyQualifiedName()) + m3["table_name"] = config.StringVariable(tableId2.Name()) + m3["column_name"] = config.StringVariable(columnId3.Name()) + m3["column_fully_qualified_name"] = config.StringVariable(columnId3.FullyQualifiedName()) + + resourceName := "snowflake_tag_association.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -601,21 +607,18 @@ func TestAcc_TagAssociationIssue1926(t *testing.T) { } func TestAcc_TagAssociation_migrateFromVersion_0_98_0(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") + tagId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_tag_association.test" schemaId := acc.TestClient().Ids.SchemaId() + tagValue := "TAG_VALUE" - m := func() tfconfig.Variables { - return tfconfig.Variables{ - "tag_name": tfconfig.StringVariable(tagId.Name()), - "database": tfconfig.StringVariable(acc.TestDatabaseName), - "schema": tfconfig.StringVariable(acc.TestSchemaName), - "schema_fully_qualified_name": tfconfig.StringVariable(schemaId.FullyQualifiedName()), - } - } + tagModel := model.TagBase("test", tagId) + tagAssociationModel := model.TagAssociation("test", []sdk.ObjectIdentifier{schemaId}, string(sdk.ObjectTypeSchema), tagId.FullyQualifiedName(), tagValue). + WithDependsOn(tagModel.ResourceReference()) resource.Test(t, resource.TestCase{ TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -625,60 +628,58 @@ func TestAcc_TagAssociation_migrateFromVersion_0_98_0(t *testing.T) { Steps: []resource.TestStep{ { ExternalProviders: acc.ExternalProviderWithExactVersion("0.98.0"), - Config: tagAssociation_v_0_98_0(tagId, "TAG_VALUE", sdk.ObjectTypeSchema, schemaId), + Config: tagAssociationV098(tagId, tagValue, schemaId), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.DatabaseName(), tagId.SchemaName(), tagId.Name())), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeSchema)), - resource.TestCheckResourceAttr(resourceName, "object_identifier.#", "1"), - resource.TestCheckResourceAttr(resourceName, "object_identifier.0.name", schemaId.Name()), - resource.TestCheckResourceAttr(resourceName, "object_identifier.0.database", schemaId.DatabaseName()), - resource.TestCheckResourceAttr(resourceName, "object_identifier.0.schema", ""), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "TAG_VALUE"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.DatabaseName(), tagId.SchemaName(), tagId.Name())), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeSchema)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifier.#", "1"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifier.0.name", schemaId.Name()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifier.0.database", schemaId.DatabaseName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifier.0.schema", ""), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, { ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_TagAssociation/schema"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, tagModel, tagAssociationModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(tagAssociationModel.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(tagAssociationModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(resourceName, "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), "TAG_VALUE", string(sdk.ObjectTypeSchema))), - resource.TestCheckResourceAttr(resourceName, "object_type", string(sdk.ObjectTypeSchema)), - resource.TestCheckResourceAttr(resourceName, "object_identifiers.#", "1"), - resource.TestCheckTypeSetElemAttr(resourceName, "object_identifiers.*", schemaId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_id", tagId.FullyQualifiedName()), - resource.TestCheckResourceAttr(resourceName, "tag_value", "TAG_VALUE"), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "id", helpers.EncodeSnowflakeID(tagId.FullyQualifiedName(), tagValue, string(sdk.ObjectTypeSchema))), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_type", string(sdk.ObjectTypeSchema)), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "object_identifiers.#", "1"), + resource.TestCheckTypeSetElemAttr(tagAssociationModel.ResourceReference(), "object_identifiers.*", schemaId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_id", tagId.FullyQualifiedName()), + resource.TestCheckResourceAttr(tagAssociationModel.ResourceReference(), "tag_value", tagValue), ), }, }, }) } -func tagAssociation_v_0_98_0(tagId sdk.SchemaObjectIdentifier, tagValue string, objectType sdk.ObjectType, objectId sdk.DatabaseObjectIdentifier) string { - s := ` +func tagAssociationV098(tagId sdk.SchemaObjectIdentifier, tagValue string, schemaId sdk.DatabaseObjectIdentifier) string { + return fmt.Sprintf(` +resource "snowflake_tag" "test" { + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" +} + resource "snowflake_tag_association" "test" { tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "%[1]s" - object_type = "%[2]s" + tag_value = "%[4]s" + object_type = "%[5]s" object_identifier { - name = "%[3]s" - database = "%[4]s" + database = "%[6]s" + name = "%[7]s" } } - -resource "snowflake_tag" "test" { - name = "%[5]s" - database = "%[6]s" - schema = "%[7]s" -} -` - return fmt.Sprintf(s, tagValue, objectType, objectId.Name(), objectId.DatabaseName(), tagId.Name(), tagId.DatabaseName(), tagId.SchemaName()) +`, tagId.DatabaseName(), tagId.SchemaName(), tagId.Name(), tagValue, sdk.ObjectTypeSchema, schemaId.DatabaseName(), schemaId.Name()) } diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/basic/test.tf b/pkg/resources/testdata/TestAcc_TagAssociation/basic/test.tf deleted file mode 100644 index 69d7ab11728..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/basic/test.tf +++ /dev/null @@ -1,14 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema - allowed_values = ["bar", "foo", "external"] - comment = "Terraform acceptance test" -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [var.database_fully_qualified_name] - object_type = "DATABASE" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = var.tag_value -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/basic/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/basic/variables.tf deleted file mode 100644 index 10ad6541562..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/basic/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "database_fully_qualified_name" { - type = string -} - -variable "tag_value" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/column/test.tf b/pkg/resources/testdata/TestAcc_TagAssociation/column/test.tf deleted file mode 100644 index fea0c221206..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/column/test.tf +++ /dev/null @@ -1,25 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema -} - -resource "snowflake_table" "test" { - name = var.table_name - database = var.database - schema = var.schema - - column { - name = var.column - type = "VARIANT" - } -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [var.column_fully_qualified_name] - - object_type = "COLUMN" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "TAG_VALUE" - depends_on = [snowflake_table.test] -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/column/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/column/variables.tf deleted file mode 100644 index 87075328413..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/column/variables.tf +++ /dev/null @@ -1,23 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "table_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "column" { - type = string -} - -variable "column_fully_qualified_name" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/main.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/main.tf deleted file mode 100644 index dd81b42a820..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/main.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema -} - -resource "snowflake_table" "test" { - name = var.table_name - database = var.database - schema = var.schema - column { - name = "test_column" - type = "VARIANT" - } -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [snowflake_table.test.fully_qualified_name] - object_type = "TABLE" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "v1" -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/variables.tf deleted file mode 100644 index bf4d1ec509b..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1202/variables.tf +++ /dev/null @@ -1,15 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "table_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/test.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/test.tf deleted file mode 100644 index 519df8f05e2..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/test.tf +++ /dev/null @@ -1,32 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema -} - -resource "snowflake_table" "test" { - name = var.table_name - database = var.database - schema = var.schema - column { - name = var.column_name - type = "VARIANT" - } -} -resource "snowflake_table" "test2" { - name = var.table_name2 - database = var.database - schema = var.schema - column { - name = var.column_name - type = "VARIANT" - } -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [var.column_fully_qualified_name, var.column2_fully_qualified_name] - object_type = "COLUMN" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "v1" - depends_on = [snowflake_table.test, snowflake_table.test2] -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/variables.tf deleted file mode 100644 index ff458128151..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1909/variables.tf +++ /dev/null @@ -1,31 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "table_name" { - type = string -} - -variable "table_name2" { - type = string -} - -variable "column_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "column_fully_qualified_name" { - type = string -} - -variable "column2_fully_qualified_name" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/test.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/test.tf deleted file mode 100644 index 8f5408595eb..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/test.tf +++ /dev/null @@ -1,12 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [var.account_fully_qualified_name] - object_type = "ACCOUNT" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "v1" -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/variables.tf deleted file mode 100644 index e7f2ec926ac..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/issue1910/variables.tf +++ /dev/null @@ -1,15 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "account_fully_qualified_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/schema/test.tf b/pkg/resources/testdata/TestAcc_TagAssociation/schema/test.tf deleted file mode 100644 index ba06156efc9..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/schema/test.tf +++ /dev/null @@ -1,14 +0,0 @@ -resource "snowflake_tag" "test" { - name = var.tag_name - database = var.database - schema = var.schema - allowed_values = [] -} - -resource "snowflake_tag_association" "test" { - object_identifiers = [var.schema_fully_qualified_name] - - object_type = "SCHEMA" - tag_id = snowflake_tag.test.fully_qualified_name - tag_value = "TAG_VALUE" -} diff --git a/pkg/resources/testdata/TestAcc_TagAssociation/schema/variables.tf b/pkg/resources/testdata/TestAcc_TagAssociation/schema/variables.tf deleted file mode 100644 index aa9cba36795..00000000000 --- a/pkg/resources/testdata/TestAcc_TagAssociation/schema/variables.tf +++ /dev/null @@ -1,15 +0,0 @@ -variable "tag_name" { - type = string -} - -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "schema_fully_qualified_name" { - type = string -} From 05dbd4c8f1029ad86dbede0b5ccd2ef5cd9fb645 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:32:57 +0200 Subject: [PATCH 21/30] Verify task association resource acceptance test setup --- pkg/resources/task_acceptance_test.go | 42 +++++++++++++++++---------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/pkg/resources/task_acceptance_test.go b/pkg/resources/task_acceptance_test.go index cbd3f71d9b6..057ae356ba9 100644 --- a/pkg/resources/task_acceptance_test.go +++ b/pkg/resources/task_acceptance_test.go @@ -38,6 +38,7 @@ func TestAcc_Task_Basic(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT 1" + configModel := model.TaskWithId("test", id, false, statement) resource.Test(t, resource.TestCase{ @@ -828,6 +829,7 @@ func TestAcc_Task_CallingProcedure(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := fmt.Sprintf("call %s(123)", procedure.Name) + configModel := model.TaskWithId("test", id, false, statement).WithUserTaskManagedInitialWarehouseSizeEnum(sdk.WarehouseSizeXSmall) resource.Test(t, resource.TestCase{ @@ -871,6 +873,7 @@ func TestAcc_Task_CronAndMinutes(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() minutes := 5 cron := "*/5 * * * * UTC" + configModelWithoutSchedule := model.TaskWithId("test", id, false, "SELECT 1") configModelWithMinutes := model.TaskWithId("test", id, true, "SELECT 1").WithScheduleMinutes(minutes) configModelWithCron := model.TaskWithId("test", id, true, "SELECT 1").WithScheduleCron(cron) @@ -1008,6 +1011,7 @@ func TestAcc_Task_CronAndMinutes_ExternalChanges(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() minutes := 5 cron := "*/5 * * * * UTC" + configModelWithoutSchedule := model.TaskWithId("test", id, false, "SELECT 1") configModelWithMinutes := model.TaskWithId("test", id, false, "SELECT 1").WithScheduleMinutes(minutes) configModelWithCron := model.TaskWithId("test", id, false, "SELECT 1").WithScheduleCron(cron) @@ -1154,6 +1158,7 @@ func TestAcc_Task_CronAndMinutes_ExternalChanges(t *testing.T) { func TestAcc_Task_ScheduleSchemaValidation(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() @@ -1206,6 +1211,7 @@ func TestAcc_Task_AllParameters(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT 1" + configModel := model.TaskWithId("test", id, true, statement). WithScheduleMinutes(5) configModelWithAllParametersSet := model.TaskWithId("test", id, true, statement). @@ -1511,6 +1517,7 @@ func TestAcc_Task_Enabled(t *testing.T) { id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT 1" + configModelEnabled := model.TaskWithId("test", id, true, statement). WithScheduleMinutes(5) configModelDisabled := model.TaskWithId("test", id, false, statement). @@ -1762,6 +1769,9 @@ func TestAcc_Task_ConvertStandaloneTaskToFinalizer(t *testing.T) { } func TestAcc_Task_SwitchScheduledWithAfter(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + rootId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() childId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT 1" @@ -2409,8 +2419,8 @@ func TestAcc_Task_StateUpgrade_NoOptionalFields(t *testing.T) { }, Config: taskNoOptionalFieldsConfigV0980(id), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_task.test", "enabled", "false"), - resource.TestCheckResourceAttr("snowflake_task.test", "allow_overlapping_execution", "false"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "enabled", "false"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "allow_overlapping_execution", "false"), ), }, { @@ -2461,12 +2471,12 @@ func TestAcc_Task_StateUpgrade(t *testing.T) { }, Config: taskBasicConfigV0980(id, condition), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_task.test", "enabled", "false"), - resource.TestCheckResourceAttr("snowflake_task.test", "allow_overlapping_execution", "true"), - resource.TestCheckResourceAttr("snowflake_task.test", "schedule", "5 MINUTES"), - resource.TestCheckResourceAttr("snowflake_task.test", "suspend_task_after_num_failures", "10"), - resource.TestCheckResourceAttr("snowflake_task.test", "when", condition), - resource.TestCheckResourceAttr("snowflake_task.test", "user_task_managed_initial_warehouse_size", "XSMALL"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "enabled", "false"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "allow_overlapping_execution", "true"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "schedule", "5 MINUTES"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "suspend_task_after_num_failures", "10"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "when", condition), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "user_task_managed_initial_warehouse_size", "XSMALL"), ), }, { @@ -2526,14 +2536,14 @@ func TestAcc_Task_StateUpgradeWithAfter(t *testing.T) { }, Config: taskCompleteConfigV0980(id, rootTask.ID(), acc.TestClient().Ids.WarehouseId(), 50, comment), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_task.test", "after.#", "1"), - resource.TestCheckResourceAttr("snowflake_task.test", "after.0", rootTask.ID().Name()), - resource.TestCheckResourceAttr("snowflake_task.test", "warehouse", acc.TestClient().Ids.WarehouseId().Name()), - resource.TestCheckResourceAttr("snowflake_task.test", "user_task_timeout_ms", "50"), - resource.TestCheckResourceAttr("snowflake_task.test", "comment", comment), - resource.TestCheckResourceAttr("snowflake_task.test", "session_parameters.LOG_LEVEL", "INFO"), - resource.TestCheckResourceAttr("snowflake_task.test", "session_parameters.AUTOCOMMIT", "false"), - resource.TestCheckResourceAttr("snowflake_task.test", "session_parameters.JSON_INDENT", "4"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "after.#", "1"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "after.0", rootTask.ID().Name()), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "warehouse", acc.TestClient().Ids.WarehouseId().Name()), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "user_task_timeout_ms", "50"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "comment", comment), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "session_parameters.LOG_LEVEL", "INFO"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "session_parameters.AUTOCOMMIT", "false"), + resource.TestCheckResourceAttr(configModel.ResourceReference(), "session_parameters.JSON_INDENT", "4"), ), }, { From f5bfe7de54f3eab463a7e3334a9eeb871fad686e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:39:39 +0200 Subject: [PATCH 22/30] Verify user resource acceptance test setup --- pkg/resources/user_acceptance_test.go | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pkg/resources/user_acceptance_test.go b/pkg/resources/user_acceptance_test.go index 6f57af21f7e..73e857ec671 100644 --- a/pkg/resources/user_acceptance_test.go +++ b/pkg/resources/user_acceptance_test.go @@ -30,6 +30,9 @@ import ( ) func TestAcc_User_BasicFlows(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() id2 := acc.TestClient().Ids.RandomAccountObjectIdentifier() @@ -287,6 +290,9 @@ func TestAcc_User_BasicFlows(t *testing.T) { // proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2353 has been fixed // done on user, to not interfere with other parallel tests on the same account func TestAcc_User_RemovedOutsideOfTerraform(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModel := model.User("u", userId.Name()) @@ -334,6 +340,9 @@ func TestAcc_User_RemovedOutsideOfTerraform(t *testing.T) { // The problem was with a dot in user identifier. // Before the fix it results in panic: interface conversion: sdk.ObjectIdentifier is sdk.DatabaseObjectIdentifier, not sdk.AccountObjectIdentifier error. func TestAcc_User_issue2058(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifierContaining(".") userModel1 := model.User("w", userId.Name()) @@ -660,6 +669,9 @@ func TestAcc_User_AllParameters(t *testing.T) { } func TestAcc_User_issue2836(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() defaultRole := "SOME ROLE WITH SPACE case sensitive" defaultRoleQuoted := fmt.Sprintf(`"%s"`, defaultRole) @@ -687,6 +699,9 @@ func TestAcc_User_issue2836(t *testing.T) { } func TestAcc_User_issue2970(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() pass := random.Password() key, _ := random.GenerateRSAPublicKey(t) @@ -753,6 +768,9 @@ func TestAcc_User_issue2970(t *testing.T) { } func TestAcc_User_issue1572(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModel := model.UserWithDefaultMeta(userId.Name()) @@ -796,6 +814,9 @@ func TestAcc_User_issue1572(t *testing.T) { } func TestAcc_User_issue1535_withNullPassword(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() pass := random.Password() @@ -837,6 +858,9 @@ func TestAcc_User_issue1535_withNullPassword(t *testing.T) { } func TestAcc_User_issue1535_withRemovedPassword(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() pass := random.Password() @@ -877,6 +901,9 @@ func TestAcc_User_issue1535_withRemovedPassword(t *testing.T) { } func TestAcc_User_issue1155_handleChangesToDaysToExpiry(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModelWithoutDaysToExpiry := model.UserWithDefaultMeta(userId.Name()) @@ -976,6 +1003,9 @@ func TestAcc_User_issue1155_handleChangesToDaysToExpiry(t *testing.T) { } func TestAcc_User_handleExternalTypeChange(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModel := model.UserWithDefaultMeta(userId.Name()) @@ -1052,6 +1082,9 @@ func TestAcc_User_handleExternalTypeChange(t *testing.T) { func TestAcc_User_handleChangesToDefaultSecondaryRoles(t *testing.T) { t.Skip("Ordering needs to be changed after BCR 2024_08 general availability.") + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModelEmpty := model.UserWithDefaultMeta(userId.Name()) @@ -1344,6 +1377,9 @@ func TestAcc_User_handleChangesToDefaultSecondaryRoles_bcr202408(t *testing.T) { } func TestAcc_User_migrateFromVersion094_defaultSecondaryRolesSet(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModelWithOptionAll := model.UserWithDefaultMeta(id.Name()).WithDefaultSecondaryRolesOptionEnum(sdk.SecondaryRolesOptionAll) @@ -1396,6 +1432,9 @@ resource "snowflake_user" "test" { } func TestAcc_User_ParameterValidationsAndDiffSuppressions(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() userModel := model.User("w", id.Name()). @@ -1433,6 +1472,9 @@ func TestAcc_User_ParameterValidationsAndDiffSuppressions(t *testing.T) { } func TestAcc_User_LoginNameAndDisplayName(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() newId := acc.TestClient().Ids.RandomAccountObjectIdentifier() From db07656b567fd262256ca224c25eca9a4d2aeff1 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:43:32 +0200 Subject: [PATCH 23/30] Verify user authentication policy attachment resource acceptance test setup --- ...ation_policy_attachment_acceptance_test.go | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/pkg/resources/user_authentication_policy_attachment_acceptance_test.go b/pkg/resources/user_authentication_policy_attachment_acceptance_test.go index 99222e2179f..53f46e33987 100644 --- a/pkg/resources/user_authentication_policy_attachment_acceptance_test.go +++ b/pkg/resources/user_authentication_policy_attachment_acceptance_test.go @@ -6,20 +6,22 @@ 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/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) func TestAcc_UserAuthenticationPolicyAttachment(t *testing.T) { // TODO [SNOW-1423486]: unskip t.Skipf("Skip because error %s; will be fixed in SNOW-1423486", "Error: 000606 (57P03): No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command.") + + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - userName := userId.Name() newUserId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - newUserName := newUserId.Name() authenticationPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - authenticationPolicyName := authenticationPolicyId.Name() newAuthenticationPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - newAuthenticationPolicyName := newAuthenticationPolicyId.Name() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -28,18 +30,18 @@ func TestAcc_UserAuthenticationPolicyAttachment(t *testing.T) { Steps: []resource.TestStep{ // CREATE { - Config: userAuthenticationPolicyAttachmentConfig(userName, acc.TestDatabaseName, acc.TestSchemaName, authenticationPolicyName), + Config: userAuthenticationPolicyAttachmentConfig(userId, authenticationPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "user_name", userName), + resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "user_name", userId.Name()), resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "authentication_policy_name", authenticationPolicyId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "id", fmt.Sprintf("%s|%s", userId.FullyQualifiedName(), authenticationPolicyId.FullyQualifiedName())), ), }, // UPDATE { - Config: userAuthenticationPolicyAttachmentConfig(newUserName, acc.TestDatabaseName, acc.TestSchemaName, newAuthenticationPolicyName), + Config: userAuthenticationPolicyAttachmentConfig(newUserId, newAuthenticationPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "user_name", newUserName), + resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "user_name", newUserId.Name()), resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "authentication_policy_name", newAuthenticationPolicyId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_user_authentication_policy_attachment.ppa", "id", fmt.Sprintf("%s|%s", userId.FullyQualifiedName(), newAuthenticationPolicyId.FullyQualifiedName())), ), @@ -54,21 +56,21 @@ func TestAcc_UserAuthenticationPolicyAttachment(t *testing.T) { }) } -func userAuthenticationPolicyAttachmentConfig(userName, databaseName, schemaName, authenticationPolicyName string) string { +func userAuthenticationPolicyAttachmentConfig(userId sdk.AccountObjectIdentifier, authenticationPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_user" "user" { - name = "%s" + name = "%[1]s" } resource "snowflake_authentication_policy" "ap" { - database = "%s" - schema = "%s" - name = "%s" + database = "%[2]s" + schema = "%[3]s" + name = "%[4]s" } resource "snowflake_user_authentication_policy_attachment" "apa" { authentication_policy_name = snowflake_authentication_policy.ap.fully_qualified_name user_name = snowflake_user.user.name } -`, userName, databaseName, schemaName, authenticationPolicyName) +`, userId.Name(), authenticationPolicyId.DatabaseName(), authenticationPolicyId.SchemaName(), authenticationPolicyId.Name()) } From e3bdd3a356db68cdb12f74b4a57d086edddaa840 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:49:48 +0200 Subject: [PATCH 24/30] Verify user password policy attachment resource acceptance test setup --- ...sword_policy_attachment_acceptance_test.go | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/pkg/resources/user_password_policy_attachment_acceptance_test.go b/pkg/resources/user_password_policy_attachment_acceptance_test.go index fbd5d8b8ed2..66d72868412 100644 --- a/pkg/resources/user_password_policy_attachment_acceptance_test.go +++ b/pkg/resources/user_password_policy_attachment_acceptance_test.go @@ -7,23 +7,21 @@ 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/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // TODO [SNOW-1423486]: Fix using warehouse; remove unsetting testenvs.ConfigureClientOnce func TestAcc_UserPasswordPolicyAttachment(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - userName := userId.Name() newUserId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - newUserName := newUserId.Name() passwordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - passwordPolicyName := passwordPolicyId.Name() newPasswordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - newPasswordPolicyName := newPasswordPolicyId.Name() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -32,18 +30,18 @@ func TestAcc_UserPasswordPolicyAttachment(t *testing.T) { Steps: []resource.TestStep{ // CREATE { - Config: userPasswordPolicyAttachmentConfig(userName, acc.TestDatabaseName, acc.TestSchemaName, passwordPolicyName), + Config: userPasswordPolicyAttachmentConfig(userId, passwordPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", userName), + resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", userId.Name()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "password_policy_name", passwordPolicyId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "id", fmt.Sprintf("%s|%s", userId.FullyQualifiedName(), passwordPolicyId.FullyQualifiedName())), ), }, // UPDATE { - Config: userPasswordPolicyAttachmentConfig(newUserName, acc.TestDatabaseName, acc.TestSchemaName, newPasswordPolicyName), + Config: userPasswordPolicyAttachmentConfig(newUserId, newPasswordPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", newUserName), + resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", newUserId.Name()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "password_policy_name", newPasswordPolicyId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "id", fmt.Sprintf("%s|%s", newUserId.FullyQualifiedName(), newPasswordPolicyId.FullyQualifiedName())), ), @@ -65,10 +63,11 @@ func TestAcc_UserPasswordPolicyAttachment(t *testing.T) { // The behavior was fixed in https://github.com/Snowflake-Labs/terraform-provider-snowflake/pull/2627 // so the problem should not occur in the newest provider versions. func TestAcc_UserPasswordPolicyAttachment_gh3005(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - userName := userId.Name() passwordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - passwordPolicyName := passwordPolicyId.Name() resource.Test(t, resource.TestCase{ ExternalProviders: map[string]resource.ExternalProvider{ @@ -83,9 +82,9 @@ func TestAcc_UserPasswordPolicyAttachment_gh3005(t *testing.T) { // CREATE { PreConfig: func() { acc.SetV097CompatibleConfigPathEnv(t) }, - Config: userPasswordPolicyAttachmentConfigV087(userName, acc.TestDatabaseName, acc.TestSchemaName, passwordPolicyName), + Config: userPasswordPolicyAttachmentConfigV087(userId, passwordPolicyId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", userName), + resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "user_name", userId.Name()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "password_policy_name", passwordPolicyId.FullyQualifiedName()), resource.TestCheckResourceAttr("snowflake_user_password_policy_attachment.ppa", "id", fmt.Sprintf("%s|%s", userId.FullyQualifiedName(), passwordPolicyId.FullyQualifiedName())), ), @@ -100,26 +99,26 @@ func TestAcc_UserPasswordPolicyAttachment_gh3005(t *testing.T) { }) } -func userPasswordPolicyAttachmentConfig(userName, databaseName, schemaName, passwordPolicyName string) string { +func userPasswordPolicyAttachmentConfig(userId sdk.AccountObjectIdentifier, passwordPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_user" "user" { - name = "%s" + name = "%[1]s" } resource "snowflake_password_policy" "pp" { - database = "%s" - schema = "%s" - name = "%s" + database = "%[2]s" + schema = "%[3]s" + name = "%[4]s" } resource "snowflake_user_password_policy_attachment" "ppa" { password_policy_name = snowflake_password_policy.pp.fully_qualified_name user_name = snowflake_user.user.name } -`, userName, databaseName, schemaName, passwordPolicyName) +`, userId.Name(), passwordPolicyId.DatabaseName(), passwordPolicyId.SchemaName(), passwordPolicyId.Name()) } -func userPasswordPolicyAttachmentConfigV087(userName, databaseName, schemaName, passwordPolicyName string) string { +func userPasswordPolicyAttachmentConfigV087(userId sdk.AccountObjectIdentifier, passwordPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource "snowflake_user" "user" { name = "%[1]s" @@ -137,5 +136,5 @@ resource "snowflake_user_password_policy_attachment" "ppa" { password_policy_name = "\"%[2]s\".\"%[3]s\".\"%[4]s\"" user_name = snowflake_user.user.name } -`, userName, databaseName, schemaName, passwordPolicyName) +`, userId.Name(), passwordPolicyId.DatabaseName(), passwordPolicyId.SchemaName(), passwordPolicyId.Name()) } From 7a4e36dee59339e2b6850342b14e72c7284565ed Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:53:02 +0200 Subject: [PATCH 25/30] Create users using helper instead of through tf --- ...ation_policy_attachment_acceptance_test.go | 16 ++++++----- ...sword_policy_attachment_acceptance_test.go | 28 +++++++++---------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/pkg/resources/user_authentication_policy_attachment_acceptance_test.go b/pkg/resources/user_authentication_policy_attachment_acceptance_test.go index 53f46e33987..8ff96f20d60 100644 --- a/pkg/resources/user_authentication_policy_attachment_acceptance_test.go +++ b/pkg/resources/user_authentication_policy_attachment_acceptance_test.go @@ -18,8 +18,14 @@ func TestAcc_UserAuthenticationPolicyAttachment(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - newUserId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + user1, user1Cleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(user1Cleanup) + + user2, user2Cleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(user2Cleanup) + + userId := user1.ID() + newUserId := user2.ID() authenticationPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newAuthenticationPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() @@ -58,10 +64,6 @@ func TestAcc_UserAuthenticationPolicyAttachment(t *testing.T) { func userAuthenticationPolicyAttachmentConfig(userId sdk.AccountObjectIdentifier, authenticationPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` -resource "snowflake_user" "user" { - name = "%[1]s" -} - resource "snowflake_authentication_policy" "ap" { database = "%[2]s" schema = "%[3]s" @@ -70,7 +72,7 @@ resource "snowflake_authentication_policy" "ap" { resource "snowflake_user_authentication_policy_attachment" "apa" { authentication_policy_name = snowflake_authentication_policy.ap.fully_qualified_name - user_name = snowflake_user.user.name + user_name = "%[1]s" } `, userId.Name(), authenticationPolicyId.DatabaseName(), authenticationPolicyId.SchemaName(), authenticationPolicyId.Name()) } diff --git a/pkg/resources/user_password_policy_attachment_acceptance_test.go b/pkg/resources/user_password_policy_attachment_acceptance_test.go index 66d72868412..fd49e01487f 100644 --- a/pkg/resources/user_password_policy_attachment_acceptance_test.go +++ b/pkg/resources/user_password_policy_attachment_acceptance_test.go @@ -18,8 +18,14 @@ func TestAcc_UserPasswordPolicyAttachment(t *testing.T) { t.Setenv(string(testenvs.ConfigureClientOnce), "") - userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() - newUserId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + user1, user1Cleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(user1Cleanup) + + user2, user2Cleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(user2Cleanup) + + userId := user1.ID() + newUserId := user2.ID() passwordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newPasswordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() @@ -66,7 +72,10 @@ func TestAcc_UserPasswordPolicyAttachment_gh3005(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + user, userCleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(userCleanup) + + userId := user.ID() passwordPolicyId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ @@ -101,10 +110,6 @@ func TestAcc_UserPasswordPolicyAttachment_gh3005(t *testing.T) { func userPasswordPolicyAttachmentConfig(userId sdk.AccountObjectIdentifier, passwordPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` -resource "snowflake_user" "user" { - name = "%[1]s" -} - resource "snowflake_password_policy" "pp" { database = "%[2]s" schema = "%[3]s" @@ -113,18 +118,13 @@ resource "snowflake_password_policy" "pp" { resource "snowflake_user_password_policy_attachment" "ppa" { password_policy_name = snowflake_password_policy.pp.fully_qualified_name - user_name = snowflake_user.user.name + user_name = "%[1]s" } `, userId.Name(), passwordPolicyId.DatabaseName(), passwordPolicyId.SchemaName(), passwordPolicyId.Name()) } func userPasswordPolicyAttachmentConfigV087(userId sdk.AccountObjectIdentifier, passwordPolicyId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` -resource "snowflake_user" "user" { - name = "%[1]s" - default_secondary_roles = ["ALL"] -} - resource "snowflake_password_policy" "pp" { database = "%[2]s" schema = "%[3]s" @@ -134,7 +134,7 @@ resource "snowflake_password_policy" "pp" { resource "snowflake_user_password_policy_attachment" "ppa" { depends_on = [snowflake_password_policy.pp] password_policy_name = "\"%[2]s\".\"%[3]s\".\"%[4]s\"" - user_name = snowflake_user.user.name + user_name = "%[1]s" } `, userId.Name(), passwordPolicyId.DatabaseName(), passwordPolicyId.SchemaName(), passwordPolicyId.Name()) } From fc73cb6a4eedb1c5c91118c1f488090751df7cab Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 10:55:27 +0200 Subject: [PATCH 26/30] Fix user public keys resource acceptance test setup --- .../user_public_keys_acceptance_test.go | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/resources/user_public_keys_acceptance_test.go b/pkg/resources/user_public_keys_acceptance_test.go index aea2969f5f3..cfb56ad58b9 100644 --- a/pkg/resources/user_public_keys_acceptance_test.go +++ b/pkg/resources/user_public_keys_acceptance_test.go @@ -7,13 +7,19 @@ import ( 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/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_UserPublicKeys(t *testing.T) { - userId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + user, userCleanup := acc.TestClient().User.CreateUser(t) + t.Cleanup(userCleanup) + key1, _ := random.GenerateRSAPublicKey(t) key2, _ := random.GenerateRSAPublicKey(t) @@ -26,11 +32,7 @@ func TestAcc_UserPublicKeys(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - PreConfig: func() { - _, userCleanup := acc.TestClient().User.CreateUserWithOptions(t, userId, nil) - t.Cleanup(userCleanup) - }, - Config: uPublicKeysConfig(userId, key1, key2), + Config: uPublicKeysConfig(user.ID(), key1, key2), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_user_public_keys.foobar", "rsa_public_key", key1), resource.TestCheckResourceAttr("snowflake_user_public_keys.foobar", "rsa_public_key_2", key2), @@ -44,14 +46,14 @@ func TestAcc_UserPublicKeys(t *testing.T) { func uPublicKeysConfig(userId sdk.AccountObjectIdentifier, key1 string, key2 string) string { return fmt.Sprintf(` resource "snowflake_user_public_keys" "foobar" { - name = %s + name = "%[1]s" rsa_public_key = < Date: Fri, 4 Apr 2025 11:13:48 +0200 Subject: [PATCH 27/30] Fix view resource acceptance test setup --- pkg/resources/view_acceptance_test.go | 267 +++++++++++++++----------- 1 file changed, 156 insertions(+), 111 deletions(-) diff --git a/pkg/resources/view_acceptance_test.go b/pkg/resources/view_acceptance_test.go index 05a2700f91a..7989a8c356b 100644 --- a/pkg/resources/view_acceptance_test.go +++ b/pkg/resources/view_acceptance_test.go @@ -31,10 +31,11 @@ import ( // TODO(SNOW-1423486): Fix using warehouse in all tests and remove unsetting testenvs.ConfigureClientOnce func TestAcc_View_basic(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") + rowAccessPolicy, rowAccessPolicyCleanup := acc.TestClient().RowAccessPolicy.CreateRowAccessPolicyWithDataType(t, sdk.DataTypeNumber) t.Cleanup(rowAccessPolicyCleanup) @@ -379,11 +380,14 @@ func TestAcc_View_basic(t *testing.T) { } func TestAcc_View_recursive(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + basicView := config.Variables{ "name": config.StringVariable(id.Name()), "database": config.StringVariable(id.DatabaseName()), @@ -434,15 +438,20 @@ func TestAcc_View_recursive(t *testing.T) { }) } +// TODO [next PR]: currently this test is always skipped, try to fix the set up func TestAcc_View_temporary(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") // we use one configured client, so a temporary view should be visible after creation _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) - acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewModel := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statement) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -464,17 +473,17 @@ func TestAcc_View_temporary(t *testing.T) { } func TestAcc_View_complete(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceId := helpers.EncodeResourceIdentifier(id) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") + table, tableCleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), *sdk.NewTableColumnRequest("foo", sdk.DataTypeNumber), }) t.Cleanup(tableCleanup) - statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) + rowAccessPolicy, rowAccessPolicyCleanup := acc.TestClient().RowAccessPolicy.CreateRowAccessPolicyWithDataType(t, sdk.DataTypeNumber) t.Cleanup(rowAccessPolicyCleanup) @@ -506,6 +515,8 @@ end;; ) t.Cleanup(maskingPolicyCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) functionId := sdk.NewSchemaObjectIdentifier("SNOWFLAKE", "CORE", "AVG") m := func() map[string]config.Variable { @@ -535,6 +546,7 @@ end;; "data_metric_schedule_using_cron": config.StringVariable("5 * * * * UTC"), } } + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -593,8 +605,8 @@ end;; ConfigVariables: m(), ResourceName: "snowflake_view.test", ImportState: true, - ImportStateCheck: assertThatImport(t, assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "name", id.Name())), - resourceassert.ImportedViewResource(t, resourceId). + ImportStateCheck: assertThatImport(t, assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name())), + resourceassert.ImportedViewResource(t, helpers.EncodeResourceIdentifier(id)). HasNameString(id.Name()). HasStatementString(statement). HasDatabaseString(id.DatabaseName()). @@ -607,17 +619,17 @@ end;; HasDataMetricFunctionLength(1). HasAggregationPolicyLength(1). HasRowAccessPolicyLength(1), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "data_metric_schedule.0.using_cron", "5 * * * * UTC")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "data_metric_schedule.0.minutes", "0")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "data_metric_function.0.function_name", functionId.FullyQualifiedName())), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "data_metric_function.0.on.#", "1")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "data_metric_function.0.on.0", "ID")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "aggregation_policy.0.policy_name", aggregationPolicy.FullyQualifiedName())), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "aggregation_policy.0.entity_key.#", "1")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "aggregation_policy.0.entity_key.0", "ID")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "row_access_policy.0.policy_name", rowAccessPolicy.ID().FullyQualifiedName())), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "row_access_policy.0.on.#", "1")), - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(resourceId, "row_access_policy.0.on.0", "ID")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "data_metric_schedule.0.using_cron", "5 * * * * UTC")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "data_metric_schedule.0.minutes", "0")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "data_metric_function.0.function_name", functionId.FullyQualifiedName())), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "data_metric_function.0.on.#", "1")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "data_metric_function.0.on.0", "ID")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "aggregation_policy.0.policy_name", aggregationPolicy.FullyQualifiedName())), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "aggregation_policy.0.entity_key.#", "1")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "aggregation_policy.0.entity_key.0", "ID")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "row_access_policy.0.policy_name", rowAccessPolicy.ID().FullyQualifiedName())), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "row_access_policy.0.on.#", "1")), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "row_access_policy.0.on.0", "ID")), ), }, }, @@ -625,18 +637,17 @@ end;; } func TestAcc_View_columns(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + t.Setenv(string(testenvs.ConfigureClientOnce), "") + table, tableCleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), *sdk.NewTableColumnRequest("foo", sdk.DataTypeNumber), *sdk.NewTableColumnRequest("bar", sdk.DataTypeNumber), }) t.Cleanup(tableCleanup) - statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) maskingPolicy, maskingPolicyCleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicyWithOptions(t, []sdk.TableColumnSignature{ @@ -659,7 +670,9 @@ end;; projectionPolicy, projectionPolicyCleanup := acc.TestClient().ProjectionPolicy.CreateProjectionPolicy(t) t.Cleanup(projectionPolicyCleanup) - // generators currently don't handle lists of objects, so use the old way + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) + basicView := func(columns ...string) config.Variables { return config.Variables{ "name": config.StringVariable(id.Name()), @@ -771,10 +784,11 @@ end;; } func TestAcc_View_columnsWithMaskingPolicyWithoutUsing(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() table, tableCleanup := acc.TestClient().Table.CreateWithColumns(t, []sdk.TableColumnRequest{ *sdk.NewTableColumnRequest("id", sdk.DataTypeNumber), @@ -782,7 +796,6 @@ func TestAcc_View_columnsWithMaskingPolicyWithoutUsing(t *testing.T) { *sdk.NewTableColumnRequest("bar", sdk.DataTypeNumber), }) t.Cleanup(tableCleanup) - statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) maskingPolicy, maskingPolicyCleanup := acc.TestClient().MaskingPolicy.CreateMaskingPolicyWithOptions(t, []sdk.TableColumnSignature{ @@ -805,7 +818,8 @@ end;; projectionPolicy, projectionPolicyCleanup := acc.TestClient().ProjectionPolicy.CreateProjectionPolicy(t) t.Cleanup(projectionPolicyCleanup) - // generators currently don't handle lists of objects, so use the old way + statement := fmt.Sprintf("SELECT id, foo FROM %s", table.ID().FullyQualifiedName()) + viewWithPolicies := func() config.Variables { conf := config.Variables{ "name": config.StringVariable(id.Name()), @@ -871,10 +885,15 @@ end;; } func TestAcc_View_Rename(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") - statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() newId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewConfig := func(identifier sdk.SchemaObjectIdentifier) config.Variables { return config.Variables{ "name": config.StringVariable(identifier.Name()), @@ -927,9 +946,14 @@ func TestAcc_View_Rename(t *testing.T) { } func TestAcc_View_Issue3073(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") - statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewModel := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statement) viewModelWithColumns := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statement).WithColumnValue(config.SetVariable( config.MapVariable(map[string]config.Variable{ @@ -989,15 +1013,20 @@ func TestAcc_View_Issue3073(t *testing.T) { // fixes https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/3073#issuecomment-2392250469 func TestAcc_View_IncorrectColumnsWithOrReplace(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := `SELECT ROLE_NAME as "role_name", ROLE_OWNER as "role_owner" FROM INFORMATION_SCHEMA.APPLICABLE_ROLES` statementUnquotedColumns := `SELECT ROLE_NAME as role_name, ROLE_OWNER as role_owner FROM INFORMATION_SCHEMA.APPLICABLE_ROLES` statementUnquotedColumns3 := `SELECT ROLE_NAME as role_name, ROLE_OWNER as role_owner, IS_GRANTABLE as is_grantable FROM INFORMATION_SCHEMA.APPLICABLE_ROLES` - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() viewModel := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statement) viewLowercaseStatementModel := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statementUnquotedColumns) viewLowercaseStatementModel3 := model.View("test", id.DatabaseName(), id.Name(), id.SchemaName(), statementUnquotedColumns3) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -1046,10 +1075,14 @@ func TestAcc_View_IncorrectColumnsWithOrReplace(t *testing.T) { } func TestAcc_ViewChangeCopyGrants(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewConfig := func(copyGrants bool) config.Variables { return config.Variables{ "name": config.StringVariable(id.Name()), @@ -1114,10 +1147,14 @@ func TestAcc_ViewChangeCopyGrants(t *testing.T) { } func TestAcc_ViewChangeCopyGrantsReversed(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewConfig := func(copyGrants bool) config.Variables { return config.Variables{ "name": config.StringVariable(id.Name()), @@ -1179,10 +1216,10 @@ func TestAcc_ViewChangeCopyGrantsReversed(t *testing.T) { } func TestAcc_View_CheckGrantsAfterRecreation(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + + t.Setenv(string(testenvs.ConfigureClientOnce), "") table, cleanupTable := acc.TestClient().Table.Create(t) t.Cleanup(cleanupTable) @@ -1190,6 +1227,8 @@ func TestAcc_View_CheckGrantsAfterRecreation(t *testing.T) { role, cleanupRole := acc.TestClient().Role.CreateRole(t) t.Cleanup(cleanupRole) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -1230,13 +1269,54 @@ func TestAcc_View_CheckGrantsAfterRecreation(t *testing.T) { }) } +func viewConfigWithGrants(viewId, tableId sdk.SchemaObjectIdentifier, selectStatement string, roleId sdk.AccountObjectIdentifier, copyGrants bool) string { + return fmt.Sprintf(` +resource "snowflake_view" "test" { + name = "%[4]s" + comment = "created by terraform" + database = "%[1]s" + schema = "%[2]s" + statement = "select %[5]s from \"%[1]s\".\"%[2]s\".\"%[3]s\"" + copy_grants = %[7]t + is_secure = true + + column { + column_name = "%[5]s" + } +} + +resource "snowflake_grant_privileges_to_account_role" "grant" { + privileges = ["SELECT"] + account_role_name = %[6]s + on_schema_object { + object_type = "VIEW" + object_name = snowflake_view.test.fully_qualified_name + } +} + +data "snowflake_grants" "grants" { + depends_on = [snowflake_grant_privileges_to_account_role.grant, snowflake_view.test] + grants_on { + object_type = "VIEW" + object_name = snowflake_view.test.fully_qualified_name + } +} + `, viewId.DatabaseName(), viewId.SchemaName(), tableId.Name(), viewId.Name(), selectStatement, roleId.FullyQualifiedName(), copyGrants) +} + func TestAcc_View_Issue2640(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + t.Setenv(string(testenvs.ConfigureClientOnce), "") + + role, roleCleanup := acc.TestClient().Role.CreateRole(t) + t.Cleanup(roleCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() part1 := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" part2 := "SELECT ROLE_OWNER, ROLE_NAME FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" statement := fmt.Sprintf("%s\n\tunion\n%s\n", part1, part2) - roleId := acc.TestClient().Ids.RandomAccountObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -1258,8 +1338,6 @@ func TestAcc_View_Issue2640(t *testing.T) { // try to import secure view without being its owner (proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2640) { PreConfig: func() { - role, roleCleanup := acc.TestClient().Role.CreateRoleWithIdentifier(t, roleId) - t.Cleanup(roleCleanup) acc.TestClient().Grant.GrantOwnershipOnSchemaObjectToAccountRole(t, role.ID(), sdk.ObjectTypeView, id, sdk.Revoke) }, ResourceName: "snowflake_view.test", @@ -1285,13 +1363,40 @@ func TestAcc_View_Issue2640(t *testing.T) { }) } +func viewConfigWithMultilineUnionStatement(id sdk.SchemaObjectIdentifier, part1 string, part2 string) string { + return fmt.Sprintf(` +resource "snowflake_view" "test" { + name = "%[3]s" + database = "%[1]s" + schema = "%[2]s" + statement = <<-SQL +%[4]s + union +%[5]s +SQL + is_secure = true + column { + column_name = "ROLE_OWNER" + } + column { + column_name = "ROLE_NAME" + } +} + `, id.DatabaseName(), id.SchemaName(), id.Name(), part1, part2) +} + func TestAcc_view_migrateFromVersion_0_94_1(t *testing.T) { - t.Setenv(string(testenvs.ConfigureClientOnce), "") _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) + + t.Setenv(string(testenvs.ConfigureClientOnce), "") + + tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) + t.Cleanup(tagCleanup) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - resourceName := "snowflake_view.test" statement := "SELECT ROLE_NAME, ROLE_OWNER FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + viewConfig := config.Variables{ "name": config.StringVariable(id.Name()), "database": config.StringVariable(id.DatabaseName()), @@ -1307,9 +1412,7 @@ func TestAcc_view_migrateFromVersion_0_94_1(t *testing.T) { ), } - tag, tagCleanup := acc.TestClient().Tag.CreateTag(t) - t.Cleanup(tagCleanup) - + resourceName := "snowflake_view.test" resource.Test(t, resource.TestCase{ TerraformVersionChecks: []tfversion.TerraformVersionCheck{ tfversion.RequireAbove(tfversion.Version1_5_0), @@ -1324,7 +1427,7 @@ func TestAcc_view_migrateFromVersion_0_94_1(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: viewv_0_94_1_WithTags(id, tag.SchemaName, tag.Name, "foo", statement), + Config: viewV0941WithTags(id, tag.ID(), "foo", statement), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(resourceName, "name", id.Name()), resource.TestCheckResourceAttr(resourceName, "tag.#", "1"), @@ -1348,78 +1451,20 @@ func TestAcc_view_migrateFromVersion_0_94_1(t *testing.T) { }) } -func viewv_0_94_1_WithTags(id sdk.SchemaObjectIdentifier, tagSchema, tagName, tagValue, statement string) string { - s := ` +func viewV0941WithTags(id sdk.SchemaObjectIdentifier, tagId sdk.SchemaObjectIdentifier, tagValue, statement string) string { + return fmt.Sprintf(` resource "snowflake_view" "test" { - name = "%[1]s" - database = "%[2]s" - schema = "%[6]s" - statement = "%[7]s" + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" + statement = "%[6]s" or_replace = true tag { + database = "%[1]s" + schema = "%[2]s" name = "%[4]s" value = "%[5]s" - schema = "%[3]s" - database = "%[2]s" } } -` - return fmt.Sprintf(s, id.Name(), id.DatabaseName(), tagSchema, tagName, tagValue, id.SchemaName(), statement) -} - -func viewConfigWithGrants(viewId, tableId sdk.SchemaObjectIdentifier, selectStatement string, roleId sdk.AccountObjectIdentifier, copyGrants bool) string { - return fmt.Sprintf(` -resource "snowflake_view" "test" { - name = "%[4]s" - comment = "created by terraform" - database = "%[1]s" - schema = "%[2]s" - statement = "select %[5]s from \"%[1]s\".\"%[2]s\".\"%[3]s\"" - copy_grants = %[7]t - is_secure = true - - column { - column_name = "%[5]s" - } -} - -resource "snowflake_grant_privileges_to_account_role" "grant" { - privileges = ["SELECT"] - account_role_name = %[6]s - on_schema_object { - object_type = "VIEW" - object_name = snowflake_view.test.fully_qualified_name - } -} - -data "snowflake_grants" "grants" { - depends_on = [snowflake_grant_privileges_to_account_role.grant, snowflake_view.test] - grants_on { - object_type = "VIEW" - object_name = snowflake_view.test.fully_qualified_name - } -} - `, viewId.DatabaseName(), viewId.SchemaName(), tableId.Name(), viewId.Name(), selectStatement, roleId.FullyQualifiedName(), copyGrants) -} - -func viewConfigWithMultilineUnionStatement(id sdk.SchemaObjectIdentifier, part1 string, part2 string) string { - return fmt.Sprintf(` -resource "snowflake_view" "test" { - name = "%[3]s" - database = "%[1]s" - schema = "%[2]s" - statement = <<-SQL -%[4]s - union -%[5]s -SQL - is_secure = true - column { - column_name = "ROLE_OWNER" - } - column { - column_name = "ROLE_NAME" - } -} - `, id.DatabaseName(), id.SchemaName(), id.Name(), part1, part2) +`, id.DatabaseName(), id.SchemaName(), id.Name(), tagId.Name(), tagValue, statement) } From a33f8a4ac62863c66772cb2188a28576eb43f91b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 12:57:31 +0200 Subject: [PATCH 28/30] Fix warehouse resource acceptance test setup (WIP) --- .../config/model/warehouse_model_ext.go | 31 +- pkg/resources/warehouse_acceptance_test.go | 1265 ++++++++--------- 2 files changed, 636 insertions(+), 660 deletions(-) diff --git a/pkg/acceptance/bettertestspoc/config/model/warehouse_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/warehouse_model_ext.go index caba4e00e69..f709a86af14 100644 --- a/pkg/acceptance/bettertestspoc/config/model/warehouse_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/model/warehouse_model_ext.go @@ -1,14 +1,33 @@ package model import ( + r "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" ) func BasicWarehouseModel( - name string, + id sdk.AccountObjectIdentifier, + comment string, +) *WarehouseModel { + return WarehouseWithDefaultMeta(id.Name()).WithComment(comment) +} + +func WarehouseSnowflakeDefaultWithoutParameters( + id sdk.AccountObjectIdentifier, comment string, ) *WarehouseModel { - return WarehouseWithDefaultMeta(name).WithComment(comment) + return BasicWarehouseModel(id, comment). + WithWarehouseTypeEnum(sdk.WarehouseTypeStandard). + WithWarehouseSizeEnum(sdk.WarehouseSizeXSmall). + WithMinClusterCount(1). + WithMaxClusterCount(1). + WithScalingPolicyEnum(sdk.ScalingPolicyStandard). + WithAutoSuspend(600). + WithAutoResume(r.BooleanTrue). + WithInitiallySuspended(false). + WithEnableQueryAcceleration(r.BooleanFalse). + WithQueryAccelerationMaxScaleFactor(8) } // TODO [SNOW-1501905]: currently config builder are generated from the resource schema, so there is no direct connection to the source enum (like sdk.WarehouseSize) @@ -17,3 +36,11 @@ func BasicWarehouseModel( func (w *WarehouseModel) WithWarehouseSizeEnum(warehouseSize sdk.WarehouseSize) *WarehouseModel { return w.WithWarehouseSize(string(warehouseSize)) } + +func (w *WarehouseModel) WithWarehouseTypeEnum(warehouseType sdk.WarehouseType) *WarehouseModel { + return w.WithWarehouseType(string(warehouseType)) +} + +func (w *WarehouseModel) WithScalingPolicyEnum(scalingPolicy sdk.ScalingPolicy) *WarehouseModel { + return w.WithScalingPolicy(string(scalingPolicy)) +} diff --git a/pkg/resources/warehouse_acceptance_test.go b/pkg/resources/warehouse_acceptance_test.go index 68102a4b61a..9bbb25da6bf 100644 --- a/pkg/resources/warehouse_acceptance_test.go +++ b/pkg/resources/warehouse_acceptance_test.go @@ -3,7 +3,6 @@ package resources_test import ( "fmt" "regexp" - "strconv" "strings" "testing" @@ -34,20 +33,53 @@ import ( func TestAcc_Warehouse_BasicFlows(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + resourceMonitor, resourceMonitorCleanup := acc.TestClient().ResourceMonitor.CreateResourceMonitor(t) + t.Cleanup(resourceMonitorCleanup) + warehouseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() warehouseId2 := acc.TestClient().Ids.RandomAccountObjectIdentifier() - name := warehouseId.Name() - name2 := warehouseId2.Name() comment := random.Comment() newComment := random.Comment() - resourceMonitor, resourceMonitorCleanup := acc.TestClient().ResourceMonitor.CreateResourceMonitor(t) - t.Cleanup(resourceMonitorCleanup) - resourceMonitorId := resourceMonitor.ID() - - warehouseModel := model.Warehouse("w", name).WithComment(comment) - // alternatively we can add an extension func - _ = model.BasicWarehouseModel(name, comment) + warehouseModel := model.Warehouse("test", warehouseId.Name()).WithComment(comment) + warehouseModelRenamed := model.BasicWarehouseModel(warehouseId2, comment) + warehouseModelRenamedFullWithoutParameters := model.WarehouseSnowflakeDefaultWithoutParameters(warehouseId2, comment) + warehouseModelRenamedFullWithParameters := model.WarehouseSnowflakeDefaultWithoutParameters(warehouseId2, comment). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + warehouseModelRenamedFull := model.BasicWarehouseModel(warehouseId2, newComment). + WithWarehouseTypeEnum(sdk.WarehouseTypeSnowparkOptimized). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium). + WithMaxClusterCount(4). + WithMinClusterCount(2). + WithScalingPolicyEnum(sdk.ScalingPolicyEconomy). + WithAutoSuspend(1200). + WithAutoResume(r.BooleanFalse). + WithInitiallySuspended(false). + WithResourceMonitor(resourceMonitor.ID().Name()). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(4). + WithMaxConcurrencyLevel(4). + WithStatementQueuedTimeoutInSeconds(5). + WithStatementTimeoutInSeconds(86400) + warehouseModelRenamedFullResourceMonitorInQuotes := model.BasicWarehouseModel(warehouseId2, newComment). + WithWarehouseTypeEnum(sdk.WarehouseTypeSnowparkOptimized). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium). + WithMaxClusterCount(4). + WithMinClusterCount(2). + WithScalingPolicyEnum(sdk.ScalingPolicyEconomy). + WithAutoSuspend(1200). + WithAutoResume(r.BooleanFalse). + WithInitiallySuspended(false). + WithResourceMonitor(resourceMonitor.ID().FullyQualifiedName()). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(4). + WithMaxConcurrencyLevel(4). + WithStatementQueuedTimeoutInSeconds(5). + WithStatementTimeoutInSeconds(86400) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -60,8 +92,8 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { { Config: config.FromModels(t, warehouseModel), Check: assertThat(t, - resourceassert.WarehouseResource(t, "snowflake_warehouse.w"). - HasNameString(name). + resourceassert.WarehouseResource(t, warehouseModel.ResourceReference()). + HasNameString(warehouseId.Name()). HasNoWarehouseType(). HasNoWarehouseSize(). HasNoMaxClusterCount(). @@ -83,7 +115,7 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { HasDefaultStatementTimeoutInSeconds(). // alternatively extension possible HasAllDefault(), - resourceshowoutputassert.WarehouseShowOutput(t, "snowflake_warehouse.w"). + resourceshowoutputassert.WarehouseShowOutput(t, warehouseModel.ResourceReference()). HasType(sdk.WarehouseTypeStandard). HasSize(sdk.WarehouseSizeXSmall). HasMaxClusterCount(1). @@ -95,7 +127,7 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { HasComment(comment). HasEnableQueryAcceleration(false). HasQueryAccelerationMaxScaleFactor(8), - resourceparametersassert.WarehouseResourceParameters(t, "snowflake_warehouse.w"). + resourceparametersassert.WarehouseResourceParameters(t, warehouseModel.ResourceReference()). HasMaxConcurrencyLevel(8). HasStatementQueuedTimeoutInSeconds(0). HasStatementTimeoutInSeconds(172800). @@ -121,19 +153,19 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { HasAllDefaults(). HasAllDefaultsExplicit(), // we can still use normal checks - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", warehouseId.Name())), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "fully_qualified_name", warehouseId.FullyQualifiedName())), + assert.Check(resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", warehouseId.Name())), + assert.Check(resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "fully_qualified_name", warehouseId.FullyQualifiedName())), ), }, // IMPORT after empty config (in this method, most of the attributes will be filled with the defaults acquired from Snowflake) { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModel.ResourceReference(), ImportState: true, ImportStateCheck: assertThatImport(t, - assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(warehouseId), "name", name)), + assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(warehouseId), "name", warehouseId.Name())), assert.CheckImport(importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(warehouseId), "fully_qualified_name", warehouseId.FullyQualifiedName())), resourceassert.ImportedWarehouseResource(t, helpers.EncodeResourceIdentifier(warehouseId)). - HasNameString(name). + HasNameString(warehouseId.Name()). HasWarehouseTypeString(string(sdk.WarehouseTypeStandard)). HasWarehouseSizeString(string(sdk.WarehouseSizeXSmall)). HasMaxClusterCountString("1"). @@ -177,148 +209,148 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { }, // RENAME { - Config: warehouseBasicConfigWithComment(name2, comment), + Config: config.FromModels(t, warehouseModelRenamed), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), + plancheck.ExpectResourceAction(warehouseModelRenamed.ResourceReference(), plancheck.ResourceActionUpdate), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", name2), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "fully_qualified_name", warehouseId2.FullyQualifiedName()), + resource.TestCheckResourceAttr(warehouseModelRenamed.ResourceReference(), "name", warehouseId2.Name()), + resource.TestCheckResourceAttr(warehouseModelRenamed.ResourceReference(), "fully_qualified_name", warehouseId2.FullyQualifiedName()), ), }, // Change config but use defaults for every attribute (but not the parameters) - expect no changes (because these are already SF values) { + Config: config.FromModels(t, warehouseModelRenamedFullWithoutParameters), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.PrintPlanDetails(warehouseModelRenamedFullWithoutParameters.ResourceReference(), "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), plancheck.ExpectEmptyPlan(), }, }, - Config: warehouseFullDefaultWithoutParametersConfig(name2, comment), }, // add parameters - update expected (different level even with same values) { + Config: config.FromModels(t, warehouseModelRenamedFullWithParameters), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.PrintPlanDetails(warehouseModelRenamedFullWithParameters.ResourceReference(), "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), // this is this only situation in which there will be a strange output in the plan - planchecks.ExpectComputed("snowflake_warehouse.w", "max_concurrency_level", true), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModelRenamedFullWithParameters.ResourceReference(), "max_concurrency_level", true), + planchecks.ExpectComputed(warehouseModelRenamedFullWithParameters.ResourceReference(), "statement_queued_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModelRenamedFullWithParameters.ResourceReference(), "statement_timeout_in_seconds", true), }, }, - Config: warehouseFullDefaultConfig(name2, comment), Check: resource.ComposeTestCheckFunc( // no changes in the attributes - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeXSmall)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "min_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "scaling_policy", string(sdk.ScalingPolicyStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "600"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "true"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "initially_suspended"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "resource_monitor"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", comment), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "false"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "8"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeStandard)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeXSmall)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "max_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "min_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "scaling_policy", string(sdk.ScalingPolicyStandard)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "auto_suspend", "600"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "auto_resume", "true"), + resource.TestCheckNoResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "initially_suspended"), + resource.TestCheckNoResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "resource_monitor"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "comment", comment), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "enable_query_acceleration", "false"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "query_acceleration_max_scale_factor", "8"), // parameters have the same values... - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_concurrency_level", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "max_concurrency_level", "8"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "statement_timeout_in_seconds", "172800"), // ... but are set on different level - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.max_concurrency_level.0.value", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.max_concurrency_level.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.max_concurrency_level.0.value", "8"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.max_concurrency_level.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModelRenamedFullWithParameters.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // CHANGE PROPERTIES (normal and parameters) { + Config: config.FromModels(t, warehouseModelRenamedFull), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.PrintPlanDetails(warehouseModelRenamedFull.ResourceReference(), "warehouse_type", "warehouse_size", "max_cluster_count", "min_cluster_count", "scaling_policy", "auto_suspend", "auto_resume", "enable_query_acceleration", "query_acceleration_max_scale_factor", "max_concurrency_level", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeMedium))), - planchecks.ExpectChange("snowflake_warehouse.w", "max_cluster_count", tfjson.ActionUpdate, sdk.String("1"), sdk.String("4")), - planchecks.ExpectChange("snowflake_warehouse.w", "min_cluster_count", tfjson.ActionUpdate, sdk.String("1"), sdk.String("2")), - planchecks.ExpectChange("snowflake_warehouse.w", "scaling_policy", tfjson.ActionUpdate, sdk.String(string(sdk.ScalingPolicyStandard)), sdk.String(string(sdk.ScalingPolicyEconomy))), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String("1200")), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), - planchecks.ExpectChange("snowflake_warehouse.w", "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("false"), sdk.String("true")), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String("4")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeMedium))), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "max_cluster_count", tfjson.ActionUpdate, sdk.String("1"), sdk.String("4")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "min_cluster_count", tfjson.ActionUpdate, sdk.String("1"), sdk.String("2")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "scaling_policy", tfjson.ActionUpdate, sdk.String(string(sdk.ScalingPolicyStandard)), sdk.String(string(sdk.ScalingPolicyEconomy))), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String("1200")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("false"), sdk.String("true")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String("4")), - planchecks.ExpectChange("snowflake_warehouse.w", "max_concurrency_level", tfjson.ActionUpdate, sdk.String("8"), sdk.String("4")), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("0"), sdk.String("5")), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), sdk.String("86400")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "max_concurrency_level", tfjson.ActionUpdate, sdk.String("8"), sdk.String("4")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "statement_queued_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("0"), sdk.String("5")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), sdk.String("86400")), }, }, - Config: warehouseFullConfigNoDefaults(name2, newComment, resourceMonitorId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeSnowparkOptimized)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeMedium)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_cluster_count", "4"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "min_cluster_count", "2"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "scaling_policy", string(sdk.ScalingPolicyEconomy)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "1200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "false"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "initially_suspended"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "resource_monitor", resourceMonitorId.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", newComment), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "4"), - - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_concurrency_level", "4"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "5"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "86400"), - - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.max_concurrency_level.0.value", "4"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.max_concurrency_level.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.value", "5"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeSnowparkOptimized)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeMedium)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "max_cluster_count", "4"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "min_cluster_count", "2"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "scaling_policy", string(sdk.ScalingPolicyEconomy)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "auto_suspend", "1200"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "auto_resume", "false"), + resource.TestCheckNoResourceAttr(warehouseModelRenamedFull.ResourceReference(), "initially_suspended"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "resource_monitor", resourceMonitor.ID().Name()), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "comment", newComment), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "enable_query_acceleration", "true"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "query_acceleration_max_scale_factor", "4"), + + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "max_concurrency_level", "4"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "statement_queued_timeout_in_seconds", "5"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "statement_timeout_in_seconds", "86400"), + + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.max_concurrency_level.0.value", "4"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.max_concurrency_level.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.value", "5"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "86400"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // change resource monitor - wrap in quotes (no change expected) { + Config: config.FromModels(t, warehouseModelRenamedFullResourceMonitorInQuotes), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), }, }, - Config: warehouseFullConfigNoDefaultsStringId(name2, newComment, strconv.Quote(resourceMonitorId.FullyQualifiedName())), }, // CHANGE max_concurrency_level EXTERNALLY (proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2318) { + Config: config.FromModels(t, warehouseModelRenamedFull), PreConfig: func() { acc.TestClient().Warehouse.UpdateMaxConcurrencyLevel(t, warehouseId2, 10) }, ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.ExpectDrift("snowflake_warehouse.w", "max_concurrency_level", sdk.String("4"), sdk.String("10")), - planchecks.ExpectChange("snowflake_warehouse.w", "max_concurrency_level", tfjson.ActionUpdate, sdk.String("10"), sdk.String("4")), + planchecks.ExpectDrift(warehouseModelRenamedFull.ResourceReference(), "max_concurrency_level", sdk.String("4"), sdk.String("10")), + planchecks.ExpectChange(warehouseModelRenamedFull.ResourceReference(), "max_concurrency_level", tfjson.ActionUpdate, sdk.String("10"), sdk.String("4")), }, }, - Config: warehouseFullConfigNoDefaults(name2, newComment, resourceMonitorId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", name2), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_concurrency_level", "4"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "name", warehouseId2.Name()), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "max_concurrency_level", "4"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.max_concurrency_level.0.value", "4"), + resource.TestCheckResourceAttr(warehouseModelRenamedFull.ResourceReference(), "parameters.0.max_concurrency_level.0.value", "4"), ), }, // IMPORT { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelRenamedFull.ResourceReference(), ImportState: true, ImportStateVerify: true, }, @@ -327,8 +359,23 @@ func TestAcc_Warehouse_BasicFlows(t *testing.T) { } func TestAcc_Warehouse_WarehouseType(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelStandard := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium). + WithWarehouseTypeEnum(sdk.WarehouseTypeStandard) + warehouseModelSnowparkOptimized := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium). + WithWarehouseTypeEnum(sdk.WarehouseTypeSnowparkOptimized) + warehouseModelNoType := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium) + warehouseModelSnowparkOptimizedLowercase := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium). + WithWarehouseType(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized))) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -339,24 +386,24 @@ func TestAcc_Warehouse_WarehouseType(t *testing.T) { Steps: []resource.TestStep{ // set up with concrete type { + Config: config.FromModels(t, warehouseModelStandard), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionCreate, nil, sdk.String(string(sdk.WarehouseTypeStandard))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelStandard.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelStandard.ResourceReference(), "warehouse_type", tfjson.ActionCreate, nil, sdk.String(string(sdk.WarehouseTypeStandard))), + planchecks.ExpectComputed(warehouseModelStandard.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithTypeConfig(id.Name(), sdk.WarehouseTypeStandard, sdk.WarehouseSizeMedium), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeStandard))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeStandard))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelStandard.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeStandard))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelStandard.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelStandard.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeStandard))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeStandard), ), }, // import when type in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelStandard.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -367,53 +414,53 @@ func TestAcc_Warehouse_WarehouseType(t *testing.T) { }, // change type in config { + Config: config.FromModels(t, warehouseModelSnowparkOptimized), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelSnowparkOptimized.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelSnowparkOptimized.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), + planchecks.ExpectComputed(warehouseModelSnowparkOptimized.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithTypeConfig(id.Name(), sdk.WarehouseTypeSnowparkOptimized, sdk.WarehouseSizeMedium), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeSnowparkOptimized))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeSnowparkOptimized))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimized.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeSnowparkOptimized))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimized.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimized.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeSnowparkOptimized))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeSnowparkOptimized), ), }, // remove type from config { - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeMedium)), + Config: config.FromModels(t, warehouseModelNoType), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + plancheck.ExpectResourceAction(warehouseModelNoType.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.PrintPlanDetails(warehouseModelNoType.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelNoType.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), nil), + planchecks.ExpectComputed(warehouseModelNoType.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", "")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeStandard))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "warehouse_type", "")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeStandard))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeStandard), ), }, // add config (lower case) { + Config: config.FromModels(t, warehouseModelSnowparkOptimizedLowercase), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, nil, sdk.String(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized)))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, nil, sdk.String(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized)))), + planchecks.ExpectComputed(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithTypeConfig(id.Name(), sdk.WarehouseType(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized))), sdk.WarehouseSizeMedium), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized)))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeSnowparkOptimized))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), "warehouse_type", strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized)))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSnowparkOptimizedLowercase.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeSnowparkOptimized))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeSnowparkOptimized), ), }, @@ -422,21 +469,21 @@ func TestAcc_Warehouse_WarehouseType(t *testing.T) { PreConfig: func() { acc.TestClient().Warehouse.UpdateWarehouseType(t, id, sdk.WarehouseTypeStandard) }, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeMedium)), + Config: config.FromModels(t, warehouseModelNoType), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "warehouse_type", sdk.String(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized))), sdk.String(string(sdk.WarehouseTypeStandard))), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.type", sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), sdk.String(string(sdk.WarehouseTypeStandard))), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelNoType.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelNoType.ResourceReference(), "warehouse_type", sdk.String(strings.ToLower(string(sdk.WarehouseTypeSnowparkOptimized))), sdk.String(string(sdk.WarehouseTypeStandard))), + planchecks.ExpectDrift(warehouseModelNoType.ResourceReference(), "show_output.0.type", sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), sdk.String(string(sdk.WarehouseTypeStandard))), + planchecks.ExpectChange(warehouseModelNoType.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), nil), + planchecks.ExpectComputed(warehouseModelNoType.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", "")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeStandard))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "warehouse_type", "")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeStandard))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeStandard), ), }, @@ -446,27 +493,27 @@ func TestAcc_Warehouse_WarehouseType(t *testing.T) { // we change the type to the type different from default, expecting action acc.TestClient().Warehouse.UpdateWarehouseType(t, id, sdk.WarehouseTypeSnowparkOptimized) }, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeMedium)), + Config: config.FromModels(t, warehouseModelNoType), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_type", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "warehouse_type", nil, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.type", sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelNoType.ResourceReference(), "warehouse_type", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelNoType.ResourceReference(), "warehouse_type", nil, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), + planchecks.ExpectDrift(warehouseModelNoType.ResourceReference(), "show_output.0.type", sdk.String(string(sdk.WarehouseTypeStandard)), sdk.String(string(sdk.WarehouseTypeSnowparkOptimized))), + planchecks.ExpectChange(warehouseModelNoType.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeSnowparkOptimized)), nil), + planchecks.ExpectComputed(warehouseModelNoType.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", "")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.type", string(sdk.WarehouseTypeStandard))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "warehouse_type", "")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoType.ResourceReference(), "show_output.0.type", string(sdk.WarehouseTypeStandard))), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeStandard), ), }, // import when no type in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelNoType.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -480,8 +527,19 @@ func TestAcc_Warehouse_WarehouseType(t *testing.T) { } func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelSmall := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeSmall) + warehouseModelMedium := model.Warehouse("test", id.Name()). + WithWarehouseSizeEnum(sdk.WarehouseSizeMedium) + warehouseModelNoSize := model.Warehouse("test", id.Name()) + warehouseModelSmallLowercase := model.Warehouse("test", id.Name()). + WithWarehouseSize(strings.ToLower(string(sdk.WarehouseSizeSmall))) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -492,24 +550,24 @@ func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { Steps: []resource.TestStep{ // set up with concrete size { + Config: config.FromModels(t, warehouseModelSmall), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionCreate, nil, sdk.String(string(sdk.WarehouseSizeSmall))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelSmall.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelSmall.ResourceReference(), "warehouse_size", tfjson.ActionCreate, nil, sdk.String(string(sdk.WarehouseSizeSmall))), + planchecks.ExpectComputed(warehouseModelSmall.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeSmall)), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeSmall))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeSmall))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmall.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeSmall))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmall.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmall.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeSmall))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeSmall), ), }, // import when size in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelSmall.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -520,53 +578,53 @@ func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { }, // change size in config { + Config: config.FromModels(t, warehouseModelMedium), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeSmall)), sdk.String(string(sdk.WarehouseSizeMedium))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelMedium.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelMedium.ResourceReference(), "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeSmall)), sdk.String(string(sdk.WarehouseSizeMedium))), + planchecks.ExpectComputed(warehouseModelMedium.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeMedium)), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeMedium))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeMedium))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelMedium.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeMedium))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelMedium.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelMedium.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeMedium))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeMedium), ), }, // remove size from config { - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelNoSize), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionDestroyBeforeCreate), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeMedium)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + plancheck.ExpectResourceAction(warehouseModelNoSize.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), + planchecks.PrintPlanDetails(warehouseModelNoSize.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelNoSize.ResourceReference(), "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeMedium)), nil), + planchecks.ExpectComputed(warehouseModelNoSize.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "warehouse_size")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeXSmall))), + assert.Check(resource.TestCheckNoResourceAttr(warehouseModelNoSize.ResourceReference(), "warehouse_size")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeXSmall))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeXSmall), ), }, // add config (lower case) { + Config: config.FromModels(t, warehouseModelSmallLowercase), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionUpdate, nil, sdk.String(strings.ToLower(string(sdk.WarehouseSizeSmall)))), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelSmallLowercase.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelSmallLowercase.ResourceReference(), "warehouse_size", tfjson.ActionUpdate, nil, sdk.String(strings.ToLower(string(sdk.WarehouseSizeSmall)))), + planchecks.ExpectComputed(warehouseModelSmallLowercase.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithSizeConfig(id.Name(), strings.ToLower(string(sdk.WarehouseSizeSmall))), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", strings.ToLower(string(sdk.WarehouseSizeSmall)))), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeSmall))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmallLowercase.ResourceReference(), "warehouse_size", strings.ToLower(string(sdk.WarehouseSizeSmall)))), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmallLowercase.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelSmallLowercase.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeSmall))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeSmall), ), }, @@ -575,21 +633,21 @@ func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { PreConfig: func() { acc.TestClient().Warehouse.UpdateWarehouseSize(t, id, sdk.WarehouseSizeXSmall) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelNoSize), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "warehouse_size", sdk.String(strings.ToLower(string(sdk.WarehouseSizeSmall))), sdk.String(string(sdk.WarehouseSizeXSmall))), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.size", sdk.String(string(sdk.WarehouseSizeSmall)), sdk.String(string(sdk.WarehouseSizeXSmall))), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeXSmall)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelNoSize.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelNoSize.ResourceReference(), "warehouse_size", sdk.String(strings.ToLower(string(sdk.WarehouseSizeSmall))), sdk.String(string(sdk.WarehouseSizeXSmall))), + planchecks.ExpectDrift(warehouseModelNoSize.ResourceReference(), "show_output.0.size", sdk.String(string(sdk.WarehouseSizeSmall)), sdk.String(string(sdk.WarehouseSizeXSmall))), + planchecks.ExpectChange(warehouseModelNoSize.ResourceReference(), "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeXSmall)), nil), + planchecks.ExpectComputed(warehouseModelNoSize.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "warehouse_size")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeXSmall))), + assert.Check(resource.TestCheckNoResourceAttr(warehouseModelNoSize.ResourceReference(), "warehouse_size")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeXSmall))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeXSmall), ), }, @@ -599,27 +657,27 @@ func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { // we change the size to the size different from default, expecting action acc.TestClient().Warehouse.UpdateWarehouseSize(t, id, sdk.WarehouseSizeSmall) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelNoSize), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "warehouse_size", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "warehouse_size", nil, sdk.String(string(sdk.WarehouseSizeSmall))), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.size", sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeSmall))), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeSmall)), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelNoSize.ResourceReference(), "warehouse_size", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelNoSize.ResourceReference(), "warehouse_size", nil, sdk.String(string(sdk.WarehouseSizeSmall))), + planchecks.ExpectDrift(warehouseModelNoSize.ResourceReference(), "show_output.0.size", sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeSmall))), + planchecks.ExpectChange(warehouseModelNoSize.ResourceReference(), "warehouse_size", tfjson.ActionCreate, sdk.String(string(sdk.WarehouseSizeSmall)), nil), + planchecks.ExpectComputed(warehouseModelNoSize.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "warehouse_size")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.size", string(sdk.WarehouseSizeXSmall))), + assert.Check(resource.TestCheckNoResourceAttr(warehouseModelNoSize.ResourceReference(), "warehouse_size")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelNoSize.ResourceReference(), "show_output.0.size", string(sdk.WarehouseSizeXSmall))), objectassert.Warehouse(t, id).HasSize(sdk.WarehouseSizeXSmall), ), }, // import when no size in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelNoSize.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -633,8 +691,26 @@ func TestAcc_Warehouse_WarehouseSizes(t *testing.T) { } func TestAcc_Warehouse_Validations(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelInvalidType := model.Warehouse("test", id.Name()). + WithWarehouseType("unknown") + warehouseModelInvalidSize := model.Warehouse("test", id.Name()). + WithWarehouseSize("SMALLa") + warehouseModelInvalidMaxClusterCount := model.Warehouse("test", id.Name()). + WithMaxClusterCount(0) + warehouseModelInvalidMinClusterCount := model.Warehouse("test", id.Name()). + WithMinClusterCount(0) + warehouseModelInvalidScalingPolicy := model.Warehouse("test", id.Name()). + WithScalingPolicy("unknown") + warehouseModelInvalidAutoResume := model.Warehouse("test", id.Name()). + WithAutoResume("other") + warehouseModelInvalidMaxConcurrencyLevel := model.Warehouse("test", id.Name()). + WithMaxConcurrencyLevel(-2) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -644,31 +720,38 @@ func TestAcc_Warehouse_Validations(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Warehouse), Steps: []resource.TestStep{ { - Config: warehouseWithTypeConfig(id.Name(), "unknown", sdk.WarehouseSizeXSmall), + Config: config.FromModels(t, warehouseModelInvalidType), + PlanOnly: true, ExpectError: regexp.MustCompile("invalid warehouse type: unknown"), }, { - Config: warehouseWithSizeConfig(id.Name(), "SMALLa"), + Config: config.FromModels(t, warehouseModelInvalidSize), + PlanOnly: true, ExpectError: regexp.MustCompile("invalid warehouse size: SMALLa"), }, { - Config: warehouseConfigWithMaxClusterCount(id.Name(), 0), + Config: config.FromModels(t, warehouseModelInvalidMaxClusterCount), + PlanOnly: true, ExpectError: regexp.MustCompile(`expected max_cluster_count to be at least \(1\), got 0`), }, { - Config: warehouseConfigWithMinClusterCount(id.Name(), 0), + Config: config.FromModels(t, warehouseModelInvalidMinClusterCount), + PlanOnly: true, ExpectError: regexp.MustCompile(`expected min_cluster_count to be at least \(1\), got 0`), }, { - Config: warehouseConfigWithScalingPolicy(id.Name(), "unknown"), + Config: config.FromModels(t, warehouseModelInvalidScalingPolicy), + PlanOnly: true, ExpectError: regexp.MustCompile("invalid scaling policy: unknown"), }, { - Config: warehouseWithAutoResumeConfig(id.Name(), "other"), + Config: config.FromModels(t, warehouseModelInvalidAutoResume), + PlanOnly: true, ExpectError: regexp.MustCompile(`expected \[\{\{} auto_resume}] to be one of \["true" "false"], got other`), }, { - Config: warehouseConfigWithMaxConcurrencyLevel(id.Name(), -2), + Config: config.FromModels(t, warehouseModelInvalidMaxConcurrencyLevel), + PlanOnly: true, ExpectError: regexp.MustCompile(`expected max_concurrency_level to be at least \(1\), got -2`), }, }, @@ -677,10 +760,17 @@ func TestAcc_Warehouse_Validations(t *testing.T) { // Just for the experimental purposes func TestAcc_Warehouse_ValidateDriftForCurrentWarehouse(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() secondId := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + secondWarehouseModel := model.Warehouse("test2", secondId.Name()) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -690,40 +780,40 @@ func TestAcc_Warehouse_ValidateDriftForCurrentWarehouse(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Warehouse), Steps: []resource.TestStep{ { - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.is_current", "true"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.is_current", "true"), ), }, { + Config: config.FromModels(t, warehouseModel, secondWarehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionNoop), - plancheck.ExpectResourceAction("snowflake_warehouse.w2", plancheck.ResourceActionCreate), + plancheck.ExpectResourceAction(warehouseModel.ResourceReference(), plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(secondWarehouseModel.ResourceReference(), plancheck.ResourceActionCreate), }, }, - Config: warehouseBasicConfig(id.Name()) + secondWarehouseBasicConfig(secondId.Name()), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.is_current", "true"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.is_current", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w2", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w2", "show_output.0.is_current", "true"), + resource.TestCheckResourceAttr(secondWarehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(secondWarehouseModel.ResourceReference(), "show_output.0.is_current", "true"), ), }, { + Config: config.FromModels(t, warehouseModel, secondWarehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.is_current", sdk.String("true"), sdk.String("false")), - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionNoop), - plancheck.ExpectResourceAction("snowflake_warehouse.w2", plancheck.ResourceActionNoop), + planchecks.ExpectDrift(warehouseModel.ResourceReference(), "show_output.0.is_current", sdk.String("true"), sdk.String("false")), + plancheck.ExpectResourceAction(warehouseModel.ResourceReference(), plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(secondWarehouseModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, - Config: warehouseBasicConfig(id.Name()) + secondWarehouseBasicConfig(secondId.Name()), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.is_current", "false"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.is_current", "false"), ), }, }, @@ -732,8 +822,15 @@ func TestAcc_Warehouse_ValidateDriftForCurrentWarehouse(t *testing.T) { // TestAcc_Warehouse_AutoResume validates behavior for falling back to Snowflake default for boolean attribute func TestAcc_Warehouse_AutoResume(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelWithoutAutoResume := model.Warehouse("test", id.Name()) + warehouseModelAutoResumeTrue := model.Warehouse("test", id.Name()).WithAutoResume(r.BooleanTrue) + warehouseModelAutoResumeFalse := model.Warehouse("test", id.Name()).WithAutoResume(r.BooleanFalse) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -744,24 +841,24 @@ func TestAcc_Warehouse_AutoResume(t *testing.T) { Steps: []resource.TestStep{ // set up with auto resume set in config { + Config: config.FromModels(t, warehouseModelAutoResumeTrue), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_resume", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionCreate, nil, sdk.String("true")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelAutoResumeTrue.ResourceReference(), "auto_resume", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelAutoResumeTrue.ResourceReference(), "auto_resume", tfjson.ActionCreate, nil, sdk.String("true")), + planchecks.ExpectComputed(warehouseModelAutoResumeTrue.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithAutoResumeConfig(id.Name(), "true"), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "true")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_resume", "true")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeTrue.ResourceReference(), "auto_resume", "true")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeTrue.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeTrue.ResourceReference(), "show_output.0.auto_resume", "true")), objectassert.Warehouse(t, id).HasAutoResume(true), ), }, // import when type in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelAutoResumeTrue.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -772,36 +869,36 @@ func TestAcc_Warehouse_AutoResume(t *testing.T) { }, // change value in config { + Config: config.FromModels(t, warehouseModelAutoResumeFalse), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_resume", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelAutoResumeFalse.ResourceReference(), "auto_resume", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelAutoResumeFalse.ResourceReference(), "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), + planchecks.ExpectComputed(warehouseModelAutoResumeFalse.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseWithAutoResumeConfig(id.Name(), "false"), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "false")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_resume", "false")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeFalse.ResourceReference(), "auto_resume", "false")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeFalse.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoResumeFalse.ResourceReference(), "show_output.0.auto_resume", "false")), objectassert.Warehouse(t, id).HasAutoResume(false), ), }, // remove type from config (expecting non-empty plan because we do not know the default) { - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithoutAutoResume), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_resume", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + plancheck.ExpectResourceAction(warehouseModelWithoutAutoResume.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.PrintPlanDetails(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), + planchecks.ExpectComputed(warehouseModelWithoutAutoResume.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", r.BooleanDefault)), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_resume", "true")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", r.BooleanDefault)), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "show_output.0.auto_resume", "true")), objectassert.Warehouse(t, id).HasAutoResume(true), ), }, @@ -811,27 +908,27 @@ func TestAcc_Warehouse_AutoResume(t *testing.T) { // we change the auto resume to the type different from default, expecting action acc.TestClient().Warehouse.UpdateAutoResume(t, id, false) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithoutAutoResume), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_resume", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "auto_resume", sdk.String(r.BooleanDefault), sdk.String("false")), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.auto_resume", sdk.String("true"), sdk.String("false")), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", sdk.String(r.BooleanDefault), sdk.String("false")), + planchecks.ExpectDrift(warehouseModelWithoutAutoResume.ResourceReference(), "show_output.0.auto_resume", sdk.String("true"), sdk.String("false")), + planchecks.ExpectChange(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), + planchecks.ExpectComputed(warehouseModelWithoutAutoResume.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", r.BooleanDefault)), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_resume", "true")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "auto_resume", r.BooleanDefault)), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoResume.ResourceReference(), "show_output.0.auto_resume", "true")), objectassert.Warehouse(t, id).HasType(sdk.WarehouseTypeStandard), ), }, // import when no type in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelWithoutAutoResume.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -846,8 +943,15 @@ func TestAcc_Warehouse_AutoResume(t *testing.T) { // TestAcc_Warehouse_AutoSuspend validates behavior for falling back to Snowflake default for the integer attribute func TestAcc_Warehouse_AutoSuspend(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelWithoutAutoSuspend := model.Warehouse("test", id.Name()) + warehouseModelAutoSuspend1200 := model.Warehouse("test", id.Name()).WithAutoSuspend(1200) + warehouseModelAutoSuspend600 := model.Warehouse("test", id.Name()).WithAutoSuspend(600) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -858,24 +962,24 @@ func TestAcc_Warehouse_AutoSuspend(t *testing.T) { Steps: []resource.TestStep{ // set up with auto suspend set in config { + Config: config.FromModels(t, warehouseModelAutoSuspend1200), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionCreate, nil, sdk.String("1200")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelAutoSuspend1200.ResourceReference(), "auto_suspend", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelAutoSuspend1200.ResourceReference(), "auto_suspend", tfjson.ActionCreate, nil, sdk.String("1200")), + planchecks.ExpectComputed(warehouseModelAutoSuspend1200.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseConfigWithAutoSuspend(id.Name(), 1200), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "1200")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "1200")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend1200.ResourceReference(), "auto_suspend", "1200")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend1200.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend1200.ResourceReference(), "show_output.0.auto_suspend", "1200")), objectassert.Warehouse(t, id).HasAutoSuspend(1200), ), }, // import when auto suspend in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelAutoSuspend1200.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -886,36 +990,36 @@ func TestAcc_Warehouse_AutoSuspend(t *testing.T) { }, // change value in config to Snowflake default { + Config: config.FromModels(t, warehouseModelAutoSuspend600), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("1200"), sdk.String("600")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelAutoSuspend600.ResourceReference(), "auto_suspend", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelAutoSuspend600.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("1200"), sdk.String("600")), + planchecks.ExpectComputed(warehouseModelAutoSuspend600.ResourceReference(), r.ShowOutputAttributeName, true), }, }, - Config: warehouseConfigWithAutoSuspend(id.Name(), 600), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "600")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "600")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend600.ResourceReference(), "auto_suspend", "600")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend600.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelAutoSuspend600.ResourceReference(), "show_output.0.auto_suspend", "600")), objectassert.Warehouse(t, id).HasAutoSuspend(600), ), }, // remove auto suspend from config (expecting non-empty plan because we do not know the default) { - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithoutAutoSuspend), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String(r.IntDefaultString)), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + plancheck.ExpectResourceAction(warehouseModelWithoutAutoSuspend.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.PrintPlanDetails(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String(r.IntDefaultString)), + planchecks.ExpectComputed(warehouseModelWithoutAutoSuspend.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", r.IntDefaultString)), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "600")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", r.IntDefaultString)), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "show_output.0.auto_suspend", "600")), objectassert.Warehouse(t, id).HasAutoSuspend(600), ), }, @@ -925,27 +1029,27 @@ func TestAcc_Warehouse_AutoSuspend(t *testing.T) { // we change the max cluster count to the type different from default, expecting action acc.TestClient().Warehouse.UpdateAutoSuspend(t, id, 2400) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithoutAutoSuspend), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectNonEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", r.ShowOutputAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "auto_suspend", sdk.String(r.IntDefaultString), sdk.String("2400")), - planchecks.ExpectDrift("snowflake_warehouse.w", "show_output.0.auto_suspend", sdk.String("600"), sdk.String("2400")), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("2400"), sdk.String(r.IntDefaultString)), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", r.ShowOutputAttributeName), + planchecks.ExpectDrift(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", sdk.String(r.IntDefaultString), sdk.String("2400")), + planchecks.ExpectDrift(warehouseModelWithoutAutoSuspend.ResourceReference(), "show_output.0.auto_suspend", sdk.String("600"), sdk.String("2400")), + planchecks.ExpectChange(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("2400"), sdk.String(r.IntDefaultString)), + planchecks.ExpectComputed(warehouseModelWithoutAutoSuspend.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", r.IntDefaultString)), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1")), - assert.Check(resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "600")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "auto_suspend", r.IntDefaultString)), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "show_output.#", "1")), + assert.Check(resource.TestCheckResourceAttr(warehouseModelWithoutAutoSuspend.ResourceReference(), "show_output.0.auto_suspend", "600")), objectassert.Warehouse(t, id).HasAutoSuspend(600), ), }, // import when no type in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelWithoutAutoSuspend.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -959,8 +1063,18 @@ func TestAcc_Warehouse_AutoSuspend(t *testing.T) { } func TestAcc_Warehouse_ZeroValues(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + warehouseModelWithAllValidZeroValues := model.Warehouse("test", id.Name()). + WithAutoSuspend(0). + WithQueryAccelerationMaxScaleFactor(0). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(0) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -971,97 +1085,97 @@ func TestAcc_Warehouse_ZeroValues(t *testing.T) { Steps: []resource.TestStep{ // create with valid "zero" values { - Config: warehouseWithAllValidZeroValuesConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithAllValidZeroValues), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionCreate, nil, sdk.String("0")), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionCreate, nil, sdk.String("0")), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("0")), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("0")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", tfjson.ActionCreate, nil, sdk.String("0")), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionCreate, nil, sdk.String("0")), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_queued_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("0")), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("0")), + planchecks.ExpectComputed(warehouseModelWithAllValidZeroValues.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "query_acceleration_max_scale_factor", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.0.auto_suspend", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // remove all from config (to validate that unset is run correctly) { - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("0"), sdk.String(r.IntDefaultString)), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("0"), sdk.String(r.IntDefaultString)), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("0"), sdk.String(r.IntDefaultString)), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("0"), sdk.String(r.IntDefaultString)), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_queued_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", r.IntDefaultString), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", r.IntDefaultString), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "auto_suspend", r.IntDefaultString), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "query_acceleration_max_scale_factor", r.IntDefaultString), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "600"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "8"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.auto_suspend", "600"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.level", ""), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.level", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", ""), ), }, // add valid "zero" values again (to validate if set is run correctly) { - Config: warehouseWithAllValidZeroValuesConfig(id.Name()), + Config: config.FromModels(t, warehouseModelWithAllValidZeroValues), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String(r.IntDefaultString), sdk.String("0")), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String(r.IntDefaultString), sdk.String("0")), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", true), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), sdk.String("0")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ShowOutputAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", "query_acceleration_max_scale_factor", "statement_queued_timeout_in_seconds", "statement_timeout_in_seconds", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String(r.IntDefaultString), sdk.String("0")), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String(r.IntDefaultString), sdk.String("0")), + planchecks.ExpectComputed(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_queued_timeout_in_seconds", true), + planchecks.ExpectChange(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), sdk.String("0")), + planchecks.ExpectComputed(warehouseModelWithAllValidZeroValues.ResourceReference(), r.ShowOutputAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "auto_suspend", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "query_acceleration_max_scale_factor", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "statement_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.auto_suspend", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.0.auto_suspend", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_queued_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "0"), + resource.TestCheckResourceAttr(warehouseModelWithAllValidZeroValues.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // import zero values { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelWithAllValidZeroValues.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -1087,8 +1201,16 @@ func TestAcc_Warehouse_ZeroValues(t *testing.T) { } func TestAcc_Warehouse_Parameter(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + warehouseModelWithStatementTimeoutInSeconds86400 := model.Warehouse("test", id.Name()).WithStatementTimeoutInSeconds(86400) + warehouseModelWithStatementTimeoutInSeconds43200 := model.Warehouse("test", id.Name()).WithStatementTimeoutInSeconds(43200) + warehouseModelWithStatementTimeoutInSeconds172800 := model.Warehouse("test", id.Name()).WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -1099,25 +1221,25 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { Steps: []resource.TestStep{ // create with setting one param { - Config: warehouseWithParameterConfig(id.Name(), 86400), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds86400), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("86400")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionCreate, nil, sdk.String("86400")), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "86400"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "statement_timeout_in_seconds", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "86400"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // do not make any change (to check if there is no drift) { - Config: warehouseWithParameterConfig(id.Name(), 86400), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds86400), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), @@ -1126,7 +1248,7 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { }, // import when param in config { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModelWithStatementTimeoutInSeconds86400.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -1138,20 +1260,20 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { }, // change the param value in config { - Config: warehouseWithParameterConfig(id.Name(), 43200), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds43200), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), sdk.String("43200")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), sdk.String("43200")), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // change param value on account - expect no changes @@ -1162,20 +1284,20 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { revert := acc.TestClient().Parameter.UpdateAccountParameterTemporarily(t, sdk.AccountParameterStatementTimeoutInSeconds, "86400") t.Cleanup(revert) }, - Config: warehouseWithParameterConfig(id.Name(), 43200), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds43200), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", tfjson.ActionNoop, sdk.String("43200"), sdk.String("43200")), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", tfjson.ActionNoop, sdk.String("43200"), sdk.String("43200")), plancheck.ExpectEmptyPlan(), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // change the param value externally @@ -1186,21 +1308,21 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { // update externally acc.TestClient().Warehouse.UpdateStatementTimeoutInSeconds(t, id, 86400) }, - Config: warehouseWithParameterConfig(id.Name(), 43200), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds43200), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "statement_timeout_in_seconds", sdk.String("43200"), sdk.String("86400")), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), sdk.String("43200")), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectDrift(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", sdk.String("43200"), sdk.String("86400")), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), sdk.String("43200")), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // change the param value on account to the value from config (but on different level) @@ -1209,21 +1331,21 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { acc.TestClient().Warehouse.UnsetStatementTimeoutInSeconds(t, id) acc.TestClient().Parameter.UpdateAccountParameterTemporarily(t, sdk.AccountParameterStatementTimeoutInSeconds, "43200") }, - Config: warehouseWithParameterConfig(id.Name(), 43200), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds43200), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("43200"), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("43200"), nil), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "statement_timeout_in_seconds", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "43200"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "43200"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds43200.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // remove the param from config @@ -1234,25 +1356,25 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { param := acc.TestClient().Parameter.ShowAccountParameter(t, sdk.AccountParameterStatementTimeoutInSeconds) require.Equal(t, "", string(param.Level)) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("43200"), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("43200"), nil), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", ""), ), }, // import when param not in config (snowflake default) { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModel.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -1264,21 +1386,21 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { }, // change the param value in config to snowflake default (expecting action because of the different level) { - Config: warehouseWithParameterConfig(id.Name(), 172800), + Config: config.FromModels(t, warehouseModelWithStatementTimeoutInSeconds172800), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), nil), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "statement_timeout_in_seconds", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModelWithStatementTimeoutInSeconds172800.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeWarehouse)), ), }, // remove the param from config @@ -1287,21 +1409,21 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { param := acc.TestClient().Parameter.ShowAccountParameter(t, sdk.AccountParameterStatementTimeoutInSeconds) require.Equal(t, "", string(param.Level)) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("172800"), nil), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", ""), ), }, // change param value on account - change expected to be noop @@ -1312,25 +1434,25 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { revert := acc.TestClient().Parameter.UpdateAccountParameterTemporarily(t, sdk.AccountParameterStatementTimeoutInSeconds, "86400") t.Cleanup(revert) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", sdk.String("172800"), sdk.String("86400")), - planchecks.ExpectChange("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", tfjson.ActionNoop, sdk.String("86400"), sdk.String("86400")), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectDrift(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", sdk.String("172800"), sdk.String("86400")), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", tfjson.ActionNoop, sdk.String("86400"), sdk.String("86400")), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "86400"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeAccount)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "86400"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeAccount)), ), }, // import when param not in config (set on account) { - ResourceName: "snowflake_warehouse.w", + ResourceName: warehouseModel.ResourceReference(), ImportState: true, ImportStateCheck: importchecks.ComposeImportStateCheck( importchecks.TestCheckResourceAttrInstanceState(helpers.EncodeResourceIdentifier(id), "name", id.Name()), @@ -1345,21 +1467,21 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { PreConfig: func() { acc.TestClient().Warehouse.UpdateStatementTimeoutInSeconds(t, id, 86400) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), nil), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", r.ParametersAttributeName, true), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", tfjson.ActionUpdate, sdk.String("86400"), nil), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), r.ParametersAttributeName, true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "86400"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "86400"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeAccount)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "86400"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", string(sdk.ParameterTypeAccount)), ), }, // unset param on account @@ -1367,20 +1489,20 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { PreConfig: func() { acc.TestClient().Parameter.UnsetAccountParameter(t, sdk.AccountParameterStatementTimeoutInSeconds) }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "statement_timeout_in_seconds", r.ParametersAttributeName), - planchecks.ExpectDrift("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", sdk.String("86400"), sdk.String("172800")), - planchecks.ExpectDrift("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", sdk.String(string(sdk.ParameterTypeAccount)), sdk.String("")), + planchecks.PrintPlanDetails(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", r.ParametersAttributeName), + planchecks.ExpectDrift(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", sdk.String("86400"), sdk.String("172800")), + planchecks.ExpectDrift(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", sdk.String(string(sdk.ParameterTypeAccount)), sdk.String("")), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.value", "172800"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "parameters.0.statement_timeout_in_seconds.0.level", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.value", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "parameters.0.statement_timeout_in_seconds.0.level", ""), ), }, }, @@ -1388,8 +1510,15 @@ func TestAcc_Warehouse_Parameter(t *testing.T) { } func TestAcc_Warehouse_InitiallySuspendedChangesPostCreation(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + warehouseModelWithInitiallySuspendedTrue := model.Warehouse("test", id.Name()).WithInitiallySuspended(true) + warehouseModelWithInitiallySuspendedFalse := model.Warehouse("test", id.Name()).WithInitiallySuspended(false) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -1399,40 +1528,40 @@ func TestAcc_Warehouse_InitiallySuspendedChangesPostCreation(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Warehouse), Steps: []resource.TestStep{ { - Config: warehouseWithInitiallySuspendedConfig(id.Name(), true), + Config: config.FromModels(t, warehouseModelWithInitiallySuspendedTrue), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "initially_suspended", "true"), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedTrue.ResourceReference(), "initially_suspended", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.state", string(sdk.WarehouseStateSuspended)), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedTrue.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedTrue.ResourceReference(), "show_output.0.state", string(sdk.WarehouseStateSuspended)), ), }, { + Config: config.FromModels(t, warehouseModelWithInitiallySuspendedFalse), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), }, }, - Config: warehouseWithInitiallySuspendedConfig(id.Name(), false), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "initially_suspended", "true"), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedFalse.ResourceReference(), "initially_suspended", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.state", string(sdk.WarehouseStateSuspended)), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedFalse.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelWithInitiallySuspendedFalse.ResourceReference(), "show_output.0.state", string(sdk.WarehouseStateSuspended)), ), }, { + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), }, }, - Config: warehouseBasicConfig(id.Name()), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "initially_suspended", "true"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "initially_suspended", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.state", string(sdk.WarehouseStateSuspended)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "show_output.0.state", string(sdk.WarehouseStateSuspended)), ), }, }, @@ -1440,8 +1569,26 @@ func TestAcc_Warehouse_InitiallySuspendedChangesPostCreation(t *testing.T) { } func TestAcc_Warehouse_migrateFromVersion092_withWarehouseSize(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFull := model.BasicWarehouseModel(id, ""). + WithWarehouseTypeEnum(sdk.WarehouseTypeStandard). + WithWarehouseSizeEnum(sdk.WarehouseSizeX4Large). + WithMaxClusterCount(1). + WithMinClusterCount(1). + WithScalingPolicyEnum(sdk.ScalingPolicyStandard). + WithAutoSuspend(600). + WithAutoResume(r.BooleanTrue). + WithInitiallySuspended(false). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(8). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1458,10 +1605,10 @@ func TestAcc_Warehouse_migrateFromVersion092_withWarehouseSize(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullMigrationConfigWithSize(id.Name(), "", sdk.WarehouseSizeX4Large), + Config: config.FromModels(t, warehouseModelFull), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", "4XLARGE"), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "warehouse_size", "4XLARGE"), ), }, { @@ -1472,10 +1619,10 @@ func TestAcc_Warehouse_migrateFromVersion092_withWarehouseSize(t *testing.T) { plancheck.ExpectEmptyPlan(), }, }, - Config: warehouseFullMigrationConfigWithSize(id.Name(), "", sdk.WarehouseSizeX4Large), + Config: config.FromModels(t, warehouseModelFull), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeX4Large)), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeX4Large)), ), }, }, @@ -1483,6 +1630,9 @@ func TestAcc_Warehouse_migrateFromVersion092_withWarehouseSize(t *testing.T) { } func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() resource.Test(t, resource.TestCase{ @@ -1994,14 +2144,6 @@ resource "snowflake_warehouse" "w" { `, name) } -func secondWarehouseBasicConfig(name string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w2" { - name = "%s" -} -`, name) -} - func warehouseBasicConfigWithQueryAcceleration(name string) string { return fmt.Sprintf(` resource "snowflake_warehouse" "w" { @@ -2040,15 +2182,6 @@ resource "snowflake_warehouse" "w" { `, name, deprecatedAttribute) } -func warehouseBasicConfigWithComment(name string, comment string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - comment = "%s" -} -`, name, comment) -} - func warehouseFullDefaultConfig(name string, comment string) string { return warehouseFullDefaultConfigWithQueryAcceleration(name, comment, false, 8) } @@ -2098,73 +2231,6 @@ resource "snowflake_warehouse" "w" { `, name, comment) } -func warehouseFullDefaultWithoutParametersConfig(name string, comment string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "STANDARD" - warehouse_size = "XSMALL" - max_cluster_count = 1 - min_cluster_count = 1 - scaling_policy = "STANDARD" - auto_suspend = 600 - auto_resume = true - initially_suspended = false - comment = "%[2]s" - enable_query_acceleration = false - query_acceleration_max_scale_factor = 8 -} -`, name, comment) -} - -func warehouseFullConfigNoDefaults(name string, comment string, id sdk.AccountObjectIdentifier) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "SNOWPARK-OPTIMIZED" - warehouse_size = "MEDIUM" - max_cluster_count = 4 - min_cluster_count = 2 - scaling_policy = "ECONOMY" - auto_suspend = 1200 - auto_resume = false - initially_suspended = false - resource_monitor = "%[3]s" - comment = "%[2]s" - enable_query_acceleration = true - query_acceleration_max_scale_factor = 4 - - max_concurrency_level = 4 - statement_queued_timeout_in_seconds = 5 - statement_timeout_in_seconds = 86400 -} -`, name, comment, id.Name()) -} - -func warehouseFullConfigNoDefaultsStringId(name string, comment string, id string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "SNOWPARK-OPTIMIZED" - warehouse_size = "MEDIUM" - max_cluster_count = 4 - min_cluster_count = 2 - scaling_policy = "ECONOMY" - auto_suspend = 1200 - auto_resume = false - initially_suspended = false - resource_monitor = %[3]s - comment = "%[2]s" - enable_query_acceleration = true - query_acceleration_max_scale_factor = 4 - - max_concurrency_level = 4 - statement_queued_timeout_in_seconds = 5 - statement_timeout_in_seconds = 86400 -} -`, name, comment, id) -} - func warehouseWithSizeConfig(name string, size string) string { return fmt.Sprintf(` resource "snowflake_warehouse" "w" { @@ -2173,120 +2239,3 @@ resource "snowflake_warehouse" "w" { } `, name, size) } - -func warehouseWithTypeConfig(name string, warehouseType sdk.WarehouseType, size sdk.WarehouseSize) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - warehouse_type = "%s" - warehouse_size = "%s" -} -`, name, warehouseType, size) -} - -func warehouseWithAutoResumeConfig(name string, autoResume string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - auto_resume = "%s" -} -`, name, autoResume) -} - -func warehouseWithAllValidZeroValuesConfig(name string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - auto_suspend = 0 - query_acceleration_max_scale_factor = 0 - statement_queued_timeout_in_seconds = 0 - statement_timeout_in_seconds = 0 -} -`, name) -} - -func warehouseWithParameterConfig(name string, value int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - statement_timeout_in_seconds = %d -} -`, name, value) -} - -func warehouseWithInitiallySuspendedConfig(name string, initiallySuspended bool) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - initially_suspended = %t -} -`, name, initiallySuspended) -} - -func warehouseFullMigrationConfigWithSize(name string, comment string, size sdk.WarehouseSize) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "STANDARD" - warehouse_size = "%[3]s" - max_cluster_count = 1 - min_cluster_count = 1 - scaling_policy = "STANDARD" - auto_suspend = 600 - auto_resume = true - initially_suspended = false - comment = "%[2]s" - enable_query_acceleration = true - query_acceleration_max_scale_factor = 8 - - max_concurrency_level = 8 - statement_queued_timeout_in_seconds = 0 - statement_timeout_in_seconds = 172800 -} -`, name, comment, size) -} - -func warehouseConfigWithMaxClusterCount(name string, count int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - max_cluster_count = "%d" -} -`, name, count) -} - -func warehouseConfigWithMinClusterCount(name string, count int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - min_cluster_count = "%d" -} -`, name, count) -} - -func warehouseConfigWithScalingPolicy(name string, policy sdk.ScalingPolicy) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - scaling_policy = "%s" -} -`, name, policy) -} - -func warehouseConfigWithMaxConcurrencyLevel(name string, level int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - max_concurrency_level = "%d" -} -`, name, level) -} - -func warehouseConfigWithAutoSuspend(name string, autoSuspend int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - auto_suspend = "%d" -} -`, name, autoSuspend) -} From 7c145ceee6361639af3f24b49b55440819db2c55 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 14:47:18 +0200 Subject: [PATCH 29/30] Fix warehouse resource acceptance test setup --- pkg/resources/warehouse_acceptance_test.go | 443 +++++++++++---------- 1 file changed, 230 insertions(+), 213 deletions(-) diff --git a/pkg/resources/warehouse_acceptance_test.go b/pkg/resources/warehouse_acceptance_test.go index 9bbb25da6bf..3c71d03e36e 100644 --- a/pkg/resources/warehouse_acceptance_test.go +++ b/pkg/resources/warehouse_acceptance_test.go @@ -9,6 +9,7 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" r "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" tfjson "github.com/hashicorp/terraform-json" + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/objectassert" @@ -1635,6 +1636,18 @@ func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration(t *t id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFull := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanTrue). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + + warehouseModelFullWithBoolean := model.WarehouseSnowflakeDefaultWithoutParameters(id, "new comment"). + WithEnableQueryAccelerationValue(tfconfig.BoolVariable(false)). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1651,43 +1664,43 @@ func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration(t *t Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullMigrationConfig(id.Name(), true), + Config: warehouseV092Config(id), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "wait_for_provisioning", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "resource_monitor", "null"), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "wait_for_provisioning", "true"), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "resource_monitor", "null"), ), }, { - PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseFullMigrationConfig(id.Name(), false), + PreConfig: func() { acc.UnsetConfigPathEnv(t) }, + Config: config.FromModels(t, warehouseModelFull), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "wait_for_provisioning"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "resource_monitor"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "true"), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "name", id.Name()), + resource.TestCheckNoResourceAttr(warehouseModelFull.ResourceReference(), "wait_for_provisioning"), + resource.TestCheckNoResourceAttr(warehouseModelFull.ResourceReference(), "resource_monitor"), + resource.TestCheckResourceAttr(warehouseModelFull.ResourceReference(), "enable_query_acceleration", "true"), ), }, // let's try to change the value of the parameter that was earlier a bool and now is a string { ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, + Config: config.FromModels(t, warehouseModelFullWithBoolean), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), - planchecks.ExpectChange("snowflake_warehouse.w", "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), + plancheck.ExpectResourceAction(warehouseModelFullWithBoolean.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(warehouseModelFullWithBoolean.ResourceReference(), "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), }, }, - Config: warehouseFullDefaultConfigWithQueryAcceleration(id.Name(), "new comment", false, 8), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", "new comment"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "false"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "comment", "new comment"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "enable_query_acceleration", "false"), ), }, }, @@ -1695,8 +1708,17 @@ func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration(t *t } func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration_booleanChangeRightAfter(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFullWithBoolean := model.WarehouseSnowflakeDefaultWithoutParameters(id, "new comment"). + WithEnableQueryAccelerationValue(tfconfig.BoolVariable(false)). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1713,29 +1735,29 @@ func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration_bool Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullMigrationConfig(id.Name(), true), + Config: warehouseV092Config(id), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "wait_for_provisioning", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "resource_monitor", "null"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "true"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "wait_for_provisioning", "true"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "resource_monitor", "null"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "enable_query_acceleration", "true"), ), }, // let's try to change the value of the parameter that was earlier a bool and now is a string { - PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, + PreConfig: func() { acc.UnsetConfigPathEnv(t) }, + Config: config.FromModels(t, warehouseModelFullWithBoolean), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionUpdate), - planchecks.ExpectChange("snowflake_warehouse.w", "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), + plancheck.ExpectResourceAction(warehouseModelFullWithBoolean.ResourceReference(), plancheck.ResourceActionUpdate), + planchecks.ExpectChange(warehouseModelFullWithBoolean.ResourceReference(), "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("true"), sdk.String("false")), }, }, - Config: warehouseFullDefaultConfigWithQueryAcceleration(id.Name(), "new comment", false, 8), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", "new comment"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "false"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "comment", "new comment"), + resource.TestCheckResourceAttr(warehouseModelFullWithBoolean.ResourceReference(), "enable_query_acceleration", "false"), ), }, }, @@ -1744,8 +1766,17 @@ func TestAcc_Warehouse_migrateFromVersion092_allFieldsFilledBeforeMigration_bool // The result of removing the custom conditional logic for enable_query_acceleration and query_acceleration_max_scale_factor. func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_sameConfig(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFullDefault := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanFalse). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1762,28 +1793,28 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_sam Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullDefaultConfig(id.Name(), ""), + Config: config.FromModels(t, warehouseModelFullDefault), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "name", id.Name()), + resource.TestCheckNoResourceAttr(warehouseModelFullDefault.ResourceReference(), "query_acceleration_max_scale_factor"), ), }, { - PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseFullDefaultConfig(id.Name(), ""), + PreConfig: func() { acc.UnsetConfigPathEnv(t) }, + Config: config.FromModels(t, warehouseModelFullDefault), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), - planchecks.PrintPlanDetails("snowflake_warehouse.w", "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), + planchecks.PrintPlanDetails(warehouseModelFullDefault.ResourceReference(), "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "8"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "query_acceleration_max_scale_factor", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "8"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "8"), ), }, }, @@ -1792,8 +1823,24 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_sam // The result of removing the custom conditional logic for enable_query_acceleration and query_acceleration_max_scale_factor. func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_noInConfigAfter(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFullDefault := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanFalse). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + + warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanFalse). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800). + WithQueryAccelerationMaxScaleFactorValue(nil) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1810,28 +1857,28 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_noI Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullDefaultConfig(id.Name(), ""), + Config: config.FromModels(t, warehouseModelFullDefault), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "name", id.Name()), + resource.TestCheckNoResourceAttr(warehouseModelFullDefault.ResourceReference(), "query_acceleration_max_scale_factor"), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseFullDefaultConfigWithQueryAccelerationMaxScaleFactorRemoved(id.Name(), ""), + Config: config.FromModels(t, warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String(r.IntDefaultString)), + planchecks.PrintPlanDetails(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String(r.IntDefaultString)), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", r.IntDefaultString), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "query_acceleration_max_scale_factor", r.IntDefaultString), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "8"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAccelerationMaxScaleFactorRemoved.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "8"), ), }, }, @@ -1840,8 +1887,24 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_noI // The result of removing the custom conditional logic for enable_query_acceleration and query_acceleration_max_scale_factor. func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_differentConfigAfterMigration(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelFullDefault := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanFalse). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + + warehouseModelFullDefaultWithQueryAcceleration := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(10). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1858,28 +1921,28 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_dif Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseFullDefaultConfig(id.Name(), ""), + Config: config.FromModels(t, warehouseModelFullDefault), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor"), + resource.TestCheckResourceAttr(warehouseModelFullDefault.ResourceReference(), "name", id.Name()), + resource.TestCheckNoResourceAttr(warehouseModelFullDefault.ResourceReference(), "query_acceleration_max_scale_factor"), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseFullDefaultConfigWithQueryAcceleration(id.Name(), "", true, 10), + Config: config.FromModels(t, warehouseModelFullDefaultWithQueryAcceleration), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.PrintPlanDetails("snowflake_warehouse.w", "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String("10")), + planchecks.PrintPlanDetails(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "query_acceleration_max_scale_factor", r.ShowOutputAttributeName), + planchecks.ExpectChange(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String("10")), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "10"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "query_acceleration_max_scale_factor", "10"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.#", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "show_output.0.query_acceleration_max_scale_factor", "10"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "show_output.#", "1"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "show_output.0.query_acceleration_max_scale_factor", "10"), ), }, }, @@ -1887,8 +1950,22 @@ func TestAcc_Warehouse_migrateFromVersion092_queryAccelerationMaxScaleFactor_dif } func TestAcc_Warehouse_migrateFromVersion092_noConfigToFullConfig(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModelBasicConfigWithQueryAcceleration := model.Warehouse("test", id.Name()). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(8) + + warehouseModelFullDefaultWithQueryAcceleration := model.WarehouseSnowflakeDefaultWithoutParameters(id, ""). + WithEnableQueryAcceleration(r.BooleanTrue). + WithQueryAccelerationMaxScaleFactor(8). + WithMaxConcurrencyLevel(8). + WithStatementQueuedTimeoutInSeconds(0). + WithStatementTimeoutInSeconds(172800) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1906,37 +1983,37 @@ func TestAcc_Warehouse_migrateFromVersion092_noConfigToFullConfig(t *testing.T) }, }, // query acceleration is needed here because of the custom logic that was removed - Config: warehouseBasicConfigWithQueryAcceleration(id.Name()), + Config: config.FromModels(t, warehouseModelBasicConfigWithQueryAcceleration), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModelBasicConfigWithQueryAcceleration.ResourceReference(), "name", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseFullDefaultConfigWithQueryAcceleration(id.Name(), "", true, 8), + Config: config.FromModels(t, warehouseModelFullDefaultWithQueryAcceleration), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ plancheck.ExpectEmptyPlan(), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeXSmall)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "min_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "scaling_policy", string(sdk.ScalingPolicyStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "600"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "true"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "initially_suspended"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "resource_monitor"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", ""), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "true"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor", "8"), - - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_concurrency_level", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeStandard)), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeXSmall)), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "max_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "min_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "scaling_policy", string(sdk.ScalingPolicyStandard)), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "auto_suspend", "600"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "auto_resume", "true"), + resource.TestCheckNoResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "initially_suspended"), + resource.TestCheckNoResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "resource_monitor"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "comment", ""), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "enable_query_acceleration", "true"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "query_acceleration_max_scale_factor", "8"), + + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "max_concurrency_level", "8"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModelFullDefaultWithQueryAcceleration.ResourceReference(), "statement_timeout_in_seconds", "172800"), ), }, }, @@ -1944,8 +2021,13 @@ func TestAcc_Warehouse_migrateFromVersion092_noConfigToFullConfig(t *testing.T) } func TestAcc_Warehouse_migrateFromVersion092_defaultsRemoved(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()).WithWarehouseSizeEnum(sdk.WarehouseSizeXSmall) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -1962,51 +2044,51 @@ func TestAcc_Warehouse_migrateFromVersion092_defaultsRemoved(t *testing.T) { Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeXSmall)), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_type", string(sdk.WarehouseTypeStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "warehouse_size", string(sdk.WarehouseSizeXSmall)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "min_cluster_count", "1"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "scaling_policy", string(sdk.ScalingPolicyStandard)), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_suspend", "600"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "auto_resume", "true"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "initially_suspended"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "resource_monitor", "null"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "comment", ""), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "enable_query_acceleration", "false"), - resource.TestCheckNoResourceAttr("snowflake_warehouse.w", "query_acceleration_max_scale_factor"), - - resource.TestCheckResourceAttr("snowflake_warehouse.w", "max_concurrency_level", "8"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", "0"), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "statement_timeout_in_seconds", "172800"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), + + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "warehouse_type", string(sdk.WarehouseTypeStandard)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "warehouse_size", string(sdk.WarehouseSizeXSmall)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "max_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "min_cluster_count", "1"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "scaling_policy", string(sdk.ScalingPolicyStandard)), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "auto_suspend", "600"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "auto_resume", "true"), + resource.TestCheckNoResourceAttr(warehouseModel.ResourceReference(), "initially_suspended"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "resource_monitor", "null"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "comment", ""), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "enable_query_acceleration", "false"), + resource.TestCheckNoResourceAttr(warehouseModel.ResourceReference(), "query_acceleration_max_scale_factor"), + + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "max_concurrency_level", "8"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_queued_timeout_in_seconds", "0"), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", "172800"), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseWithSizeConfig(id.Name(), string(sdk.WarehouseSizeXSmall)), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), nil), - planchecks.ExpectChange("snowflake_warehouse.w", "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeXSmall))), - planchecks.ExpectChange("snowflake_warehouse.w", "max_cluster_count", tfjson.ActionUpdate, sdk.String("1"), nil), - planchecks.ExpectChange("snowflake_warehouse.w", "min_cluster_count", tfjson.ActionUpdate, sdk.String("1"), nil), - planchecks.ExpectChange("snowflake_warehouse.w", "scaling_policy", tfjson.ActionUpdate, sdk.String(string(sdk.ScalingPolicyStandard)), nil), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String(r.IntDefaultString)), - planchecks.ExpectChange("snowflake_warehouse.w", "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String(r.BooleanDefault)), - planchecks.ExpectChange("snowflake_warehouse.w", "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), - planchecks.ExpectChange("snowflake_warehouse.w", "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String(r.IntDefaultString)), - - planchecks.ExpectComputed("snowflake_warehouse.w", "max_concurrency_level", true), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_queued_timeout_in_seconds", true), - planchecks.ExpectComputed("snowflake_warehouse.w", "statement_timeout_in_seconds", true), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "warehouse_type", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseTypeStandard)), nil), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "warehouse_size", tfjson.ActionUpdate, sdk.String(string(sdk.WarehouseSizeXSmall)), sdk.String(string(sdk.WarehouseSizeXSmall))), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "max_cluster_count", tfjson.ActionUpdate, sdk.String("1"), nil), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "min_cluster_count", tfjson.ActionUpdate, sdk.String("1"), nil), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "scaling_policy", tfjson.ActionUpdate, sdk.String(string(sdk.ScalingPolicyStandard)), nil), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "auto_suspend", tfjson.ActionUpdate, sdk.String("600"), sdk.String(r.IntDefaultString)), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "auto_resume", tfjson.ActionUpdate, sdk.String("true"), sdk.String(r.BooleanDefault)), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "enable_query_acceleration", tfjson.ActionUpdate, sdk.String("false"), sdk.String(r.BooleanDefault)), + planchecks.ExpectChange(warehouseModel.ResourceReference(), "query_acceleration_max_scale_factor", tfjson.ActionUpdate, sdk.String("8"), sdk.String(r.IntDefaultString)), + + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "max_concurrency_level", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_queued_timeout_in_seconds", true), + planchecks.ExpectComputed(warehouseModel.ResourceReference(), "statement_timeout_in_seconds", true), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), ), }, }, @@ -2014,8 +2096,13 @@ func TestAcc_Warehouse_migrateFromVersion092_defaultsRemoved(t *testing.T) { } func TestAcc_Warehouse_migrateFromVersion092_warehouseSizeCausingForceNew(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2032,22 +2119,22 @@ func TestAcc_Warehouse_migrateFromVersion092_warehouseSizeCausingForceNew(t *tes Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionDestroyBeforeCreate), + plancheck.ExpectResourceAction(warehouseModel.ResourceReference(), plancheck.ResourceActionDestroyBeforeCreate), }, }, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), ), }, }, @@ -2055,8 +2142,13 @@ func TestAcc_Warehouse_migrateFromVersion092_warehouseSizeCausingForceNew(t *tes } func TestAcc_Warehouse_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + warehouseModel := model.Warehouse("test", id.Name()) + resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ @@ -2072,17 +2164,17 @@ func TestAcc_Warehouse_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t * Source: "Snowflake-Labs/snowflake", }, }, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "id", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseBasicConfig(id.Name()), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "id", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "id", id.Name()), ), }, }, @@ -2090,8 +2182,13 @@ func TestAcc_Warehouse_migrateFromV0941_ensureSmoothUpgradeWithNewResourceId(t * } func TestAcc_Warehouse_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()) + + warehouseModel := model.Warehouse("test", quotedId) resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -2109,58 +2206,36 @@ func TestAcc_Warehouse_IdentifierQuotingDiffSuppression(t *testing.T) { }, }, ExpectNonEmptyPlan: true, - Config: warehouseBasicConfig(quotedId), + Config: config.FromModels(t, warehouseModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "id", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "id", id.Name()), ), }, { PreConfig: func() { acc.UnsetConfigPathEnv(t) }, ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - Config: warehouseBasicConfig(quotedId), + Config: config.FromModels(t, warehouseModel), ConfigPlanChecks: resource.ConfigPlanChecks{ PreApply: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(warehouseModel.ResourceReference(), plancheck.ResourceActionNoop), }, PostApplyPostRefresh: []plancheck.PlanCheck{ - plancheck.ExpectResourceAction("snowflake_warehouse.w", plancheck.ResourceActionNoop), + plancheck.ExpectResourceAction(warehouseModel.ResourceReference(), plancheck.ResourceActionNoop), }, }, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("snowflake_warehouse.w", "name", id.Name()), - resource.TestCheckResourceAttr("snowflake_warehouse.w", "id", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "name", id.Name()), + resource.TestCheckResourceAttr(warehouseModel.ResourceReference(), "id", id.Name()), ), }, }, }) } -func warehouseBasicConfig(name string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" -} -`, name) -} - -func warehouseBasicConfigWithQueryAcceleration(name string) string { +func warehouseV092Config(id sdk.AccountObjectIdentifier) string { return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - enable_query_acceleration = "true" - query_acceleration_max_scale_factor = "8" -} -`, name) -} - -func warehouseFullMigrationConfig(name string, withDeprecatedAttribute bool) string { - deprecatedAttribute := "" - if withDeprecatedAttribute { - deprecatedAttribute = "wait_for_provisioning = true" - } - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { +resource "snowflake_warehouse" "test" { name = "%[1]s" warehouse_type = "STANDARD" warehouse_size = "XSMALL" @@ -2177,65 +2252,7 @@ resource "snowflake_warehouse" "w" { statement_queued_timeout_in_seconds = 0 statement_timeout_in_seconds = 172800 - %s -} -`, name, deprecatedAttribute) -} - -func warehouseFullDefaultConfig(name string, comment string) string { - return warehouseFullDefaultConfigWithQueryAcceleration(name, comment, false, 8) -} - -func warehouseFullDefaultConfigWithQueryAcceleration(name string, comment string, enableQueryAcceleration bool, queryAccelerationMaxScaleFactor int) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "STANDARD" - warehouse_size = "XSMALL" - max_cluster_count = 1 - min_cluster_count = 1 - scaling_policy = "STANDARD" - auto_suspend = 600 - auto_resume = true - initially_suspended = false - comment = "%[2]s" - enable_query_acceleration = %[3]t - query_acceleration_max_scale_factor = %[4]d - - max_concurrency_level = 8 - statement_queued_timeout_in_seconds = 0 - statement_timeout_in_seconds = 172800 -} -`, name, comment, enableQueryAcceleration, queryAccelerationMaxScaleFactor) -} - -func warehouseFullDefaultConfigWithQueryAccelerationMaxScaleFactorRemoved(name string, comment string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%[1]s" - warehouse_type = "STANDARD" - warehouse_size = "XSMALL" - max_cluster_count = 1 - min_cluster_count = 1 - scaling_policy = "STANDARD" - auto_suspend = 600 - auto_resume = true - initially_suspended = false - comment = "%[2]s" - enable_query_acceleration = false - - max_concurrency_level = 8 - statement_queued_timeout_in_seconds = 0 - statement_timeout_in_seconds = 172800 -} -`, name, comment) -} - -func warehouseWithSizeConfig(name string, size string) string { - return fmt.Sprintf(` -resource "snowflake_warehouse" "w" { - name = "%s" - warehouse_size = "%s" + wait_for_provisioning = true } -`, name, size) +`, id.Name()) } From 68b8aa92c182286ab3d3add4c745fb2e359ef854 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 4 Apr 2025 14:56:35 +0200 Subject: [PATCH 30/30] Run pre-push --- pkg/resources/table_acceptance_test.go | 2 +- pkg/scripts/public_key_downloader/public_key_downloader.go | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/resources/table_acceptance_test.go b/pkg/resources/table_acceptance_test.go index 62c5bb0b3d8..f5f4140ae5c 100644 --- a/pkg/resources/table_acceptance_test.go +++ b/pkg/resources/table_acceptance_test.go @@ -3,7 +3,6 @@ package resources_test import ( "context" "fmt" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "regexp" "strconv" "testing" @@ -12,6 +11,7 @@ import ( 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/helpers/random" "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/provider" diff --git a/pkg/scripts/public_key_downloader/public_key_downloader.go b/pkg/scripts/public_key_downloader/public_key_downloader.go index 8849637ac68..3683ef16485 100644 --- a/pkg/scripts/public_key_downloader/public_key_downloader.go +++ b/pkg/scripts/public_key_downloader/public_key_downloader.go @@ -74,7 +74,12 @@ func main() { func GetAndReturnBody(url string) *bytes.Buffer { log.Printf("Calling %s", url) - resp, err := http.Get(url) + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + panic(err) + } + + resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) }