Skip to content

Commit

Permalink
fix: showbyid method tests (#2648)
Browse files Browse the repository at this point in the history
<!-- Feel free to delete comments as you fill this in -->
fixes SNOW-1003308
<!-- summary of changes -->

## Test Plan
<!-- detail ways in which this PR has been tested or needs to be tested
-->
* [ ] acceptance tests


## References
<!-- issues documentation links, etc  -->

*
  • Loading branch information
sfc-gh-swinkler authored Apr 16, 2024
1 parent 8126b28 commit ff5e617
Show file tree
Hide file tree
Showing 36 changed files with 1,119 additions and 49 deletions.
4 changes: 4 additions & 0 deletions pkg/sdk/event_tables_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ type EventTable struct {
OwnerRoleType string
}

func (v *EventTable) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.DatabaseName, v.SchemaName, v.Name)
}

// DescribeEventTableOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-event-table.
type DescribeEventTableOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/sdk/event_tables_impl_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (v *eventTables) Show(ctx context.Context, request *ShowEventTableRequest)
}

func (v *eventTables) ShowByID(ctx context.Context, id SchemaObjectIdentifier) (*EventTable, error) {
request := NewShowEventTableRequest().WithIn(&In{Database: NewAccountObjectIdentifier(id.DatabaseName())}).WithLike(&Like{String(id.Name())})
request := NewShowEventTableRequest().WithIn(&In{Schema: NewDatabaseObjectIdentifier(id.DatabaseName(), id.SchemaName())}).WithLike(&Like{String(id.Name())})
eventTables, err := v.Show(ctx, request)
if err != nil {
return nil, err
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/external_functions_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ type ExternalFunction struct {
IsDataMetric bool
}

func (v *ExternalFunction) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.CatalogName, v.SchemaName, v.Name)
}

// DescribeExternalFunctionOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-function.
type DescribeExternalFunctionOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/functions_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,10 @@ type Function struct {
IsMemoizable bool
}

func (v *Function) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.CatalogName, v.SchemaName, v.Name)
}

// DescribeFunctionOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-function.
type DescribeFunctionOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/sdk/functions_impl_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (v *functions) Show(ctx context.Context, request *ShowFunctionRequest) ([]F
}

func (v *functions) ShowByID(ctx context.Context, id SchemaObjectIdentifier) (*Function, error) {
request := NewShowFunctionRequest().WithIn(&In{Database: NewAccountObjectIdentifier(id.DatabaseName())}).WithLike(&Like{String(id.Name())})
request := NewShowFunctionRequest().WithIn(&In{Schema: NewDatabaseObjectIdentifier(id.DatabaseName(), id.SchemaName())}).WithLike(&Like{String(id.Name())})
functions, err := v.Show(ctx, request)
if err != nil {
return nil, err
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/network_rule_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ type NetworkRule struct {
OwnerRoleType string
}

func (v *NetworkRule) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.DatabaseName, v.SchemaName, v.Name)
}

// DescribeNetworkRuleOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-network-rule.
type DescribeNetworkRuleOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/procedures_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,10 @@ type Procedure struct {
IsSecure bool
}

func (v *Procedure) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.CatalogName, v.SchemaName, v.Name)
}

// DescribeProcedureOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-procedure.
type DescribeProcedureOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/sdk/procedures_impl_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (v *procedures) Show(ctx context.Context, request *ShowProcedureRequest) ([
}

func (v *procedures) ShowByID(ctx context.Context, id SchemaObjectIdentifier) (*Procedure, error) {
request := NewShowProcedureRequest().WithIn(&In{Database: NewAccountObjectIdentifier(id.DatabaseName())}).WithLike(&Like{String(id.Name())})
request := NewShowProcedureRequest().WithIn(&In{Schema: NewDatabaseObjectIdentifier(id.DatabaseName(), id.SchemaName())}).WithLike(&Like{String(id.Name())})
procedures, err := v.Show(ctx, request)
if err != nil {
return nil, err
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/sequences_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ type Sequence struct {
Ordered bool
}

func (v *Sequence) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.DatabaseName, v.SchemaName, v.Name)
}

// DescribeSequenceOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-sequence.
type DescribeSequenceOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/streamlits_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ type Streamlit struct {
OwnerRoleType string
}

func (v *Streamlit) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.DatabaseName, v.SchemaName, v.Name)
}

// DescribeStreamlitOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-streamlit.
type DescribeStreamlitOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
4 changes: 4 additions & 0 deletions pkg/sdk/streams_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@ type Stream struct {
OwnerRoleType *string
}

func (v *Stream) ID() SchemaObjectIdentifier {
return NewSchemaObjectIdentifier(v.DatabaseName, v.SchemaName, v.Name)
}

// DescribeStreamOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-stream.
type DescribeStreamOptions struct {
describe bool `ddl:"static" sql:"DESCRIBE"`
Expand Down
47 changes: 47 additions & 0 deletions pkg/sdk/testint/alerts_integration_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package testint

import (
"errors"
"strings"
"testing"

Expand Down Expand Up @@ -378,3 +379,49 @@ func TestInt_AlertDrop(t *testing.T) {
assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized)
})
}

func TestInt_AlertsShowByID(t *testing.T) {
client := testClient(t)
ctx := testContext(t)

databaseTest, schemaTest, warehouseTest := testDb(t), testSchema(t), testWarehouse(t)
cleanupAlertHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) func() {
t.Helper()
return func() {
err := client.Alerts.Drop(ctx, id)
if errors.Is(err, sdk.ErrObjectNotExistOrAuthorized) {
return
}
require.NoError(t, err)
}
}

createAlertHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) {
t.Helper()

schedule, condition, action := "USING CRON * * * * * UTC", "SELECT 1", "SELECT 1"
err := client.Alerts.Create(ctx, id, warehouseTest.ID(), schedule, condition, action, &sdk.CreateAlertOptions{})
require.NoError(t, err)
t.Cleanup(cleanupAlertHandle(t, id))
}

t.Run("show by id - same name in different schemas", func(t *testing.T) {
schema, schemaCleanup := createSchemaWithIdentifier(t, client, databaseTest, random.AlphaN(8))
t.Cleanup(schemaCleanup)

name := random.AlphaN(4)
id1 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name)
id2 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, name)

createAlertHandle(t, id1)
createAlertHandle(t, id2)

e1, err := client.Alerts.ShowByID(ctx, id1)
require.NoError(t, err)
require.Equal(t, id1, e1.ID())

e2, err := client.Alerts.ShowByID(ctx, id2)
require.NoError(t, err)
require.Equal(t, id2, e2.ID())
})
}
2 changes: 1 addition & 1 deletion pkg/sdk/testint/application_roles_gen_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func TestInt_ApplicationRoles(t *testing.T) {
assertApplicationRole(t, appRole, name, comment)
}

t.Run("Show by id", func(t *testing.T) {
t.Run("show by id - same name in different schemas", func(t *testing.T) {
name := "app_role_1"
id := sdk.NewDatabaseObjectIdentifier(appName, name)
ctx := context.Background()
Expand Down
53 changes: 53 additions & 0 deletions pkg/sdk/testint/dynamic_table_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package testint

import (
"context"
"errors"
"testing"

"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk"
Expand Down Expand Up @@ -187,3 +188,55 @@ func TestInt_DynamicTableAlter(t *testing.T) {
}
})
}

func TestInt_DynamicTablesShowByID(t *testing.T) {
client := testClient(t)
ctx := context.Background()

warehouseTest, databaseTest, schemaTest := testWarehouse(t), testDb(t), testSchema(t)

cleanupDynamicTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) func() {
t.Helper()
return func() {
err := client.DynamicTables.Drop(ctx, sdk.NewDropDynamicTableRequest(id))
if errors.Is(err, sdk.ErrObjectNotExistOrAuthorized) {
return
}
require.NoError(t, err)
}
}

createDynamicTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) {
t.Helper()

tableTest, tableCleanup := createTable(t, client, databaseTest, schemaTest)
t.Cleanup(tableCleanup)
targetLag := sdk.TargetLag{
MaximumDuration: sdk.String("2 minutes"),
}
query := "select id from " + tableTest.ID().FullyQualifiedName()
err := client.DynamicTables.Create(ctx, sdk.NewCreateDynamicTableRequest(id, warehouseTest.ID(), targetLag, query).WithOrReplace(true))
require.NoError(t, err)
t.Cleanup(cleanupDynamicTableHandle(t, id))
}

t.Run("show by id - same name in different schemas", func(t *testing.T) {
schema, schemaCleanup := createSchemaWithIdentifier(t, client, databaseTest, random.AlphaN(8))
t.Cleanup(schemaCleanup)

name := random.AlphaN(4)
id1 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name)
id2 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, name)

createDynamicTableHandle(t, id1)
createDynamicTableHandle(t, id2)

e1, err := client.DynamicTables.ShowByID(ctx, id1)
require.NoError(t, err)
require.Equal(t, id1, e1.ID())

e2, err := client.DynamicTables.ShowByID(ctx, id2)
require.NoError(t, err)
require.Equal(t, id2, e2.ID())
})
}
45 changes: 44 additions & 1 deletion pkg/sdk/testint/event_tables_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestInt_EventTables(t *testing.T) {
tagTest, tagCleaup := createTag(t, client, databaseTest, schemaTest)
t.Cleanup(tagCleaup)

assertEventTableHandle := func(t *testing.T, et *sdk.EventTable, expectedName string, expectedComment string, expectedAllowedValues []string) {
assertEventTableHandle := func(t *testing.T, et *sdk.EventTable, expectedName string, expectedComment string, _ []string) {
t.Helper()
assert.NotEmpty(t, et.CreatedOn)
assert.Equal(t, expectedName, et.Name)
Expand Down Expand Up @@ -275,3 +275,46 @@ func TestInt_EventTables(t *testing.T) {
require.Error(t, err, "no rows in result set")
})
}

func TestInt_EventTableShowByID(t *testing.T) {
client := testClient(t)
ctx := testContext(t)

databaseTest, schemaTest := testDb(t), testSchema(t)

cleanupEventTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) func() {
t.Helper()
return func() {
err := client.EventTables.Drop(ctx, sdk.NewDropEventTableRequest(id).WithIfExists(sdk.Bool(true)))
require.NoError(t, err)
}
}

createEventTableHandle := func(t *testing.T, id sdk.SchemaObjectIdentifier) {
t.Helper()

err := client.EventTables.Create(ctx, sdk.NewCreateEventTableRequest(id))
require.NoError(t, err)
t.Cleanup(cleanupEventTableHandle(t, id))
}

t.Run("show by id - same name in different schemas", func(t *testing.T) {
schema, schemaCleanup := createSchemaWithIdentifier(t, client, databaseTest, random.AlphaN(8))
t.Cleanup(schemaCleanup)

name := random.AlphaN(4)
id1 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name)
id2 := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, name)

createEventTableHandle(t, id1)
createEventTableHandle(t, id2)

e1, err := client.EventTables.ShowByID(ctx, id1)
require.NoError(t, err)
require.Equal(t, id1, e1.ID())

e2, err := client.EventTables.ShowByID(ctx, id2)
require.NoError(t, err)
require.Equal(t, id2, e2.ID())
})
}
Loading

0 comments on commit ff5e617

Please sign in to comment.