Skip to content

Commit

Permalink
databricks#3950: added integration tests to the data_notification_des…
Browse files Browse the repository at this point in the history
…tinations resource
  • Loading branch information
dgomez04 committed Oct 8, 2024
1 parent 05eec9c commit e4aecf0
Show file tree
Hide file tree
Showing 2 changed files with 167 additions and 16 deletions.
18 changes: 9 additions & 9 deletions settings/data_notification_destinations.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
)

func DataSourceNotificationDestinations() common.Resource {
// dest
type notificationDestination struct {
Id string `json:"id,omitempty" tf:"computed"`
DisplayName string `json:"display_name,omitempty" tf:"computed"`
Expand All @@ -24,17 +23,18 @@ func DataSourceNotificationDestinations() common.Resource {
NotificationDestinations []notificationDestination `json:"notification_destinations,omitempty" tf:"computed"`
}

validTypes := map[string]struct{}{
string(settings.DestinationTypeEmail): {},
string(settings.DestinationTypeMicrosoftTeams): {},
string(settings.DestinationTypePagerduty): {},
string(settings.DestinationTypeSlack): {},
string(settings.DestinationTypeWebhook): {},
}

return common.WorkspaceData(func(ctx context.Context, data *notificationDestinationsData, w *databricks.WorkspaceClient) error {

if data.Type != "" {
switch data.Type {
case
string(settings.DestinationTypeEmail),
string(settings.DestinationTypeMicrosoftTeams),
string(settings.DestinationTypePagerduty),
string(settings.DestinationTypeSlack),
string(settings.DestinationTypeWebhook):
default:
if _, valid := validTypes[data.Type]; !valid {
return fmt.Errorf("invalid type '%s'; valid types are EMAIL, MICROSOFT_TEAMS, PAGERDUTY, SLACK, WEBHOOK", data.Type)
}
}
Expand Down
165 changes: 158 additions & 7 deletions settings/data_notification_destinations_test.go
Original file line number Diff line number Diff line change
@@ -1,29 +1,180 @@
package settings

import (
"fmt"
"testing"

"github.com/databricks/databricks-sdk-go/experimental/mocks"
"github.com/databricks/databricks-sdk-go/service/settings"
"github.com/databricks/terraform-provider-databricks/qa"
"github.com/stretchr/testify/mock"
)

func TestDataSourceNotificationDestinations(t *testing.T) {
func TestDataSourceNotificationDestinations_DisplayNameContains(t *testing.T) {
qa.ResourceFixture{
Fixtures: []qa.HTTPFixture{
// TODO: run this test to get fixtures
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
e := w.GetMockNotificationDestinationsAPI()
e.On("ListAll",
mock.Anything,
mock.Anything,
).Return([]settings.ListNotificationDestinationsResult{
{
Id: "1",
DisplayName: "test destination",
DestinationType: settings.DestinationTypeSlack,
},
{
Id: "2",
DisplayName: "another destination",
DestinationType: settings.DestinationTypeEmail,
},
}, nil)
},
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
}.ApplyNoError(t)
HCL: `
display_name_contains = "test"
`,
}.ApplyAndExpectData(t, map[string]any{
"notification_destinations.#": 1,
"notification_destinations.0.id": "1",
"notification_destinations.0.display_name": "test destination",
"notification_destinations.0.destination_type": "SLACK",
})
}

func TestCatalogsData_Error(t *testing.T) {
func TestDataSourceNotificationDestinations_Type(t *testing.T) {
qa.ResourceFixture{
Fixtures: qa.HTTPFailures,
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
e := w.GetMockNotificationDestinationsAPI()
e.On("ListAll",
mock.Anything,
mock.Anything,
).Return([]settings.ListNotificationDestinationsResult{
{
Id: "1",
DisplayName: "test destination",
DestinationType: settings.DestinationTypeSlack,
},
{
Id: "2",
DisplayName: "another destination",
DestinationType: settings.DestinationTypeEmail,
},
}, nil)
},
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
HCL: `
type = "SLACK"
`,
}.ApplyAndExpectData(t, map[string]any{
"notification_destinations.#": 1,
"notification_destinations.0.id": "1",
"notification_destinations.0.display_name": "test destination",
"notification_destinations.0.destination_type": "SLACK",
})
}

func TestDataSourceNotificationDestinations_DisplayNameAndType(t *testing.T) {
qa.ResourceFixture{
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
e := w.GetMockNotificationDestinationsAPI()
e.On("ListAll",
mock.Anything,
mock.Anything,
).Return([]settings.ListNotificationDestinationsResult{
{
Id: "1",
DisplayName: "test destination",
DestinationType: settings.DestinationTypeSlack,
},
{
Id: "2",
DisplayName: "another test destination",
DestinationType: settings.DestinationTypeEmail,
},
{
Id: "3",
DisplayName: "third destination",
DestinationType: settings.DestinationTypeSlack,
},
}, nil)
},
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
HCL: `
display_name_contains = "test"
type = "SLACK"
`,
}.ApplyAndExpectData(t, map[string]any{
"notification_destinations.#": 1,
"notification_destinations.0.id": "1",
"notification_destinations.0.display_name": "test destination",
"notification_destinations.0.destination_type": "SLACK",
})
}

func TestDataSourceNotificationDestinations_InvalidType(t *testing.T) {
qa.ResourceFixture{
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
HCL: `
type = "INVALID"
`,
}.ExpectError(t, "invalid type 'INVALID'; valid types are EMAIL, MICROSOFT_TEAMS, PAGERDUTY, SLACK, WEBHOOK")
}

func TestDataSourceNotificationDestinations_NoMatches(t *testing.T) {
qa.ResourceFixture{
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
e := w.GetMockNotificationDestinationsAPI()
e.On("ListAll",
mock.Anything,
mock.Anything,
).Return([]settings.ListNotificationDestinationsResult{
{
Id: "1",
DisplayName: "test destination",
DestinationType: settings.DestinationTypeSlack,
},
{
Id: "2",
DisplayName: "another destination",
DestinationType: settings.DestinationTypeEmail,
},
}, nil)
},
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
HCL: `
display_name_contains = "invalid"
`,
}.ExpectError(t, "could not find any notification destinations with the specified criteria")
}

func TestDataSourceNotificationDestinations_APIError(t *testing.T) {
qa.ResourceFixture{
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
e := w.GetMockNotificationDestinationsAPI()
e.On("ListAll",
mock.Anything,
mock.Anything,
).Return(nil, fmt.Errorf("api error"))
},
Resource: DataSourceNotificationDestinations(),
Read: true,
NonWritable: true,
ID: "_",
}.ExpectError(t, "i'm a teapot")
}.ExpectError(t, "api error")
}

0 comments on commit e4aecf0

Please sign in to comment.