Skip to content

Commit

Permalink
final commit without update defintion E2E
Browse files Browse the repository at this point in the history
  • Loading branch information
OrBaubergMicrosoft committed Mar 5, 2025
1 parent 2653ae2 commit 6c9ba2d
Show file tree
Hide file tree
Showing 6 changed files with 150 additions and 64 deletions.
16 changes: 8 additions & 8 deletions internal/services/mirroreddatabase/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@ const (
ItemType = fabcore.ItemTypeMirroredDatabase
ItemDocsSPNSupport = common.DocsSPNSupported
ItemDocsURL = "https://learn.microsoft.com/en-us/fabric/database/mirrored-database/overview"
ItemDefinitionEmpty = `{
"properties": {
ItemDefinitionEmpty = `
{
"properties": {
"source": {
"type": "",
"typeProperties": null
"type": "GenericMirror"
},
"target": {
"type": "",
"type": "MountedRelationalDatabase",
"typeProperties": {
"format": "",
"defaultSchema": ""
"format": "Delta",
"defaultSchema": "dbo"
}
}
}
}
}`
ItemDefinitionPathDocsURL = "https://learn.microsoft.com/en-us/rest/api/fabric/articles/item-management/definitions/mirrored-database-definition"
)
Expand Down
46 changes: 15 additions & 31 deletions internal/services/mirroreddatabase/data_mirrored_database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ func TestUnit_MirroredDatabaseDataSource(t *testing.T) {
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "id", entity.ID),
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "display_name", entity.DisplayName),
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "description", entity.Description),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.id"),
),
},
// read by id - not found
Expand Down Expand Up @@ -132,6 +137,11 @@ func TestUnit_MirroredDatabaseDataSource(t *testing.T) {
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "id", entity.ID),
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "display_name", entity.DisplayName),
resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "description", entity.Description),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.id"),
),
},
// read by display name - not found
Expand All @@ -145,37 +155,6 @@ func TestUnit_MirroredDatabaseDataSource(t *testing.T) {
),
ExpectError: regexp.MustCompile(common.ErrorReadHeader),
},
// // read by id with definition - missing required format configuration
// {
// Config: at.CompileConfig(
// testDataSourceMirroredDatabaseHeader,
// map[string]any{
// "workspace_id": workspaceID,
// "id": *entity.ID,
// "output_definition": true,
// },
// ),
// ExpectError: regexp.MustCompile("Invalid configuration for attribute format"),
// },
// // read by id with definition - success
// {
// Config: at.CompileConfig(
// testDataSourceMirroredDatabaseHeader,
// map[string]any{
// "workspace_id": workspaceID,
// "id": *entity.ID,
// "output_definition": true,
// "format": "Default",
// },
// ),
// Check: resource.ComposeAggregateTestCheckFunc(
// resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "workspace_id", entity.WorkspaceID),
// resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "id", entity.ID),
// resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "display_name", entity.DisplayName),
// resource.TestCheckResourceAttrPtr(testDataSourceMirroredDatabaseFQN, "description", entity.Description),
// resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "definition.mirroring.json.content"),
// ),
// },
}))
}

Expand Down Expand Up @@ -203,6 +182,11 @@ func TestAcc_MirroredDatabaseDataSource(t *testing.T) {
resource.TestCheckResourceAttr(testDataSourceMirroredDatabaseFQN, "id", entityID),
resource.TestCheckResourceAttr(testDataSourceMirroredDatabaseFQN, "display_name", entityDisplayName),
resource.TestCheckResourceAttr(testDataSourceMirroredDatabaseFQN, "description", entityDescription),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabaseFQN, "properties.sql_endpoint_properties.id"),
),
},
// read by id - not found
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ func TestUnit_MirroredDatabasesDataSource(t *testing.T) {
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabasesFQN, "values.1.properties.default_schema"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabasesFQN, "values.1.properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabasesFQN, "values.1.properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabasesFQN, "values.1.properties.sql_endpoint_properties.id"),
resource.TestCheckResourceAttrSet(testDataSourceMirroredDatabasesFQN, "values.1.properties.sql_endpoint_properties.provisioning_status"),
),
},
}))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func NewResourceMirroredDatabase() resource.Resource {
mapvalidator.SizeAtMost(1),
mapvalidator.KeysAre(fabricitem.DefinitionPathKeysValidator(itemDefinitionFormats)...),
},
DefinitionRequired: false,
DefinitionRequired: true,
DefinitionEmpty: ItemDefinitionEmpty,
DefinitionFormats: itemDefinitionFormats,
},
Expand Down
134 changes: 110 additions & 24 deletions internal/services/mirroreddatabase/resource_mirrored_database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"regexp"
"testing"
"time"

at "github.com/dcarbone/terraform-plugin-framework-utils/v3/acctest"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
Expand All @@ -31,6 +32,12 @@ var testHelperDefinition = map[string]any{
},
}

// var testHelperDefinitionUpdate = map[string]any{
// `"mirroring.json"`: map[string]any{
// "source": "${local.path}/mirroring_update.json",
// },
// }

func TestUnit_MirroredDatabaseResource_Attributes(t *testing.T) {
resource.ParallelTest(t, testhelp.NewTestUnitCase(t, &testResourceItemFQN, fakes.FakeServer.ServerFactory, nil, []resource.TestStep{
// error - no attributes
Expand Down Expand Up @@ -214,6 +221,21 @@ func TestUnit_MirroredDatabaseResource_CRUD(t *testing.T) {
)),
ExpectError: regexp.MustCompile(common.ErrorCreateHeader),
},
// error - no required attributes
{
ResourceName: testResourceItemFQN,
Config: at.JoinConfigs(
testHelperLocals,
at.CompileConfig(
testResourceItemHeader,
map[string]any{
"workspace_id": "00000000-0000-0000-0000-000000000000",
"display_name": "test",
"format": "Default",
},
)),
ExpectError: regexp.MustCompile(`The argument "definition" is required, but no definition was found.`),
},
// Create and Read with definition
{
ResourceName: testResourceItemFQN,
Expand All @@ -236,27 +258,8 @@ func TestUnit_MirroredDatabaseResource_CRUD(t *testing.T) {
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),
),
},
// Create and Read without definition
{
ResourceName: testResourceItemFQN,
Config: at.CompileConfig(
testResourceItemHeader,
map[string]any{
"workspace_id": *entityNoDefinition.WorkspaceID,
"display_name": *entityNoDefinition.DisplayName,
"description": *entityNoDefinition.Description,
}),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttrPtr(testResourceItemFQN, "display_name", entityNoDefinition.DisplayName),
resource.TestCheckResourceAttrPtr(testResourceItemFQN, "description", entityNoDefinition.Description),
resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckNoResourceAttr(testResourceItemFQN, "definition"),
resource.TestCheckNoResourceAttr(testResourceItemFQN, "format"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.id"),
),
},
// Update and Read
Expand All @@ -281,9 +284,10 @@ func TestUnit_MirroredDatabaseResource_CRUD(t *testing.T) {
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.default_schema"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.id"),
),
},
// Delete testing automatically occurs in TestCase
}))
}

Expand Down Expand Up @@ -316,9 +320,17 @@ func TestAcc_MirroredDatabaseResource_CRUD(t *testing.T) {
resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityCreateDisplayName),
resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityCreateDescription),
resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"),

// wait before update definition
func(s *terraform.State) error {

Check failure on line 325 in internal/services/mirroreddatabase/resource_mirrored_database_test.go

View workflow job for this annotation

GitHub Actions / 🏗️ Check Build

unused-parameter: parameter 's' seems to be unused, consider removing or renaming it as _ (revive)
// Add a 30-second sleep between test steps in order to allow the Fabric service to complete the provisioning
t.Log("Sleeping for 30 seconds before the next step...")
time.Sleep(30 * time.Second)
return nil
},
),
},
// Update definition and Read
// Update and Read
{
ResourceName: testResourceItemFQN,
Config: at.JoinConfigs(
Expand All @@ -336,8 +348,82 @@ func TestAcc_MirroredDatabaseResource_CRUD(t *testing.T) {
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityUpdateDisplayName),
resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityUpdateDescription),
resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true")),
resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"),
resource.TestCheckResourceAttr(testResourceItemFQN, "properties.default_schema", "dbo"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.onelake_tables_path"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.connection_string"),
resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.id"),
),
},
},
))
}

// func TestAcc_MirroredDatabaseResource_UpdateDefinition(t *testing.T) {
// workspace := testhelp.WellKnown()["WorkspaceDS"].(map[string]any)
// workspaceID := workspace["id"].(string)

// entityDisplayName := testhelp.RandomName()
// entityDescription := testhelp.RandomName()

// resource.Test(t, testhelp.NewTestAccCase(t, &testResourceItemFQN, nil, []resource.TestStep{
// // Create with initial definition and Read
// {
// ResourceName: testResourceItemFQN,
// Config: at.JoinConfigs(
// testHelperLocals,
// at.CompileConfig(
// testResourceItemHeader,
// map[string]any{
// "workspace_id": workspaceID,
// "display_name": entityDisplayName,
// "description": entityDescription,
// "format": "Default",
// "definition": testHelperDefinition,
// },
// )),
// Check: resource.ComposeAggregateTestCheckFunc(
// resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityDisplayName),
// resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityDescription),
// resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"),
// resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),

// // wait before updating definition
// func(s *terraform.State) error {
// // Add a 30-second sleep between test steps in order to allow the Fabric service to complete the provisioning
// t.Log("Sleeping for 30 seconds before updating the definition...")
// time.Sleep(30 * time.Second)
// return nil
// },
// ),
// },
// // Update definition and Read
// {
// ResourceName: testResourceItemFQN,
// Config: at.JoinConfigs(
// testHelperLocals,
// at.CompileConfig(
// testResourceItemHeader,
// map[string]any{
// "workspace_id": workspaceID,
// "display_name": entityDisplayName,
// "description": entityDescription,
// "format": "Default",
// "definition": testHelperDefinitionUpdate, // updated definition
// "definition_update_enabled": true,
// },
// )),
// Check: resource.ComposeAggregateTestCheckFunc(
// resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityDisplayName),
// resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityDescription),
// resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"),
// resource.TestCheckResourceAttr(testResourceItemFQN, "properties.default_schema", "dbo"),
// resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.onelake_tables_path"),
// resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.provisioning_status"),
// resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.connection_string"),
// resource.TestCheckResourceAttrSet(testResourceItemFQN, "properties.sql_endpoint_properties.id"),
// ),
// },
// }))
// }
14 changes: 14 additions & 0 deletions internal/testhelp/fixtures/mirrored_database/mirroring_update.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"properties": {
"source": {
"type": "GenericMirror"
},
"target": {
"type": "MountedRelationalDatabase",
"typeProperties": {
"format": "Delta",
"defaultSchema": "updated_schema"
}
}
}
}

0 comments on commit 6c9ba2d

Please sign in to comment.