From 2d2b7c1954d9342ae9dc89017f23b6a877f116e6 Mon Sep 17 00:00:00 2001 From: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com> Date: Thu, 13 Feb 2025 00:51:18 +0100 Subject: [PATCH] feat(kql_database): add definition support (#215) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # 📥 Pull Request ## ❓ What are you trying to address Add definition support to the KQL Database --- .../unreleased/added-20250125-102124.yaml | 5 + docs/data-sources/kql_database.md | 15 ++ docs/resources/kql_database.md | 29 +++- internal/services/kqldatabase/base.go | 14 +- .../services/kqldatabase/data_kql_database.go | 16 +-- .../kqldatabase/data_kql_database_test.go | 45 +++--- .../kqldatabase/resource_kql_database.go | 49 +++---- .../kqldatabase/resource_kql_database_test.go | 136 +++++++++--------- 8 files changed, 178 insertions(+), 131 deletions(-) create mode 100644 .changes/unreleased/added-20250125-102124.yaml diff --git a/.changes/unreleased/added-20250125-102124.yaml b/.changes/unreleased/added-20250125-102124.yaml new file mode 100644 index 00000000..e6c26fe9 --- /dev/null +++ b/.changes/unreleased/added-20250125-102124.yaml @@ -0,0 +1,5 @@ +kind: added +body: Definition support in the `fabric_kql_database` Resource / Data-Source +time: 2025-01-25T10:21:24.6864838+01:00 +custom: + Issue: "215" diff --git a/docs/data-sources/kql_database.md b/docs/data-sources/kql_database.md index 7eaf73b9..a4fac753 100644 --- a/docs/data-sources/kql_database.md +++ b/docs/data-sources/kql_database.md @@ -48,11 +48,17 @@ data "fabric_kql_database" "example_by_name" { ### Optional - `display_name` (String) The KQL Database display name. +- `format` (String) The KQL Database format. Possible values: `Default` - `id` (String) The KQL Database ID. +- `output_definition` (Boolean) Output definition parts as gzip base64 content? Default: `false` + +!> Your terraform state file may grow a lot if you output definition content. Only use it when you must use data from the definition. + - `timeouts` (Attributes) (see [below for nested schema](#nestedatt--timeouts)) ### Read-Only +- `definition` (Attributes Map) Definition parts. Possible path keys: **Default** format: `DatabaseProperties.json`, `DatabaseSchema.kql` (see [below for nested schema](#nestedatt--definition)) - `description` (String) The KQL Database description. - `properties` (Attributes) The KQL Database properties. (see [below for nested schema](#nestedatt--properties)) @@ -64,6 +70,15 @@ Optional: - `read` (String) A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + + +### Nested Schema for `definition` + +Read-Only: + +- `content` (String) Gzip base64 content of definition part. +Use [`provider::fabric::content_decode`](../functions/content_decode.md) function to decode content. + ### Nested Schema for `properties` diff --git a/docs/resources/kql_database.md b/docs/resources/kql_database.md index 112e0b1d..6c930dcb 100644 --- a/docs/resources/kql_database.md +++ b/docs/resources/kql_database.md @@ -73,16 +73,19 @@ resource "fabric_kql_database" "example4" { ### Required -- `configuration` (Attributes) The KQL Database creation configuration. - -Any changes to this configuration will result in recreation of the KQL Database. (see [below for nested schema](#nestedatt--configuration)) - - `display_name` (String) The KQL Database display name. - `workspace_id` (String) The Workspace ID. ### Optional +- `configuration` (Attributes) The KQL Database creation configuration. + +Any changes to this configuration will result in recreation of the KQL Database. (see [below for nested schema](#nestedatt--configuration)) + +- `definition` (Attributes Map) Definition parts. Read more about [KQL Database definition part paths](https://learn.microsoft.com/rest/api/fabric/articles/item-management/definitions/kql-database-definition). Accepted path keys: **Default** format: `DatabaseProperties.json`, `DatabaseSchema.kql` (see [below for nested schema](#nestedatt--definition)) +- `definition_update_enabled` (Boolean) Update definition on change of source content. Default: `true`. - `description` (String) The KQL Database description. +- `format` (String) The KQL Database format. Possible values: `Default` - `timeouts` (Attributes) (see [below for nested schema](#nestedatt--timeouts)) ### Read-Only @@ -110,6 +113,24 @@ Optional: - `source_cluster_uri` (String) The URI of the source Eventhouse or Azure Data Explorer cluster. Only allowed when `database_type` is `Shortcut`. - `source_database_name` (String) The name of the database to follow in the source Eventhouse or Azure Data Explorer cluster. Only allowed when `database_type` is `Shortcut`. + + +### Nested Schema for `definition` + +Required: + +- `source` (String) Path to the file with source of the definition part. + +The source content may include placeholders for token substitution. Use the dot with the token name `{{ .TokenName }}`. + +Optional: + +- `tokens` (Map of String) A map of key/value pairs of tokens substitutes in the source. + +Read-Only: + +- `source_content_sha256` (String) SHA256 of source's content of definition part. + ### Nested Schema for `timeouts` diff --git a/internal/services/kqldatabase/base.go b/internal/services/kqldatabase/base.go index c82c7a7b..1d83b64d 100644 --- a/internal/services/kqldatabase/base.go +++ b/internal/services/kqldatabase/base.go @@ -22,10 +22,10 @@ const ( ItemDefinitionPathDocsURL = "https://learn.microsoft.com/rest/api/fabric/articles/item-management/definitions/kql-database-definition" ) -// var itemDefinitionFormats = []fabricitem.DefinitionFormat{ //nolint:gochecknoglobals -// { -// Type: fabricitem.DefinitionFormatDefault, -// API: "", -// Paths: []string{"DatabaseProperties.json", "DatabaseSchema.kql"}, -// }, -// } +var itemDefinitionFormats = []fabricitem.DefinitionFormat{ //nolint:gochecknoglobals + { + Type: fabricitem.DefinitionFormatDefault, + API: "", + Paths: []string{"DatabaseProperties.json", "DatabaseSchema.kql"}, + }, +} diff --git a/internal/services/kqldatabase/data_kql_database.go b/internal/services/kqldatabase/data_kql_database.go index 08417ed4..594c03a0 100644 --- a/internal/services/kqldatabase/data_kql_database.go +++ b/internal/services/kqldatabase/data_kql_database.go @@ -17,7 +17,7 @@ import ( ) func NewDataSourceKQLDatabase() datasource.DataSource { - propertiesSetter := func(ctx context.Context, from *fabkqldatabase.Properties, to *fabricitem.DataSourceFabricItemPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties]) diag.Diagnostics { + propertiesSetter := func(ctx context.Context, from *fabkqldatabase.Properties, to *fabricitem.DataSourceFabricItemDefinitionPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties]) diag.Diagnostics { properties := supertypes.NewSingleNestedObjectValueOfNull[kqlDatabasePropertiesModel](ctx) if from != nil { @@ -34,7 +34,7 @@ func NewDataSourceKQLDatabase() datasource.DataSource { return nil } - itemGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.DataSourceFabricItemPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties], fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { + itemGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.DataSourceFabricItemDefinitionPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties], fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { client := fabkqldatabase.NewClientFactoryWithClient(fabricClient).NewItemsClient() respGet, err := client.GetKQLDatabase(ctx, model.WorkspaceID.ValueString(), model.ID.ValueString(), nil) @@ -47,7 +47,7 @@ func NewDataSourceKQLDatabase() datasource.DataSource { return nil } - itemListGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.DataSourceFabricItemPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties], errNotFound fabcore.ResponseError, fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { + itemListGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.DataSourceFabricItemDefinitionPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties], errNotFound fabcore.ResponseError, fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { client := fabkqldatabase.NewClientFactoryWithClient(fabricClient).NewItemsClient() pager := client.NewListKQLDatabasesPager(model.WorkspaceID.ValueString(), nil) @@ -69,8 +69,8 @@ func NewDataSourceKQLDatabase() datasource.DataSource { return &errNotFound } - config := fabricitem.DataSourceFabricItemProperties[kqlDatabasePropertiesModel, fabkqldatabase.Properties]{ - DataSourceFabricItem: fabricitem.DataSourceFabricItem{ + config := fabricitem.DataSourceFabricItemDefinitionProperties[kqlDatabasePropertiesModel, fabkqldatabase.Properties]{ + DataSourceFabricItemDefinition: fabricitem.DataSourceFabricItemDefinition{ Type: ItemType, Name: ItemName, TFName: ItemTFName, @@ -78,9 +78,7 @@ func NewDataSourceKQLDatabase() datasource.DataSource { "Use this data source to fetch a [" + ItemName + "](" + ItemDocsURL + ").\n\n" + ItemDocsSPNSupport, IsDisplayNameUnique: true, - // FormatTypeDefault: ItemFormatTypeDefault, - // FormatTypes: ItemFormatTypes, - // DefinitionPathKeys: ItemDefinitionPaths, + DefinitionFormats: itemDefinitionFormats, }, PropertiesAttributes: getDataSourceKQLDatabasePropertiesAttributes(), PropertiesSetter: propertiesSetter, @@ -88,5 +86,5 @@ func NewDataSourceKQLDatabase() datasource.DataSource { ItemListGetter: itemListGetter, } - return fabricitem.NewDataSourceFabricItemProperties(config) + return fabricitem.NewDataSourceFabricItemDefinitionProperties(config) } diff --git a/internal/services/kqldatabase/data_kql_database_test.go b/internal/services/kqldatabase/data_kql_database_test.go index 7f1884cb..a8059597 100644 --- a/internal/services/kqldatabase/data_kql_database_test.go +++ b/internal/services/kqldatabase/data_kql_database_test.go @@ -234,27 +234,28 @@ func TestAcc_KQLDatabaseDataSource(t *testing.T) { ExpectError: regexp.MustCompile(common.ErrorReadHeader), }, // read by id with definition - // { - // ResourceName: testDataSourceItemFQN, - // Config: at.CompileConfig( - // testDataSourceItemHeader, - // map[string]any{ - // "workspace_id": workspaceID, - // "id": entityID, - // "output_definition": true, - // }, - // ), - // Check: resource.ComposeAggregateTestCheckFunc( - // resource.TestCheckResourceAttr(testDataSourceItemFQN, "workspace_id", workspaceID), - // resource.TestCheckResourceAttr(testDataSourceItemFQN, "id", entityID), - // resource.TestCheckResourceAttr(testDataSourceItemFQN, "display_name", entityDisplayName), - // resource.TestCheckResourceAttr(testDataSourceItemFQN, "description", entityDescription), - // resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.query_service_uri"), - // resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.ingestion_service_uri"), - // resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.eventhouse_id"), - // resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.database_type"), - // resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "definition.DatabaseProperties.json.content"), - // ), - // }, + { + ResourceName: testDataSourceItemFQN, + Config: at.CompileConfig( + testDataSourceItemHeader, + map[string]any{ + "workspace_id": workspaceID, + "id": entityID, + "format": "Default", + "output_definition": true, + }, + ), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(testDataSourceItemFQN, "workspace_id", workspaceID), + resource.TestCheckResourceAttr(testDataSourceItemFQN, "id", entityID), + resource.TestCheckResourceAttr(testDataSourceItemFQN, "display_name", entityDisplayName), + resource.TestCheckResourceAttr(testDataSourceItemFQN, "description", entityDescription), + resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.query_service_uri"), + resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.ingestion_service_uri"), + resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.eventhouse_id"), + resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "properties.database_type"), + resource.TestCheckResourceAttrSet(testDataSourceItemFQN, "definition.DatabaseProperties.json.content"), + ), + }, })) } diff --git a/internal/services/kqldatabase/resource_kql_database.go b/internal/services/kqldatabase/resource_kql_database.go index 1e8e507c..604c20c5 100644 --- a/internal/services/kqldatabase/resource_kql_database.go +++ b/internal/services/kqldatabase/resource_kql_database.go @@ -7,8 +7,10 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform-plugin-framework-validators/mapvalidator" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/microsoft/fabric-sdk-go/fabric" fabkqldatabase "github.com/microsoft/fabric-sdk-go/fabric/kqldatabase" supertypes "github.com/orange-cloudavenue/terraform-plugin-framework-supertypes" @@ -60,7 +62,7 @@ func NewResourceKQLDatabase() resource.Resource { return &cp, nil } - propertiesSetter := func(ctx context.Context, from *fabkqldatabase.Properties, to *fabricitem.ResourceFabricItemConfigPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification]) diag.Diagnostics { + propertiesSetter := func(ctx context.Context, from *fabkqldatabase.Properties, to *fabricitem.ResourceFabricItemConfigDefinitionPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification]) diag.Diagnostics { properties := supertypes.NewSingleNestedObjectValueOfNull[kqlDatabasePropertiesModel](ctx) if from != nil { @@ -77,7 +79,7 @@ func NewResourceKQLDatabase() resource.Resource { return nil } - itemGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.ResourceFabricItemConfigPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification], fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { + itemGetter := func(ctx context.Context, fabricClient fabric.Client, model fabricitem.ResourceFabricItemConfigDefinitionPropertiesModel[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification], fabricItem *fabricitem.FabricItemProperties[fabkqldatabase.Properties]) error { client := fabkqldatabase.NewClientFactoryWithClient(fabricClient).NewItemsClient() respGet, err := client.GetKQLDatabase(ctx, model.WorkspaceID.ValueString(), model.ID.ValueString(), nil) @@ -90,8 +92,8 @@ func NewResourceKQLDatabase() resource.Resource { return nil } - config := fabricitem.ResourceFabricItemConfigProperties[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification]{ - ResourceFabricItem: fabricitem.ResourceFabricItem{ + config := fabricitem.ResourceFabricItemConfigDefinitionProperties[kqlDatabasePropertiesModel, fabkqldatabase.Properties, kqlDatabaseConfigurationModel, fabkqldatabase.CreationPayloadClassification]{ + ResourceFabricItemDefinition: fabricitem.ResourceFabricItemDefinition{ Type: ItemType, Name: ItemName, NameRenameAllowed: true, @@ -99,27 +101,26 @@ func NewResourceKQLDatabase() resource.Resource { MarkdownDescription: "Manage a Fabric " + ItemName + ".\n\n" + "Use this resource to manage a [" + ItemName + "](" + ItemDocsURL + ").\n\n" + ItemDocsSPNSupport, - DisplayNameMaxLength: 123, - DescriptionMaxLength: 256, - // FormatTypeDefault: ItemFormatTypeDefault, - // FormatTypes: ItemFormatTypes, - // DefinitionPathDocsURL: ItemDefinitionPathDocsURL, - // DefinitionPathKeys: ItemDefinitionPaths, - // DefinitionPathKeysValidator: []validator.Map{ - // mapvalidator.SizeAtLeast(2), - // mapvalidator.SizeAtMost(2), - // mapvalidator.KeysAre(stringvalidator.OneOf(ItemDefinitionPaths...)), - // }, - // DefinitionRequired: false, - // DefinitionEmpty: "", + DisplayNameMaxLength: 123, + DescriptionMaxLength: 256, + DefinitionPathDocsURL: ItemDefinitionPathDocsURL, + DefinitionFormats: itemDefinitionFormats, + DefinitionPathKeysValidator: []validator.Map{ + mapvalidator.SizeAtLeast(2), + mapvalidator.SizeAtMost(2), + mapvalidator.KeysAre(fabricitem.DefinitionPathKeysValidator(itemDefinitionFormats)...), + }, + DefinitionRequired: false, + DefinitionEmpty: "", }, - ConfigRequired: true, - ConfigAttributes: getResourceKQLDatabaseConfigurationAttributes(), - CreationPayloadSetter: creationPayloadSetter, - PropertiesAttributes: getResourceKQLDatabasePropertiesAttributes(), - PropertiesSetter: propertiesSetter, - ItemGetter: itemGetter, + ConfigRequired: false, + ConfigOrDefinitionRequired: true, + ConfigAttributes: getResourceKQLDatabaseConfigurationAttributes(), + CreationPayloadSetter: creationPayloadSetter, + PropertiesAttributes: getResourceKQLDatabasePropertiesAttributes(), + PropertiesSetter: propertiesSetter, + ItemGetter: itemGetter, } - return fabricitem.NewResourceFabricItemConfigProperties(config) + return fabricitem.NewResourceFabricItemConfigDefinitionProperties(config) } diff --git a/internal/services/kqldatabase/resource_kql_database_test.go b/internal/services/kqldatabase/resource_kql_database_test.go index 507ba603..3f236f65 100644 --- a/internal/services/kqldatabase/resource_kql_database_test.go +++ b/internal/services/kqldatabase/resource_kql_database_test.go @@ -477,72 +477,78 @@ func TestAcc_KQLDatabaseConfigurationResource_CRUD(t *testing.T) { )) } -// func TestAcc_KQLDatabaseDefinitionResource_CRUD(t *testing.T) { -// workspace := testhelp.WellKnown()["WorkspaceRS"].(map[string]any) -// workspaceID := workspace["id"].(string) +func TestAcc_KQLDatabaseDefinitionResource_CRUD(t *testing.T) { + testHelperLocals := at.CompileLocalsConfig(map[string]any{ + "path": testhelp.GetFixturesDirPath("kql_database"), + }) -// eventhouseResourceHCL, eventhouseResourceFQN := eventhouseResource(t, workspaceID) + workspace := testhelp.WellKnown()["WorkspaceRS"].(map[string]any) + workspaceID := workspace["id"].(string) -// testHelperDefinition := map[string]any{ -// `"DatabaseProperties.json"`: map[string]any{ -// "source": "${local.path}/DatabaseProperties.json.tmpl", -// "tokens": map[string]any{ -// "EventhouseID": testhelp.RefByFQN(eventhouseResourceFQN, "id"), -// }, -// }, -// `"DatabaseSchema.kql"`: map[string]any{ -// "source": "${local.path}/DatabaseSchema.kql", -// }, -// } + eventhouseResourceHCL, eventhouseResourceFQN := eventhouseResource(t, workspaceID) -// entityCreateDisplayName := testhelp.RandomName() -// entityUpdateDisplayName := testhelp.RandomName() -// entityUpdateDescription := testhelp.RandomName() + testHelperDefinition := map[string]any{ + `"DatabaseProperties.json"`: map[string]any{ + "source": "${local.path}/DatabaseProperties.json.tmpl", + "tokens": map[string]any{ + "EventhouseID": testhelp.RefByFQN(eventhouseResourceFQN, "id"), + }, + }, + `"DatabaseSchema.kql"`: map[string]any{ + "source": "${local.path}/DatabaseSchema.kql", + }, + } -// resource.Test(t, testhelp.NewTestAccCase(t, &testResourceItemFQN, nil, []resource.TestStep{ -// // Create and Read -// { -// ResourceName: testResourceItemFQN, -// Config: at.JoinConfigs( -// eventhouseResourceHCL, -// testHelperLocals, -// at.CompileConfig( -// testResourceItemHeader, -// map[string]any{ -// "workspace_id": workspaceID, -// "display_name": entityCreateDisplayName, -// "definition": testHelperDefinition, -// }, -// ), -// ), -// Check: resource.ComposeAggregateTestCheckFunc( -// resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityCreateDisplayName), -// resource.TestCheckResourceAttr(testResourceItemFQN, "description", ""), -// resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"), -// ), -// }, -// // Update and Read -// { -// ResourceName: testResourceItemFQN, -// Config: at.JoinConfigs( -// eventhouseResourceHCL, -// testHelperLocals, -// at.CompileConfig( -// testResourceItemHeader, -// map[string]any{ -// "workspace_id": workspaceID, -// "display_name": entityUpdateDisplayName, -// "description": entityUpdateDescription, -// "definition": testHelperDefinition, -// }, -// ), -// ), -// Check: resource.ComposeAggregateTestCheckFunc( -// resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityUpdateDisplayName), -// resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityUpdateDescription), -// resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"), -// ), -// }, -// }, -// )) -// } + entityCreateDisplayName := testhelp.RandomName() + entityUpdateDisplayName := testhelp.RandomName() + entityUpdateDescription := testhelp.RandomName() + + resource.Test(t, testhelp.NewTestAccCase(t, &testResourceItemFQN, nil, []resource.TestStep{ + // Create and Read + { + ResourceName: testResourceItemFQN, + Config: at.JoinConfigs( + eventhouseResourceHCL, + testHelperLocals, + at.CompileConfig( + testResourceItemHeader, + map[string]any{ + "workspace_id": workspaceID, + "display_name": entityCreateDisplayName, + "format": "Default", + "definition": testHelperDefinition, + }, + ), + ), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityCreateDisplayName), + resource.TestCheckResourceAttr(testResourceItemFQN, "description", ""), + resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"), + ), + }, + // Update and Read + { + ResourceName: testResourceItemFQN, + Config: at.JoinConfigs( + eventhouseResourceHCL, + testHelperLocals, + at.CompileConfig( + testResourceItemHeader, + map[string]any{ + "workspace_id": workspaceID, + "display_name": entityUpdateDisplayName, + "description": entityUpdateDescription, + "format": "Default", + "definition": testHelperDefinition, + }, + ), + ), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(testResourceItemFQN, "display_name", entityUpdateDisplayName), + resource.TestCheckResourceAttr(testResourceItemFQN, "description", entityUpdateDescription), + resource.TestCheckResourceAttr(testResourceItemFQN, "definition_update_enabled", "true"), + ), + }, + }, + )) +}