Skip to content

Commit

Permalink
chore: Helpers cleanup continuation (#2726)
Browse files Browse the repository at this point in the history
- move schema helper methods
- move random helpers
  • Loading branch information
sfc-gh-asawicki authored Apr 18, 2024
1 parent 70b99fb commit a70d1af
Show file tree
Hide file tree
Showing 67 changed files with 238 additions and 207 deletions.
21 changes: 21 additions & 0 deletions pkg/acceptance/helpers/database_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,24 @@ func (d *DatabaseClient) CreateSecondaryDatabaseWithOptions(t *testing.T, id sdk
require.NoError(t, err)
}
}

func (d *DatabaseClient) UpdateDataRetentionTime(t *testing.T, id sdk.AccountObjectIdentifier, days int) func() {
t.Helper()
ctx := context.Background()

return func() {
err := d.client().Alter(ctx, id, &sdk.AlterDatabaseOptions{
Set: &sdk.DatabaseSet{
DataRetentionTimeInDays: sdk.Int(days),
},
})
require.NoError(t, err)
}
}

func (d *DatabaseClient) Show(t *testing.T, id sdk.AccountObjectIdentifier) (*sdk.Database, error) {
t.Helper()
ctx := context.Background()

return d.client().ShowByID(ctx, id)
}
File renamed without changes.
73 changes: 73 additions & 0 deletions pkg/acceptance/helpers/schema_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package helpers

import (
"context"
"testing"

"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random"
"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk"
"github.com/stretchr/testify/require"
)

type SchemaClient struct {
context *TestClientContext
}

func NewSchemaClient(context *TestClientContext) *SchemaClient {
return &SchemaClient{
context: context,
}
}

func (c *SchemaClient) client() sdk.Schemas {
return c.context.client.Schemas
}

func (c *SchemaClient) CreateSchema(t *testing.T, database *sdk.Database) (*sdk.Schema, func()) {
t.Helper()
return c.CreateSchemaWithIdentifier(t, database, random.StringRange(8, 28))
}

func (c *SchemaClient) CreateSchemaWithIdentifier(t *testing.T, database *sdk.Database, name string) (*sdk.Schema, func()) {
t.Helper()
ctx := context.Background()
schemaID := sdk.NewDatabaseObjectIdentifier(database.Name, name)
err := c.client().Create(ctx, schemaID, nil)
require.NoError(t, err)
schema, err := c.client().ShowByID(ctx, sdk.NewDatabaseObjectIdentifier(database.Name, name))
require.NoError(t, err)
return schema, c.DropSchemaFunc(t, schemaID)
}

func (c *SchemaClient) DropSchemaFunc(t *testing.T, id sdk.DatabaseObjectIdentifier) func() {
t.Helper()
ctx := context.Background()

return func() {
err := c.client().Drop(ctx, id, &sdk.DropSchemaOptions{IfExists: sdk.Bool(true)})
require.NoError(t, err)
err = c.context.client.Sessions.UseSchema(ctx, sdk.NewDatabaseObjectIdentifier(c.context.database, c.context.schema))
require.NoError(t, err)
}
}

func (c *SchemaClient) UpdateDataRetentionTime(t *testing.T, id sdk.DatabaseObjectIdentifier, days int) func() {
t.Helper()
ctx := context.Background()

return func() {
err := c.client().Alter(ctx, id, &sdk.AlterSchemaOptions{
Set: &sdk.SchemaSet{
DataRetentionTimeInDays: sdk.Int(days),
},
})
require.NoError(t, err)
}
}

func (c *SchemaClient) Show(t *testing.T, id sdk.DatabaseObjectIdentifier) (*sdk.Schema, error) {
t.Helper()
ctx := context.Background()

return c.client().ShowByID(ctx, id)
}
2 changes: 2 additions & 0 deletions pkg/acceptance/helpers/test_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ type TestClient struct {
context *TestClientContext

Database *DatabaseClient
Schema *SchemaClient
}

func NewTestClient(c *sdk.Client, database string, schema string, warehouse string) *TestClient {
Expand All @@ -18,6 +19,7 @@ func NewTestClient(c *sdk.Client, database string, schema string, warehouse stri
return &TestClient{
context: context,
Database: NewDatabaseClient(context),
Schema: NewSchemaClient(context),
}
}

Expand Down
39 changes: 15 additions & 24 deletions pkg/resources/database_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ func TestAcc_Database_DefaultDataRetentionTime(t *testing.T) {
ConfigVariables: configVariablesWithoutDatabaseDataRetentionTime(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "-1"),
checkAccountAndDatabaseDataRetentionTime(id, 5, 5),
checkAccountAndDatabaseDataRetentionTime(t, id, 5, 5),
),
},
{
Expand All @@ -222,47 +222,47 @@ func TestAcc_Database_DefaultDataRetentionTime(t *testing.T) {
ConfigVariables: configVariablesWithoutDatabaseDataRetentionTime(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "-1"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 10),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 10),
),
},
{
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithDataRetentionSet"),
ConfigVariables: configVariablesWithDatabaseDataRetentionTime(5),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "5"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 5),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 5),
),
},
{
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithDataRetentionSet"),
ConfigVariables: configVariablesWithDatabaseDataRetentionTime(15),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "15"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 15),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 15),
),
},
{
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithoutDataRetentionSet"),
ConfigVariables: configVariablesWithoutDatabaseDataRetentionTime(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "-1"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 10),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 10),
),
},
{
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithDataRetentionSet"),
ConfigVariables: configVariablesWithDatabaseDataRetentionTime(0),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "0"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 0),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 0),
),
},
{
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithDataRetentionSet"),
ConfigVariables: configVariablesWithDatabaseDataRetentionTime(3),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "3"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 3),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 3),
),
},
},
Expand Down Expand Up @@ -302,23 +302,16 @@ func TestAcc_Database_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.
ConfigVariables: configVariablesWithoutDatabaseDataRetentionTime(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "-1"),
checkAccountAndDatabaseDataRetentionTime(id, 5, 5),
checkAccountAndDatabaseDataRetentionTime(t, id, 5, 5),
),
},
{
PreConfig: func() {
err := client.Databases.Alter(context.Background(), id, &sdk.AlterDatabaseOptions{
Set: &sdk.DatabaseSet{
DataRetentionTimeInDays: sdk.Int(20),
},
})
require.NoError(t, err)
},
PreConfig: acc.TestClient().Database.UpdateDataRetentionTime(t, id, 20),
ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Database_DefaultDataRetentionTime/WithoutDataRetentionSet"),
ConfigVariables: configVariablesWithoutDatabaseDataRetentionTime(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "-1"),
checkAccountAndDatabaseDataRetentionTime(id, 5, 5),
checkAccountAndDatabaseDataRetentionTime(t, id, 5, 5),
),
},
{
Expand All @@ -327,7 +320,7 @@ func TestAcc_Database_DefaultDataRetentionTime_SetOutsideOfTerraform(t *testing.
ConfigVariables: configVariablesWithDatabaseDataRetentionTime(3),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("snowflake_database.test", "data_retention_time_in_days", "3"),
checkAccountAndDatabaseDataRetentionTime(id, 10, 3),
checkAccountAndDatabaseDataRetentionTime(t, id, 10, 3),
),
ConfigPlanChecks: resource.ConfigPlanChecks{
PostApplyPostRefresh: []plancheck.PlanCheck{
Expand Down Expand Up @@ -392,10 +385,7 @@ func getSecondaryAccount(t *testing.T) string {
func testAccCheckDatabaseExistence(t *testing.T, id string, shouldExist bool) func(state *terraform.State) error {
t.Helper()
return func(state *terraform.State) error {
client := acc.Client(t)
ctx := context.Background()

_, err := client.Databases.ShowByID(ctx, sdk.NewAccountObjectIdentifier(id))
_, err := acc.TestClient().Database.Show(t, sdk.NewAccountObjectIdentifier(id))
if shouldExist {
if err != nil {
return fmt.Errorf("error while retrieving database %s, err = %w", id, err)
Expand Down Expand Up @@ -436,13 +426,14 @@ func testAccCheckIfDatabaseIsReplicated(t *testing.T, id string) func(state *ter
}
}

func checkAccountAndDatabaseDataRetentionTime(id sdk.AccountObjectIdentifier, expectedAccountRetentionDays int, expectedDatabaseRetentionsDays int) func(state *terraform.State) error {
func checkAccountAndDatabaseDataRetentionTime(t *testing.T, id sdk.AccountObjectIdentifier, expectedAccountRetentionDays int, expectedDatabaseRetentionsDays int) func(state *terraform.State) error {
t.Helper()
return func(state *terraform.State) error {
providerContext := acc.TestAccProvider.Meta().(*provider.Context)
client := providerContext.Client
ctx := context.Background()

database, err := client.Databases.ShowByID(ctx, id)
database, err := acc.TestClient().Database.Show(t, id)
if err != nil {
return err
}
Expand Down
Loading

0 comments on commit a70d1af

Please sign in to comment.