@itwin/core-backend 5.8.0-dev.8 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +5 -0
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +20 -11
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +28 -4
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +6 -0
- package/lib/cjs/LineStyle.d.ts.map +1 -1
- package/lib/cjs/LineStyle.js +41 -32
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts +17 -10
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +127 -29
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.d.ts +2 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +2 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.d.ts +8 -0
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsDb.js +19 -0
- package/lib/cjs/workspace/SettingsDb.js.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.js +53 -0
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +42 -19
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +5 -0
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +20 -11
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +28 -4
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +6 -0
- package/lib/esm/LineStyle.d.ts.map +1 -1
- package/lib/esm/LineStyle.js +41 -32
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.d.ts +17 -10
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +128 -30
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.d.ts +2 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +2 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js +64 -13
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +62 -27
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js +4 -0
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +14 -2
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js +177 -7
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +18 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +51 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +160 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
- package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
- package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
- package/lib/esm/workspace/Settings.d.ts +8 -0
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.d.ts +109 -0
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsDb.js +16 -0
- package/lib/esm/workspace/SettingsDb.js.map +1 -0
- package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsEditor.js +50 -0
- package/lib/esm/workspace/SettingsEditor.js.map +1 -0
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +42 -19
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +19 -0
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaImportCallbacks.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaImportCallbacks.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { Guid, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ElementProps, IModel } from \"@itwin/core-common\";\r\nimport { BriefcaseDb, ChannelControl, ChannelUpgradeContext, DataTransformationStrategy, IModelDb, IModelJsFs, PostImportContext, StandaloneDb } from \"../../core-backend\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\n\r\ndescribe(\"Schema Import Callbacks\", () => {\r\n let imodel: StandaloneDb;\r\n\r\n // Test schema with version changes\r\n const testSchemaV100 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\r\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n const testSchemaV101 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\r\n <ECProperty propertyName=\"NewProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n interface TestInitialElementProps extends ElementProps {\r\n stringProp: string;\r\n intProp: number;\r\n modelName?: string;\r\n }\r\n\r\n interface TestUpdatedElementProps extends TestInitialElementProps {\r\n newProp?: string;\r\n }\r\n\r\n beforeEach(() => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\r\n imodel = StandaloneDb.createEmpty(testFileName, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\r\n assert.exists(imodel);\r\n });\r\n\r\n afterEach(() => {\r\n if (imodel?.isOpen)\r\n imodel.close();\r\n });\r\n\r\n describe(\"Basic Callback Execution\", () => {\r\n it(\"should work without callbacks\", async () => {\r\n // This should not throw and should work as before\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\r\n });\r\n\r\n it(\"should call both callbacks in correct order\", async () => {\r\n const callOrder: string[] = [];\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n callOrder.push(\"before\");\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async () => {\r\n callOrder.push(\"after\");\r\n },\r\n },\r\n });\r\n\r\n assert.deepEqual(callOrder, [\"before\", \"after\"]);\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.None\", () => {\r\n it(\"should not create snapshot or cache data with None strategy\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.resources.snapshot);\r\n assert.isUndefined(context.resources.cachedData);\r\n },\r\n },\r\n });\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.InMemory\", () => {\r\n it(\"should pass cached data from preImport to postImport\", async () => {\r\n interface CachedData {\r\n elements: ElementProps[];\r\n cachedNumber: number;\r\n }\r\n\r\n let receivedCachedData: CachedData | undefined;\r\n const expectedCachedData: CachedData = {\r\n elements: [\r\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n ],\r\n cachedNumber: 1234,\r\n };\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: {\r\n elements: [\r\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n ],\r\n cachedNumber: 1234,\r\n },\r\n }),\r\n postSchemaImportCallback: async (context: PostImportContext) => {\r\n receivedCachedData = context.resources.cachedData as CachedData;\r\n assert.isDefined(context.resources.cachedData);\r\n assert.equal(context.resources.cachedData!.elements.length, 2);\r\n assert.deepEqual(receivedCachedData.elements, expectedCachedData.elements);\r\n assert.equal(receivedCachedData.cachedNumber, expectedCachedData.cachedNumber);\r\n assert.isUndefined(context.resources.snapshot);\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"should cache element properties and use them after import\", async () => {\r\n // First import the schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create a test element\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"original value of first element\",\r\n intProp: 42,\r\n };\r\n\r\n const elementId1 = imodel.elements.insertElement(elementProps);\r\n\r\n // Now import updated schema and transform the element\r\n interface CachedElements {\r\n ids: Id64String[];\r\n }\r\n\r\n const elementIds: Id64String[] = [elementId1];\r\n\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // Create another element before the schema import\r\n assert.equal(elementIds.length, 1);\r\n const element = context.iModel.elements.getElementProps<TestInitialElementProps>(elementIds[0]);\r\n assert.isDefined(element.stringProp);\r\n assert.isDefined(element.intProp);\r\n\r\n elementProps.stringProp = \"original value of second element\";\r\n elementProps.intProp = 84;\r\n elementIds.push(imodel.elements.insertElement(elementProps));\r\n\r\n const cached: CachedElements = { ids: elementIds };\r\n\r\n return {\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: cached,\r\n };\r\n },\r\n postSchemaImportCallback: async (context: PostImportContext) => {\r\n // Use cached data to update element with new property\r\n assert.isDefined(context.resources.cachedData?.ids);\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(context.resources.cachedData!.ids[1]);\r\n assert.isDefined(updatedElementProps.stringProp);\r\n assert.isDefined(updatedElementProps.intProp);\r\n assert.isUndefined(updatedElementProps.newProp);\r\n updatedElementProps.stringProp = \"modified in postImport\";\r\n updatedElementProps.newProp = `New Prop Added`;\r\n context.iModel.elements.updateElement<TestUpdatedElementProps>(updatedElementProps);\r\n },\r\n },\r\n });\r\n\r\n // Verify the transformation\r\n let finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[0]);\r\n assert.equal(finalElementProps.stringProp, \"original value of first element\");\r\n assert.isUndefined(finalElementProps.newProp);\r\n\r\n finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[1]);\r\n assert.equal(finalElementProps.stringProp, \"modified in postImport\");\r\n assert.isDefined(finalElementProps.newProp);\r\n assert.equal(finalElementProps.newProp, \"New Prop Added\");\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.Snapshot\", () => {\r\n it(\"should provide snapshot in postImport callback\", async () => {\r\n let snapshotProvided = false;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n assert.notEqual(context.resources.snapshot, context.iModel);\r\n assert.isTrue(context.resources.snapshot!.isSnapshot);\r\n snapshotProvided = true;\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(snapshotProvided);\r\n });\r\n\r\n it(\"should allow reading pre-import state from snapshot\", async () => {\r\n // First import initial schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create element with original schema\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"snapshot test\",\r\n intProp: 123,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Insert element before schema upgrade\");\r\n\r\n // Import updated schema with snapshot strategy\r\n let originalStringValue: string | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n assert.equal(context.resources.snapshot?.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n\r\n // Read original value from snapshot\r\n const snapshotElementProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\r\n originalStringValue = snapshotElementProps.stringProp;\r\n\r\n // Update element in main iModel with new property based on snapshot data\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedElementProps.newProp = `Original was: ${originalStringValue}`;\r\n context.iModel.elements.updateElement(updatedElementProps);\r\n },\r\n },\r\n });\r\n\r\n assert.equal(originalStringValue, \"snapshot test\");\r\n const finalElement = imodel.elements.getElement(elementId);\r\n assert.equal((finalElement as any).newProp, \"Original was: snapshot test\");\r\n });\r\n\r\n it(\"should clean up snapshot after successful import\", async () => {\r\n let snapshotPath: string | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n snapshotPath = context.resources.snapshot!.pathName;\r\n assert.isTrue(IModelJsFs.existsSync(snapshotPath));\r\n },\r\n },\r\n });\r\n\r\n if (snapshotPath) {\r\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot file should be cleaned up\");\r\n }\r\n });\r\n });\r\n\r\n describe(\"Error Handling\", () => {\r\n it(\"In memory strategy selected without caching any data pre import\", async () => {\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.InMemory }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.resources.snapshot);\r\n },\r\n },\r\n })\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n expect(err.message).to.equal(\"Failed to execute preSchemaImportCallback: InMemory transform strategy requires cachedData to be provided.\");\r\n }\r\n });\r\n\r\n it(\"should abandon changes if postImport callback throws\", async () => {\r\n // First import initial schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create element\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test\",\r\n intProp: 1,\r\n };\r\n\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Insert test element\");\r\n\r\n // Try to import with failing callback\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n // Make a change\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedElementProps.intProp += 1;\r\n updatedElementProps.stringProp = \"should be reverted\";\r\n updatedElementProps.newProp = \"should be reverted\";\r\n context.iModel.elements.updateElement(updatedElementProps);\r\n\r\n // Then throw error\r\n throw new Error(\"Intentional callback failure\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Intentional callback failure\");\r\n }\r\n\r\n // Schema import should have been successful\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n\r\n // Changes should be abandoned - element should not have newProp\r\n const finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.equal(finalElementProps.intProp, 1);\r\n assert.equal(finalElementProps.stringProp, \"test\");\r\n assert.isUndefined(finalElementProps.newProp);\r\n });\r\n\r\n it(\"should clean up snapshot when postImport throws error\", async () => {\r\n let snapshotPath: string | undefined;\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n snapshotPath = context.resources.snapshot!.pathName;\r\n throw new Error(\"Error after snapshot created\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Error after snapshot created\");\r\n }\r\n\r\n if (snapshotPath) {\r\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot should be cleaned up even after error\");\r\n }\r\n });\r\n\r\n it(\"should handle error in preImport callback\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n throw new Error(\"Error in preImport\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute preSchemaImportCallback: Error in preImport\");\r\n }\r\n\r\n // Schema should not have been imported\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n });\r\n });\r\n\r\n describe(\"File-based Schema Import\", () => {\r\n it(\"should work with importSchemas() using file paths\", async () => {\r\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\r\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\r\n\r\n let callbackExecuted = false;\r\n\r\n try {\r\n await imodel.importSchemas([schemaPath], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.schemaData);\r\n assert.equal(context.schemaData.length, 1);\r\n assert.equal(context.schemaData[0], schemaPath);\r\n callbackExecuted = true;\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(callbackExecuted);\r\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\r\n } finally {\r\n if (IModelJsFs.existsSync(schemaPath)) {\r\n IModelJsFs.removeSync(schemaPath);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have consistent behavior between importSchemas and importSchemaStrings\", async () => {\r\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\r\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\r\n\r\n const executionLogFile: string[] = [];\r\n const executionLogString: string[] = [];\r\n\r\n try {\r\n // Test with file-based import\r\n await imodel.importSchemas([schemaPath], {\r\n data: { testId: \"file-based\" },\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"2.0.0\",\r\n callback: async (context) => {\r\n executionLogFile.push(`channel: ${context.data.testId}`);\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n executionLogFile.push(`pre: ${context.data.testId}`);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n executionLogFile.push(`post: ${context.data.testId}`);\r\n },\r\n },\r\n });\r\n\r\n // Clean iModel for next test\r\n imodel.close();\r\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\r\n imodel = StandaloneDb.createEmpty(testFileName2, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\r\n\r\n // Test with string-based import\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: { testId: \"string-based\" },\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"2.0.0\",\r\n callback: async (context) => {\r\n executionLogString.push(`channel: ${context.data.testId}`);\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n executionLogString.push(`pre: ${context.data.testId}`);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n executionLogString.push(`post: ${context.data.testId}`);\r\n },\r\n },\r\n });\r\n\r\n // Both should have identical execution patterns\r\n assert.equal(executionLogFile.length, executionLogString.length);\r\n assert.deepEqual(\r\n executionLogFile.map(s => s.split(\":\")[0]),\r\n executionLogString.map(s => s.split(\":\")[0])\r\n );\r\n } finally {\r\n if (IModelJsFs.existsSync(schemaPath))\r\n IModelJsFs.removeSync(schemaPath);\r\n }\r\n });\r\n });\r\n\r\n describe(\"Channel Access Validation\", () => {\r\n beforeEach(async () => {\r\n // Import schema first\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n });\r\n\r\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel pre import\", async () => {\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test element\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Now REMOVE the shared channel permission\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n // Try to import schema and modify element - should fail\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // This should throw because shared channel is not allowed\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw here\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n }\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n // Verify it's a channel constraint error\r\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\r\n }\r\n\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n });\r\n\r\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel post import\", async () => {\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test element\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Now REMOVE the shared channel permission\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n // Try to import schema and modify element - should fail\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.None }),\r\n postSchemaImportCallback: async (context) => {\r\n // This should throw because shared channel is not allowed\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw here\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n // Verify it's a channel constraint error\r\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\r\n }\r\n\r\n // Verify element was NOT modified (changes were abandoned)\r\n imodel.channels.addAllowedChannel(\"shared\"); // Re-enable to read\r\n const finalProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.isUndefined(finalProps.newProp, \"Element should not have been modified\");\r\n });\r\n\r\n it(\"should handle channel permission check in snapshot strategy\", async () => {\r\n // Enable channel and create element\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"snapshot test\",\r\n intProp: 123,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Disable channel before schema import with snapshot\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n // Can read from snapshot (it's read-only, no channel check)\r\n const snapshotProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\r\n assert.equal(snapshotProps.stringProp, \"snapshot test\");\r\n\r\n // But can't modify in main iModel without channel permission\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n assert.include(err.message.toLowerCase(), \"channel\", \"Error should mention channel constraint\");\r\n }\r\n });\r\n });\r\n\r\n describe(\"User Data Propagation\", () => {\r\n it(\"should pass user data to all callbacks\", async () => {\r\n interface UserData {\r\n processId: string;\r\n cachedNumber: number;\r\n metadata: { version: string };\r\n }\r\n\r\n const userData: UserData = {\r\n processId: \"test-process-123\",\r\n cachedNumber: 1234,\r\n metadata: { version: \"1.0.0\" },\r\n };\r\n\r\n const receivedData: { channel?: UserData; pre?: UserData; post?: UserData } = {};\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n callback: async (context) => {\r\n receivedData.channel = context.data;\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n receivedData.pre = context.data;\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n receivedData.post = context.data;\r\n },\r\n },\r\n });\r\n\r\n // Verify all callbacks received the user data passed\r\n assert.deepEqual(receivedData.channel, userData);\r\n assert.deepEqual(receivedData.pre, userData);\r\n assert.deepEqual(receivedData.post, userData);\r\n });\r\n\r\n it(\"should handle more complicated user data structures\", async () => {\r\n interface ComplexUserData {\r\n elementMap: Map<Id64String, string>;\r\n counters: { inserted: number; updated: number };\r\n handlers: Array<{ name: string; enabled: boolean }>;\r\n }\r\n\r\n const userData: ComplexUserData = {\r\n elementMap: new Map([[\"0x1\", \"Element1\"], [\"0x2\", \"Element2\"]]),\r\n counters: { inserted: 0, updated: 0 },\r\n handlers: [\r\n { name: \"Handler1\", enabled: true },\r\n { name: \"Handler2\", enabled: false },\r\n ],\r\n };\r\n\r\n let receivedData: ComplexUserData | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({\r\n transformStrategy: DataTransformationStrategy.None,\r\n }),\r\n postSchemaImportCallback: async (context) => {\r\n receivedData = context.data;\r\n },\r\n },\r\n data: userData,\r\n });\r\n\r\n assert.isDefined(receivedData);\r\n assert.equal(receivedData!.elementMap.size, 2);\r\n assert.equal(receivedData!.elementMap.get(\"0x1\"), \"Element1\");\r\n assert.deepEqual(receivedData!.counters, { inserted: 0, updated: 0 });\r\n assert.equal(receivedData!.handlers.length, 2);\r\n });\r\n\r\n it(\"should work with undefined user data\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.data);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.data);\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"should allow user data mutation across callbacks\", async () => {\r\n interface UserData {\r\n step: number;\r\n log: string[];\r\n }\r\n\r\n let userData: UserData = {\r\n step: 0,\r\n log: [],\r\n };\r\n\r\n // All 3 callbacks called\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n callback: async (context) => {\r\n context.data!.step += 1;\r\n context.data!.log.push(\"channel-upgrade\");\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.equal(context.data!.step, 1);\r\n assert.deepEqual(context.data!.log, [\"channel-upgrade\"]);\r\n context.data!.step += 1;\r\n context.data!.log.push(\"pre-import\");\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n assert.equal(context.data!.step, 2);\r\n assert.deepEqual(context.data!.log, [\"channel-upgrade\", \"pre-import\"]);\r\n context.data!.step += 1;\r\n context.data!.log.push(\"post-import\");\r\n },\r\n },\r\n });\r\n\r\n // Verify final state\r\n assert.equal(userData.step, 3); // All three callbacks executed\r\n assert.deepEqual(userData.log, [\"channel-upgrade\", \"pre-import\", \"post-import\"]);\r\n\r\n userData = {\r\n step: 0,\r\n log: [],\r\n };\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n context.data!.step += 1;\r\n context.data!.log.push(\"post-import\");\r\n },\r\n },\r\n });\r\n\r\n // Verify final state\r\n assert.equal(userData.step, 1); // Only post-import was called\r\n assert.deepEqual(userData.log, [\"post-import\"]);\r\n });\r\n });\r\n\r\n describe(\"Channel Reorganization Before Schema Import\", () => {\r\n let channelRootId: Id64String;\r\n\r\n /**\r\n * Helper functions to get and set the version from a ChannelRootAspect\r\n */\r\n function getChannelVersion(iModel: IModelDb): string | undefined {\r\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\r\n if (aspects.length === 0)\r\n return undefined;\r\n return aspects[0].asAny.version;\r\n }\r\n\r\n function setChannelVersion(iModel: IModelDb, version: string): void {\r\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\r\n assert.equal(aspects.length, 1, \"Should have exactly one ChannelRootAspect\");\r\n\r\n const aspect = aspects[0];\r\n aspect.asAny.version = version;\r\n iModel.elements.updateAspect(aspect.toJSON());\r\n }\r\n\r\n // Code that simulates a channel upgrade.\r\n // This simulates elements being moved to different models as per the new channel organization.\r\n const channelUpgradeCallback = async (context: ChannelUpgradeContext) => {\r\n (context.data.elementIds as Id64String[]).forEach((id) => {\r\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(id);\r\n if (elementProps.stringProp === \"Material1\") {\r\n elementProps.modelName = \"MaterialModel\";\r\n } else if (elementProps.stringProp === \"LineStyle1\") {\r\n elementProps.modelName = \"StyleModel\";\r\n } else if (elementProps.stringProp === \"Category1\") {\r\n elementProps.modelName = \"StyleModel\";\r\n }\r\n context.iModel.elements.updateElement(elementProps);\r\n });\r\n setChannelVersion(context.iModel, \"1.0.1\");\r\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\r\n context.iModel.saveChanges();\r\n };\r\n\r\n it(\"need for channel reorganization before schema import\", async () => {\r\n // Initial setup: Import v1.0.0 schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n const channelKey = \"TestChannel\";\r\n imodel.channels.addAllowedChannel(channelKey);\r\n\r\n // Create a channel\r\n channelRootId = imodel.channels.insertChannelSubject({\r\n subjectName: \"Test Channel\",\r\n channelKey,\r\n });\r\n\r\n assert.isUndefined(getChannelVersion(imodel), \"Version should be undefined initially\");\r\n\r\n // Set version to 1.0.0\r\n setChannelVersion(imodel, \"1.0.0\");\r\n\r\n // Enable shared channel and create elements\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n const rootModel = imodel.models.getModel(IModel.dictionaryId);\r\n assert.equal(getChannelVersion(imodel), \"1.0.0\");\r\n\r\n // Create test elements in the \"old\" channel structure (all in root)\r\n const elementIds: Id64String[] = [];\r\n for (const [index, name] of [\"Material1\", \"LineStyle1\", \"Category1\"].entries()) {\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: rootModel.id,\r\n code: Code.createEmpty(),\r\n stringProp: name,\r\n intProp: 100 + index * 100,\r\n modelName: \"DefinitionModel\"\r\n };\r\n elementIds.push(imodel.elements.insertElement(elementProps));\r\n }\r\n imodel.saveChanges(\"Create elements in a single model under the root channel structure\");\r\n\r\n // Scenario: Let's assume schema has evolved and v1.0.1 expects elements to be in their dedicated models (i.e. it relies on channel v1.0.1)\r\n // The post schema upgrade code will look for elements in their own models.\r\n // If the channel is still in version 1.0.0, the callback will obviously fail.\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n data: { elementIds },\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: channelUpgradeCallback,\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n return {\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: {\r\n elementIds,\r\n },\r\n };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n // Now schema v1.0.1 expects elements to be in their dedicated models.\r\n const elementIdList = context.resources.cachedData!.elementIds as Id64String[];\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\r\n\r\n elementIdList.forEach((elementId: Id64String) => {\r\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n assert.notEqual(elementProps.modelName, \"DefinitionModel\", \"Element should have been moved to new model as part of the channel upgrade\");\r\n });\r\n },\r\n },\r\n });\r\n });\r\n });\r\n\r\n describe(\"Locking behavior\", () => {\r\n let iModelId: Id64String;\r\n const channelKey = \"TestChannel\";\r\n\r\n before(async () => {\r\n HubMock.startup(\"SchemaImportCallbackLockingTest\", KnownTestLocations.outputDir);\r\n iModelId = await HubMock.createNewIModel({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown();\r\n });\r\n\r\n async function setupBriefcase(): Promise<[BriefcaseDb, Id64String]> {\r\n const briefcaseDb = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelId });\r\n briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n await briefcaseDb.importSchemaStrings([testSchemaV100()]);\r\n\r\n briefcaseDb.channels.addAllowedChannel(channelKey);\r\n\r\n if (briefcaseDb.channels.queryChannelRoot(channelKey) === undefined) {\r\n briefcaseDb.channels.insertChannelSubject({\r\n subjectName: \"Test Channel\",\r\n channelKey,\r\n });\r\n }\r\n\r\n const model = briefcaseDb.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = briefcaseDb.elements.insertElement(elementProps);\r\n briefcaseDb.saveChanges(\"Create test element\");\r\n await briefcaseDb.pushChanges({ description: \"Create test element\" });\r\n\r\n return [briefcaseDb, elementId];\r\n }\r\n\r\n it(\"channel upgrade callback fails without locks\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n // Try to modify without acquiring locks in the callback\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: async (context) => {\r\n // Intentionally NOT acquiring locks\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Should fail\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error about missing locks\");\r\n } catch (err: any) {\r\n assert.equal(err.iTwinErrorId.key.name, \"Lock Not Held\");\r\n briefcaseDb.abandonChanges();\r\n }\r\n\r\n // Try again with locks\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: async (context) => {\r\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"updated with locks\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Updated with locks\");\r\n },\r\n },\r\n });\r\n } catch (err: any) {\r\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n\r\n it(\"preSchemaImportCallback fails without locks\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n // Try to modify without acquiring locks in the callback\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // Intentionally NOT acquiring locks\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error about missing locks\");\r\n } catch (err: any) {\r\n assert.equal(err.name, \"Lock Not Held\");\r\n briefcaseDb.abandonChanges();\r\n }\r\n\r\n // Try again with locks\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Should fail\");\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n } catch (err: any) {\r\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n\r\n it(\"lock acquisition is not required during postSchemaImportCallback\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n let postImportCalled = false;\r\n\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n postImportCalled = true;\r\n\r\n // Schema lock is already held at this point\r\n const props = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n props.newProp = \"added in postImport with schema lock held\";\r\n context.iModel.elements.updateElement(props);\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(postImportCalled, \"Post-import callback should have been called\");\r\n const finalProps = briefcaseDb.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.equal(finalProps.newProp, \"added in postImport with schema lock held\");\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaImportCallbacks.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaImportCallbacks.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport { Guid, Id64String } from \"@itwin/core-bentley\";\nimport { Code, ElementProps, IModel } from \"@itwin/core-common\";\nimport { BriefcaseDb, ChannelControl, ChannelUpgradeContext, DataTransformationStrategy, IModelDb, IModelJsFs, PostImportContext, StandaloneDb } from \"../../core-backend\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../internal/HubMock\";\n\ndescribe(\"Schema Import Callbacks\", () => {\n let imodel: StandaloneDb;\n\n // Test schema with version changes\n const testSchemaV100 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>`;\n\n const testSchemaV101 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\n <ECProperty propertyName=\"NewProp\" typeName=\"string\" />\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>`;\n\n interface TestInitialElementProps extends ElementProps {\n stringProp: string;\n intProp: number;\n modelName?: string;\n }\n\n interface TestUpdatedElementProps extends TestInitialElementProps {\n newProp?: string;\n }\n\n beforeEach(() => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\n imodel = StandaloneDb.createEmpty(testFileName, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\n assert.exists(imodel);\n });\n\n afterEach(() => {\n if (imodel?.isOpen)\n imodel.close();\n });\n\n describe(\"Basic Callback Execution\", () => {\n it(\"should work without callbacks\", async () => {\n // This should not throw and should work as before\n await imodel.importSchemaStrings([testSchemaV100()]);\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\n });\n\n it(\"should call both callbacks in correct order\", async () => {\n const callOrder: string[] = [];\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => {\n callOrder.push(\"before\");\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async () => {\n callOrder.push(\"after\");\n },\n },\n });\n\n assert.deepEqual(callOrder, [\"before\", \"after\"]);\n });\n });\n\n describe(\"DataTransformationStrategy.None\", () => {\n it(\"should not create snapshot or cache data with None strategy\", async () => {\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n postSchemaImportCallback: async (context) => {\n assert.isUndefined(context.resources.snapshot);\n assert.isUndefined(context.resources.cachedData);\n },\n },\n });\n });\n });\n\n describe(\"DataTransformationStrategy.InMemory\", () => {\n it(\"should pass cached data from preImport to postImport\", async () => {\n interface CachedData {\n elements: ElementProps[];\n cachedNumber: number;\n }\n\n let receivedCachedData: CachedData | undefined;\n const expectedCachedData: CachedData = {\n elements: [\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\n ],\n cachedNumber: 1234,\n };\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({\n transformStrategy: DataTransformationStrategy.InMemory,\n cachedData: {\n elements: [\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\n ],\n cachedNumber: 1234,\n },\n }),\n postSchemaImportCallback: async (context: PostImportContext) => {\n receivedCachedData = context.resources.cachedData as CachedData;\n assert.isDefined(context.resources.cachedData);\n assert.equal(context.resources.cachedData!.elements.length, 2);\n assert.deepEqual(receivedCachedData.elements, expectedCachedData.elements);\n assert.equal(receivedCachedData.cachedNumber, expectedCachedData.cachedNumber);\n assert.isUndefined(context.resources.snapshot);\n },\n },\n });\n });\n\n it(\"should cache element properties and use them after import\", async () => {\n // First import the schema\n await imodel.importSchemaStrings([testSchemaV100()]);\n\n // Create a test element\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"original value of first element\",\n intProp: 42,\n };\n\n const elementId1 = imodel.elements.insertElement(elementProps);\n\n // Now import updated schema and transform the element\n interface CachedElements {\n ids: Id64String[];\n }\n\n const elementIds: Id64String[] = [elementId1];\n\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n // Create another element before the schema import\n assert.equal(elementIds.length, 1);\n const element = context.iModel.elements.getElementProps<TestInitialElementProps>(elementIds[0]);\n assert.isDefined(element.stringProp);\n assert.isDefined(element.intProp);\n\n elementProps.stringProp = \"original value of second element\";\n elementProps.intProp = 84;\n elementIds.push(imodel.elements.insertElement(elementProps));\n\n const cached: CachedElements = { ids: elementIds };\n\n return {\n transformStrategy: DataTransformationStrategy.InMemory,\n cachedData: cached,\n };\n },\n postSchemaImportCallback: async (context: PostImportContext) => {\n // Use cached data to update element with new property\n assert.isDefined(context.resources.cachedData?.ids);\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(context.resources.cachedData!.ids[1]);\n assert.isDefined(updatedElementProps.stringProp);\n assert.isDefined(updatedElementProps.intProp);\n assert.isUndefined(updatedElementProps.newProp);\n updatedElementProps.stringProp = \"modified in postImport\";\n updatedElementProps.newProp = `New Prop Added`;\n context.iModel.elements.updateElement<TestUpdatedElementProps>(updatedElementProps);\n },\n },\n });\n\n // Verify the transformation\n let finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[0]);\n assert.equal(finalElementProps.stringProp, \"original value of first element\");\n assert.isUndefined(finalElementProps.newProp);\n\n finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[1]);\n assert.equal(finalElementProps.stringProp, \"modified in postImport\");\n assert.isDefined(finalElementProps.newProp);\n assert.equal(finalElementProps.newProp, \"New Prop Added\");\n });\n });\n\n describe(\"DataTransformationStrategy.Snapshot\", () => {\n it(\"should provide snapshot in postImport callback\", async () => {\n let snapshotProvided = false;\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\n postSchemaImportCallback: async (context) => {\n assert.isDefined(context.resources.snapshot);\n assert.notEqual(context.resources.snapshot, context.iModel);\n assert.isTrue(context.resources.snapshot!.isSnapshot);\n snapshotProvided = true;\n },\n },\n });\n\n assert.isTrue(snapshotProvided);\n });\n\n it(\"should allow reading pre-import state from snapshot\", async () => {\n // First import initial schema\n await imodel.importSchemaStrings([testSchemaV100()]);\n\n // Create element with original schema\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"snapshot test\",\n intProp: 123,\n };\n\n const elementId = imodel.elements.insertElement(elementProps);\n imodel.saveChanges(\"Insert element before schema upgrade\");\n\n // Import updated schema with snapshot strategy\n let originalStringValue: string | undefined;\n\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\n postSchemaImportCallback: async (context) => {\n assert.isDefined(context.resources.snapshot);\n assert.equal(context.resources.snapshot?.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\n\n // Read original value from snapshot\n const snapshotElementProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\n originalStringValue = snapshotElementProps.stringProp;\n\n // Update element in main iModel with new property based on snapshot data\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n updatedElementProps.newProp = `Original was: ${originalStringValue}`;\n context.iModel.elements.updateElement(updatedElementProps);\n },\n },\n });\n\n assert.equal(originalStringValue, \"snapshot test\");\n const finalElement = imodel.elements.getElement(elementId);\n assert.equal((finalElement as any).newProp, \"Original was: snapshot test\");\n });\n\n it(\"should clean up snapshot after successful import\", async () => {\n let snapshotPath: string | undefined;\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\n postSchemaImportCallback: async (context) => {\n assert.isDefined(context.resources.snapshot);\n snapshotPath = context.resources.snapshot!.pathName;\n assert.isTrue(IModelJsFs.existsSync(snapshotPath));\n },\n },\n });\n\n if (snapshotPath) {\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot file should be cleaned up\");\n }\n });\n });\n\n describe(\"Error Handling\", () => {\n it(\"In memory strategy selected without caching any data pre import\", async () => {\n try {\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.InMemory }),\n postSchemaImportCallback: async (context) => {\n assert.isUndefined(context.resources.snapshot);\n },\n },\n })\n assert.fail(\"Should have thrown error\");\n } catch (err: any) {\n expect(err.message).to.equal(\"Failed to execute preSchemaImportCallback: InMemory transform strategy requires cachedData to be provided.\");\n }\n });\n\n it(\"should abandon changes if postImport callback throws\", async () => {\n // First import initial schema\n await imodel.importSchemaStrings([testSchemaV100()]);\n\n // Create element\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"test\",\n intProp: 1,\n };\n\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n\n const elementId = imodel.elements.insertElement(elementProps);\n imodel.saveChanges(\"Insert test element\");\n\n // Try to import with failing callback\n try {\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n postSchemaImportCallback: async (context) => {\n // Make a change\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n updatedElementProps.intProp += 1;\n updatedElementProps.stringProp = \"should be reverted\";\n updatedElementProps.newProp = \"should be reverted\";\n context.iModel.elements.updateElement(updatedElementProps);\n\n // Then throw error\n throw new Error(\"Intentional callback failure\");\n },\n },\n });\n assert.fail(\"Should have thrown error\");\n } catch (err: any) {\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Intentional callback failure\");\n }\n\n // Schema import should have been successful\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\n\n // Changes should be abandoned - element should not have newProp\n const finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n assert.equal(finalElementProps.intProp, 1);\n assert.equal(finalElementProps.stringProp, \"test\");\n assert.isUndefined(finalElementProps.newProp);\n });\n\n it(\"should clean up snapshot when postImport throws error\", async () => {\n let snapshotPath: string | undefined;\n\n try {\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\n postSchemaImportCallback: async (context) => {\n snapshotPath = context.resources.snapshot!.pathName;\n throw new Error(\"Error after snapshot created\");\n },\n },\n });\n assert.fail(\"Should have thrown error\");\n } catch (err: any) {\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Error after snapshot created\");\n }\n\n if (snapshotPath) {\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot should be cleaned up even after error\");\n }\n });\n\n it(\"should handle error in preImport callback\", async () => {\n await imodel.importSchemaStrings([testSchemaV100()]);\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n\n try {\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => {\n throw new Error(\"Error in preImport\");\n },\n },\n });\n assert.fail(\"Should have thrown error\");\n } catch (err: any) {\n assert.equal(err.message, \"Failed to execute preSchemaImportCallback: Error in preImport\");\n }\n\n // Schema should not have been imported\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n });\n });\n\n describe(\"File-based Schema Import\", () => {\n it(\"should work with importSchemas() using file paths\", async () => {\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\n\n let callbackExecuted = false;\n\n try {\n await imodel.importSchemas([schemaPath], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n assert.isDefined(context.schemaData);\n assert.equal(context.schemaData.length, 1);\n assert.equal(context.schemaData[0], schemaPath);\n callbackExecuted = true;\n return { transformStrategy: DataTransformationStrategy.None };\n },\n },\n });\n\n assert.isTrue(callbackExecuted);\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\n } finally {\n if (IModelJsFs.existsSync(schemaPath)) {\n IModelJsFs.removeSync(schemaPath);\n }\n }\n });\n\n it(\"should have consistent behavior between importSchemas and importSchemaStrings\", async () => {\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\n\n const executionLogFile: string[] = [];\n const executionLogString: string[] = [];\n\n try {\n // Test with file-based import\n await imodel.importSchemas([schemaPath], {\n data: { testId: \"file-based\" },\n channelUpgrade: {\n channelKey: \"shared\",\n fromVersion: \"1.0.0\",\n toVersion: \"2.0.0\",\n callback: async (context) => {\n executionLogFile.push(`channel: ${context.data.testId}`);\n },\n },\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n executionLogFile.push(`pre: ${context.data.testId}`);\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async (context) => {\n executionLogFile.push(`post: ${context.data.testId}`);\n },\n },\n });\n\n // Clean iModel for next test\n imodel.close();\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\n imodel = StandaloneDb.createEmpty(testFileName2, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\n\n // Test with string-based import\n await imodel.importSchemaStrings([testSchemaV100()], {\n data: { testId: \"string-based\" },\n channelUpgrade: {\n channelKey: \"shared\",\n fromVersion: \"1.0.0\",\n toVersion: \"2.0.0\",\n callback: async (context) => {\n executionLogString.push(`channel: ${context.data.testId}`);\n },\n },\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n executionLogString.push(`pre: ${context.data.testId}`);\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async (context) => {\n executionLogString.push(`post: ${context.data.testId}`);\n },\n },\n });\n\n // Both should have identical execution patterns\n assert.equal(executionLogFile.length, executionLogString.length);\n assert.deepEqual(\n executionLogFile.map(s => s.split(\":\")[0]),\n executionLogString.map(s => s.split(\":\")[0])\n );\n } finally {\n if (IModelJsFs.existsSync(schemaPath))\n IModelJsFs.removeSync(schemaPath);\n }\n });\n });\n\n describe(\"Channel Access Validation\", () => {\n beforeEach(async () => {\n // Import schema first\n await imodel.importSchemaStrings([testSchemaV100()]);\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n\n imodel.channels.addAllowedChannel(\"shared\");\n });\n\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel pre import\", async () => {\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"test element\",\n intProp: 100,\n };\n\n const elementId = imodel.elements.insertElement(elementProps);\n imodel.saveChanges(\"Create test element\");\n\n // Now REMOVE the shared channel permission\n imodel.channels.removeAllowedChannel(\"shared\");\n\n // Try to import schema and modify element - should fail\n try {\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n // This should throw because shared channel is not allowed\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n updatedProps.newProp = \"This should fail\";\n context.iModel.elements.updateElement(updatedProps); // Should throw here\n\n return { transformStrategy: DataTransformationStrategy.None };\n }\n },\n });\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\n } catch (err: any) {\n // Verify it's a channel constraint error\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\n }\n\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n });\n\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel post import\", async () => {\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"test element\",\n intProp: 100,\n };\n\n const elementId = imodel.elements.insertElement(elementProps);\n imodel.saveChanges(\"Create test element\");\n\n // Now REMOVE the shared channel permission\n imodel.channels.removeAllowedChannel(\"shared\");\n\n // Try to import schema and modify element - should fail\n try {\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.None }),\n postSchemaImportCallback: async (context) => {\n // This should throw because shared channel is not allowed\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n updatedProps.newProp = \"This should fail\";\n context.iModel.elements.updateElement(updatedProps); // Should throw here\n },\n },\n });\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\n } catch (err: any) {\n // Verify it's a channel constraint error\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\n }\n\n // Verify element was NOT modified (changes were abandoned)\n imodel.channels.addAllowedChannel(\"shared\"); // Re-enable to read\n const finalProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n assert.isUndefined(finalProps.newProp, \"Element should not have been modified\");\n });\n\n it(\"should handle channel permission check in snapshot strategy\", async () => {\n // Enable channel and create element\n imodel.channels.addAllowedChannel(\"shared\");\n await imodel.importSchemaStrings([testSchemaV100()]);\n\n const model = imodel.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"snapshot test\",\n intProp: 123,\n };\n\n const elementId = imodel.elements.insertElement(elementProps);\n imodel.saveChanges(\"Create test element\");\n\n // Disable channel before schema import with snapshot\n imodel.channels.removeAllowedChannel(\"shared\");\n\n try {\n await imodel.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\n postSchemaImportCallback: async (context) => {\n // Can read from snapshot (it's read-only, no channel check)\n const snapshotProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\n assert.equal(snapshotProps.stringProp, \"snapshot test\");\n\n // But can't modify in main iModel without channel permission\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n updatedProps.newProp = \"This should fail\";\n context.iModel.elements.updateElement(updatedProps); // Should throw\n },\n },\n });\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\n } catch (err: any) {\n assert.include(err.message.toLowerCase(), \"channel\", \"Error should mention channel constraint\");\n }\n });\n });\n\n describe(\"User Data Propagation\", () => {\n it(\"should pass user data to all callbacks\", async () => {\n interface UserData {\n processId: string;\n cachedNumber: number;\n metadata: { version: string };\n }\n\n const userData: UserData = {\n processId: \"test-process-123\",\n cachedNumber: 1234,\n metadata: { version: \"1.0.0\" },\n };\n\n const receivedData: { channel?: UserData; pre?: UserData; post?: UserData } = {};\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n data: userData,\n channelUpgrade: {\n channelKey: \"shared\",\n fromVersion: \"1.0.0\",\n toVersion: \"1.1.0\",\n callback: async (context) => {\n receivedData.channel = context.data;\n },\n },\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n receivedData.pre = context.data;\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async (context) => {\n receivedData.post = context.data;\n },\n },\n });\n\n // Verify all callbacks received the user data passed\n assert.deepEqual(receivedData.channel, userData);\n assert.deepEqual(receivedData.pre, userData);\n assert.deepEqual(receivedData.post, userData);\n });\n\n it(\"should handle more complicated user data structures\", async () => {\n interface ComplexUserData {\n elementMap: Map<Id64String, string>;\n counters: { inserted: number; updated: number };\n handlers: Array<{ name: string; enabled: boolean }>;\n }\n\n const userData: ComplexUserData = {\n elementMap: new Map([[\"0x1\", \"Element1\"], [\"0x2\", \"Element2\"]]),\n counters: { inserted: 0, updated: 0 },\n handlers: [\n { name: \"Handler1\", enabled: true },\n { name: \"Handler2\", enabled: false },\n ],\n };\n\n let receivedData: ComplexUserData | undefined;\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => ({\n transformStrategy: DataTransformationStrategy.None,\n }),\n postSchemaImportCallback: async (context) => {\n receivedData = context.data;\n },\n },\n data: userData,\n });\n\n assert.isDefined(receivedData);\n assert.equal(receivedData!.elementMap.size, 2);\n assert.equal(receivedData!.elementMap.get(\"0x1\"), \"Element1\");\n assert.deepEqual(receivedData!.counters, { inserted: 0, updated: 0 });\n assert.equal(receivedData!.handlers.length, 2);\n });\n\n it(\"should work with undefined user data\", async () => {\n await imodel.importSchemaStrings([testSchemaV100()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n assert.isUndefined(context.data);\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async (context) => {\n assert.isUndefined(context.data);\n },\n },\n });\n });\n\n it(\"should allow user data mutation across callbacks\", async () => {\n interface UserData {\n step: number;\n log: string[];\n }\n\n let userData: UserData = {\n step: 0,\n log: [],\n };\n\n // All 3 callbacks called\n await imodel.importSchemaStrings([testSchemaV100()], {\n data: userData,\n channelUpgrade: {\n channelKey: \"shared\",\n fromVersion: \"1.0.0\",\n toVersion: \"1.1.0\",\n callback: async (context) => {\n context.data!.step += 1;\n context.data!.log.push(\"channel-upgrade\");\n },\n },\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n assert.equal(context.data!.step, 1);\n assert.deepEqual(context.data!.log, [\"channel-upgrade\"]);\n context.data!.step += 1;\n context.data!.log.push(\"pre-import\");\n return { transformStrategy: DataTransformationStrategy.None };\n },\n postSchemaImportCallback: async (context) => {\n assert.equal(context.data!.step, 2);\n assert.deepEqual(context.data!.log, [\"channel-upgrade\", \"pre-import\"]);\n context.data!.step += 1;\n context.data!.log.push(\"post-import\");\n },\n },\n });\n\n // Verify final state\n assert.equal(userData.step, 3); // All three callbacks executed\n assert.deepEqual(userData.log, [\"channel-upgrade\", \"pre-import\", \"post-import\"]);\n\n userData = {\n step: 0,\n log: [],\n };\n\n await imodel.importSchemaStrings([testSchemaV100()], {\n data: userData,\n schemaImportCallbacks: {\n postSchemaImportCallback: async (context) => {\n context.data!.step += 1;\n context.data!.log.push(\"post-import\");\n },\n },\n });\n\n // Verify final state\n assert.equal(userData.step, 1); // Only post-import was called\n assert.deepEqual(userData.log, [\"post-import\"]);\n });\n });\n\n describe(\"Channel Reorganization Before Schema Import\", () => {\n let channelRootId: Id64String;\n\n /**\n * Helper functions to get and set the version from a ChannelRootAspect\n */\n function getChannelVersion(iModel: IModelDb): string | undefined {\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\n if (aspects.length === 0)\n return undefined;\n return aspects[0].asAny.version;\n }\n\n function setChannelVersion(iModel: IModelDb, version: string): void {\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\n assert.equal(aspects.length, 1, \"Should have exactly one ChannelRootAspect\");\n\n const aspect = aspects[0];\n aspect.asAny.version = version;\n iModel.elements.updateAspect(aspect.toJSON());\n }\n\n // Code that simulates a channel upgrade.\n // This simulates elements being moved to different models as per the new channel organization.\n const channelUpgradeCallback = async (context: ChannelUpgradeContext) => {\n (context.data.elementIds as Id64String[]).forEach((id) => {\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(id);\n if (elementProps.stringProp === \"Material1\") {\n elementProps.modelName = \"MaterialModel\";\n } else if (elementProps.stringProp === \"LineStyle1\") {\n elementProps.modelName = \"StyleModel\";\n } else if (elementProps.stringProp === \"Category1\") {\n elementProps.modelName = \"StyleModel\";\n }\n context.iModel.elements.updateElement(elementProps);\n });\n setChannelVersion(context.iModel, \"1.0.1\");\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\n context.iModel.saveChanges();\n };\n\n it(\"need for channel reorganization before schema import\", async () => {\n // Initial setup: Import v1.0.0 schema\n await imodel.importSchemaStrings([testSchemaV100()]);\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\n\n const channelKey = \"TestChannel\";\n imodel.channels.addAllowedChannel(channelKey);\n\n // Create a channel\n channelRootId = imodel.channels.insertChannelSubject({\n subjectName: \"Test Channel\",\n channelKey,\n });\n\n assert.isUndefined(getChannelVersion(imodel), \"Version should be undefined initially\");\n\n // Set version to 1.0.0\n setChannelVersion(imodel, \"1.0.0\");\n\n // Enable shared channel and create elements\n imodel.channels.addAllowedChannel(\"shared\");\n const rootModel = imodel.models.getModel(IModel.dictionaryId);\n assert.equal(getChannelVersion(imodel), \"1.0.0\");\n\n // Create test elements in the \"old\" channel structure (all in root)\n const elementIds: Id64String[] = [];\n for (const [index, name] of [\"Material1\", \"LineStyle1\", \"Category1\"].entries()) {\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: rootModel.id,\n code: Code.createEmpty(),\n stringProp: name,\n intProp: 100 + index * 100,\n modelName: \"DefinitionModel\"\n };\n elementIds.push(imodel.elements.insertElement(elementProps));\n }\n imodel.saveChanges(\"Create elements in a single model under the root channel structure\");\n\n // Scenario: Let's assume schema has evolved and v1.0.1 expects elements to be in their dedicated models (i.e. it relies on channel v1.0.1)\n // The post schema upgrade code will look for elements in their own models.\n // If the channel is still in version 1.0.0, the callback will obviously fail.\n await imodel.importSchemaStrings([testSchemaV101()], {\n data: { elementIds },\n channelUpgrade: {\n channelKey,\n fromVersion: \"1.0.0\",\n toVersion: \"1.0.1\",\n callback: channelUpgradeCallback,\n },\n schemaImportCallbacks: {\n preSchemaImportCallback: async () => {\n return {\n transformStrategy: DataTransformationStrategy.InMemory,\n cachedData: {\n elementIds,\n },\n };\n },\n postSchemaImportCallback: async (context) => {\n // Now schema v1.0.1 expects elements to be in their dedicated models.\n const elementIdList = context.resources.cachedData!.elementIds as Id64String[];\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\n\n elementIdList.forEach((elementId: Id64String) => {\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\n assert.notEqual(elementProps.modelName, \"DefinitionModel\", \"Element should have been moved to new model as part of the channel upgrade\");\n });\n },\n },\n });\n });\n });\n\n describe(\"Locking behavior\", () => {\n let iModelId: Id64String;\n const channelKey = \"TestChannel\";\n\n before(async () => {\n HubMock.startup(\"SchemaImportCallbackLockingTest\", KnownTestLocations.outputDir);\n iModelId = await HubMock.createNewIModel({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n });\n\n after(async () => {\n HubMock.shutdown();\n });\n\n async function setupBriefcase(): Promise<[BriefcaseDb, Id64String]> {\n const briefcaseDb = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelId });\n briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await briefcaseDb.importSchemaStrings([testSchemaV100()]);\n\n briefcaseDb.channels.addAllowedChannel(channelKey);\n\n if (briefcaseDb.channels.queryChannelRoot(channelKey) === undefined) {\n briefcaseDb.channels.insertChannelSubject({\n subjectName: \"Test Channel\",\n channelKey,\n });\n }\n\n const model = briefcaseDb.models.getModel(IModel.dictionaryId);\n const elementProps: TestInitialElementProps = {\n classFullName: `TestSchema:TestElement`,\n model: model.id,\n code: Code.createEmpty(),\n stringProp: \"test\",\n intProp: 100,\n };\n\n const elementId = briefcaseDb.elements.insertElement(elementProps);\n briefcaseDb.saveChanges(\"Create test element\");\n await briefcaseDb.pushChanges({ description: \"Create test element\" });\n\n return [briefcaseDb, elementId];\n }\n\n it(\"channel upgrade callback fails without locks\", async () => {\n const [briefcaseDb, elementId] = await setupBriefcase();\n\n // Try to modify without acquiring locks in the callback\n try {\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\n channelUpgrade: {\n channelKey,\n fromVersion: \"1.0.0\",\n toVersion: \"1.0.1\",\n callback: async (context) => {\n // Intentionally NOT acquiring locks\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\n props.stringProp = \"should fail\";\n context.iModel.elements.updateElement(props);\n context.iModel.saveChanges(\"Should fail\");\n },\n },\n });\n assert.fail(\"Should have thrown error about missing locks\");\n } catch (err: any) {\n assert.equal(err.iTwinErrorId.key.name, \"Lock Not Held\");\n briefcaseDb.abandonChanges();\n }\n\n // Try again with locks\n try {\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\n channelUpgrade: {\n channelKey,\n fromVersion: \"1.0.0\",\n toVersion: \"1.0.1\",\n callback: async (context) => {\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\n props.stringProp = \"updated with locks\";\n context.iModel.elements.updateElement(props);\n context.iModel.saveChanges(\"Updated with locks\");\n },\n },\n });\n } catch (err: any) {\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\n });\n\n it(\"preSchemaImportCallback fails without locks\", async () => {\n const [briefcaseDb, elementId] = await setupBriefcase();\n\n // Try to modify without acquiring locks in the callback\n try {\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n // Intentionally NOT acquiring locks\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\n props.stringProp = \"should fail\";\n context.iModel.elements.updateElement(props);\n\n return { transformStrategy: DataTransformationStrategy.None };\n },\n },\n });\n assert.fail(\"Should have thrown error about missing locks\");\n } catch (err: any) {\n assert.equal(err.name, \"Lock Not Held\");\n briefcaseDb.abandonChanges();\n }\n\n // Try again with locks\n try {\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n preSchemaImportCallback: async (context) => {\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\n props.stringProp = \"should fail\";\n context.iModel.elements.updateElement(props);\n context.iModel.saveChanges(\"Should fail\");\n\n return { transformStrategy: DataTransformationStrategy.None };\n },\n },\n });\n } catch (err: any) {\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\n });\n\n it(\"lock acquisition is not required during postSchemaImportCallback\", async () => {\n const [briefcaseDb, elementId] = await setupBriefcase();\n\n let postImportCalled = false;\n\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\n schemaImportCallbacks: {\n postSchemaImportCallback: async (context) => {\n postImportCalled = true;\n\n // Schema lock is already held at this point\n const props = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\n props.newProp = \"added in postImport with schema lock held\";\n context.iModel.elements.updateElement(props);\n },\n },\n });\n\n assert.isTrue(postImportCalled, \"Post-import callback should have been called\");\n const finalProps = briefcaseDb.elements.getElementProps<TestUpdatedElementProps>(elementId);\n assert.equal(finalProps.newProp, \"added in postImport with schema lock held\");\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SheetIndex.test.js","sourceRoot":"","sources":["../../../../src/test/sheetindex/SheetIndex.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BisCodeSpec, CodeScopeSpec, CodeSpec, GeometricModel2dProps, RelatedElement, SheetProps } from \"@itwin/core-common\";\r\n\r\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { DocumentPartition, Sheet } from \"../../Element\";\r\nimport { expect } from \"chai\";\r\nimport { DocumentListModel, SheetIndexModel, SheetModel } from \"../../Model\";\r\nimport { ElementOwnsChildElements, SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"../../NavigationRelationship\";\r\nimport { SheetIndex, SheetIndexFolder, SheetIndexReference, SheetReference } from \"../../SheetIndex\";\r\n\r\nexport const getOrCreateDocumentList = async (iModel: IModelDb): Promise<Id64String> => {\r\n const documentListName = \"SheetList\";\r\n let documentListModelId: string | undefined;\r\n\r\n // Attempt to find an existing document partition and document list model\r\n const ids = iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'`});\r\n if (ids.size === 1) {\r\n documentListModelId = ids.values().next().value;\r\n }\r\n\r\n // If they do not exist, create the document partition and document list model\r\n if (documentListModelId === undefined) {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n await iModel.locks.acquireLocks({\r\n shared: subjectId,\r\n });\r\n documentListModelId = DocumentListModel.insert(iModel, subjectId, documentListName);\r\n }\r\n\r\n return documentListModelId;\r\n};\r\n\r\nconst insertSheet = async (iModel: IModelDb, sheetName: string): Promise<Id64String> => {\r\n const createSheetProps = {\r\n height: 42,\r\n width: 42,\r\n scale: 42,\r\n };\r\n // Get or make documentListModelId\r\n const modelId = await getOrCreateDocumentList(iModel);\r\n\r\n // Acquire locks and create sheet\r\n await iModel.locks.acquireLocks({ shared: modelId });\r\n const sheetElementProps: SheetProps = {\r\n ...createSheetProps,\r\n classFullName: Sheet.classFullName,\r\n code: Sheet.createCode(iModel, modelId, sheetName),\r\n model: modelId,\r\n };\r\n const sheetElementId = iModel.elements.insertElement(sheetElementProps);\r\n\r\n const sheetModelProps: GeometricModel2dProps = {\r\n classFullName: SheetModel.classFullName,\r\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" } as RelatedElement,\r\n };\r\n const sheetModelId = iModel.models.insertModel(sheetModelProps);\r\n\r\n return sheetModelId;\r\n};\r\n\r\nconst insertCodeSpec = async (iModel: IModelDb) => {\r\n const indexSpec = CodeSpec.create(iModel, BisCodeSpec.sheetIndex, CodeScopeSpec.Type.Model);\r\n iModel.codeSpecs.insert(indexSpec);\r\n\r\n const entrySpec = CodeSpec.create(iModel, BisCodeSpec.sheetIndexEntry, CodeScopeSpec.Type.ParentElement);\r\n iModel.codeSpecs.insert(entrySpec);\r\n};\r\n\r\ndescribe(\"SheetIndex\", () => {\r\n let iModel: SnapshotDb;\r\n\r\n beforeEach(async () => {\r\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSheetIndex.bim\");\r\n\r\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"SheetIndex\" } });\r\n await ExtensiveTestScenario.prepareDb(iModelDb);\r\n await ExtensiveTestScenario.populateDb(iModelDb);\r\n iModel = iModelDb;\r\n\r\n await insertCodeSpec(iModel);\r\n });\r\n\r\n afterEach(() => {\r\n iModel.abandonChanges();\r\n iModel.close();\r\n });\r\n\r\n it(\"SheetIndexModel Should insert\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"testSheetIndex\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n });\r\n\r\n it(\"SheetIndex Should insert\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n });\r\n\r\n describe(\"Update\", () => {\r\n it(\"Priority\", () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n expect(folder?.entryPriority).equals(1);\r\n\r\n folder!.entryPriority = 0;\r\n folder!.update();\r\n\r\n const folderPostUpdate = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folderPostUpdate?.entryPriority).equals(0);\r\n });\r\n\r\n it(\"Parent\", () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n\r\n const parentRel11 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\r\n expect(parentRel11).to.not.be.undefined;\r\n\r\n folder!.parent = new SheetIndexOwnsEntries(sheetIndex2Id);\r\n folder!.update();\r\n\r\n const parentRel12 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\r\n expect(parentRel12).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex2Id, targetId: folderId });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n\r\n it(\"Sheet Reference\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const sheet1Id = await insertSheet(iModel, \"sheet-1\");\r\n const sheet2Id = await insertSheet(iModel, \"sheet-2\");\r\n\r\n const sheetRefId = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestSheetReference\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\r\n\r\n const sheetRef = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\r\n expect(sheetRef).to.not.be.undefined;\r\n expect(sheetRef!.sheet).to.be.undefined;\r\n\r\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet1Id);\r\n sheetRef!.update();\r\n\r\n const refersRel11 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\r\n expect(refersRel11).to.not.be.undefined;\r\n\r\n const parentRel12 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\r\n expect(parentRel12).to.be.undefined;\r\n\r\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet2Id);\r\n sheetRef!.update();\r\n\r\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\r\n expect(refersRel21).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n\r\n it(\"Sheet Index Reference\", () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\r\n const sheetIndex3Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-3\");\r\n expect(Id64.isValidId64(sheetIndex3Id)).to.be.true;\r\n\r\n const sheetIndexRefId = SheetIndexReference.insert({iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetReference\", priority: 1});\r\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\r\n\r\n const sheetIndexRef = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\r\n expect(sheetIndexRef).to.not.be.undefined;\r\n expect(sheetIndexRef!.sheetIndex).to.be.undefined;\r\n\r\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex2Id);\r\n sheetIndexRef!.update();\r\n\r\n const parentRel11 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(parentRel11).to.not.be.undefined;\r\n\r\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex3Id);\r\n sheetIndexRef!.update();\r\n\r\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(refersRel21).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex3Id });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n });\r\n\r\n describe(\"SheetIndexFolder\", () => {\r\n it(\"Should insert\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1});\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndexId, targetId: folderId });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexOwnsEntries.classFullName);\r\n\r\n expect(folder?.parent?.id).equals(sheetIndexId);\r\n });\r\n\r\n it(\"Should not insert SheetIndexFolder with the same name\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const folder = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folder)).to.be.true;\r\n\r\n const failInsert = () => SheetIndexFolder.insert({iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n\r\n it(\"Should have children\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const folder1Id = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\r\n expect(Id64.isValidId64(folder1Id)).to.be.true;\r\n\r\n const folder2Id = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: folder1Id, name: \"TestFolder-2\", priority: 1 });\r\n expect(Id64.isValidId64(folder2Id)).to.be.true;\r\n const folder2 = iModel.elements.tryGetElement<SheetIndexFolder>(folder2Id);\r\n expect(folder2).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: folder1Id, targetId: folder2Id });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexFolderOwnsEntries.classFullName);\r\n\r\n expect(folder2?.parent?.id).equals(folder1Id);\r\n });\r\n });\r\n\r\n describe(\"SheetReferences\", () => {\r\n it(\"Should not insert SheetReferences with the same name\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRef1 = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef1)).to.be.true;\r\n\r\n const failInsert = () => SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n\r\n it(\"Should insert SheetReferences without a Sheet\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRef = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef)).to.be.true;\r\n });\r\n\r\n it(\"Should insert and with a Sheet\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const sheetId = await insertSheet(iModel, \"sheet-1\");\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRefId = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1, sheetId });\r\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\r\n\r\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\r\n expect(ref).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheetId });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetReferenceRefersToSheet.classFullName);\r\n\r\n expect(ref?.sheet?.id).equals(sheetId);\r\n });\r\n\r\n it.skip(\"Should not insert with the same Sheet twice\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const sheetId = await insertSheet(iModel, \"sheet-1\");\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n\r\n SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-1\", priority: 1, sheetId });\r\n\r\n const sameIndex = () => SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-2\", priority: 2, sheetId });\r\n\r\n expect(sameIndex).throws();\r\n });\r\n });\r\n\r\n describe(\"SheetIndexReferences\", () => {\r\n it(\"Should not insert SheetIndexReferences with the same name\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetIndexRef = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetIndexRef)).to.be.true;\r\n\r\n const failInsert = () => SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n\r\n it(\"Should insert SheetIndexReferences without a SheetIndexRef\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetRef = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetIndexRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef)).to.be.true;\r\n });\r\n\r\n it(\"Should insert and with a SheetIndexRef\", async () => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n\r\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndexRefId = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetRef\", priority: 1, sheetIndexId: sheetIndex2Id });\r\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\r\n\r\n const ref = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\r\n expect(ref).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexReferenceRefersToSheetIndex.classFullName);\r\n\r\n expect(ref?.sheetIndex?.id).equals(sheetIndex2Id);\r\n });\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SheetIndex.test.js","sourceRoot":"","sources":["../../../../src/test/sheetindex/SheetIndex.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { BisCodeSpec, CodeScopeSpec, CodeSpec, GeometricModel2dProps, RelatedElement, SheetProps } from \"@itwin/core-common\";\n\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\nimport { DocumentPartition, Sheet } from \"../../Element\";\nimport { expect } from \"chai\";\nimport { DocumentListModel, SheetIndexModel, SheetModel } from \"../../Model\";\nimport { ElementOwnsChildElements, SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"../../NavigationRelationship\";\nimport { SheetIndex, SheetIndexFolder, SheetIndexReference, SheetReference } from \"../../SheetIndex\";\n\nexport const getOrCreateDocumentList = async (iModel: IModelDb): Promise<Id64String> => {\n const documentListName = \"SheetList\";\n let documentListModelId: string | undefined;\n\n // Attempt to find an existing document partition and document list model\n const ids = iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'`});\n if (ids.size === 1) {\n documentListModelId = ids.values().next().value;\n }\n\n // If they do not exist, create the document partition and document list model\n if (documentListModelId === undefined) {\n const subjectId = iModel.elements.getRootSubject().id;\n await iModel.locks.acquireLocks({\n shared: subjectId,\n });\n documentListModelId = DocumentListModel.insert(iModel, subjectId, documentListName);\n }\n\n return documentListModelId;\n};\n\nconst insertSheet = async (iModel: IModelDb, sheetName: string): Promise<Id64String> => {\n const createSheetProps = {\n height: 42,\n width: 42,\n scale: 42,\n };\n // Get or make documentListModelId\n const modelId = await getOrCreateDocumentList(iModel);\n\n // Acquire locks and create sheet\n await iModel.locks.acquireLocks({ shared: modelId });\n const sheetElementProps: SheetProps = {\n ...createSheetProps,\n classFullName: Sheet.classFullName,\n code: Sheet.createCode(iModel, modelId, sheetName),\n model: modelId,\n };\n const sheetElementId = iModel.elements.insertElement(sheetElementProps);\n\n const sheetModelProps: GeometricModel2dProps = {\n classFullName: SheetModel.classFullName,\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" } as RelatedElement,\n };\n const sheetModelId = iModel.models.insertModel(sheetModelProps);\n\n return sheetModelId;\n};\n\nconst insertCodeSpec = async (iModel: IModelDb) => {\n const indexSpec = CodeSpec.create(iModel, BisCodeSpec.sheetIndex, CodeScopeSpec.Type.Model);\n iModel.codeSpecs.insert(indexSpec);\n\n const entrySpec = CodeSpec.create(iModel, BisCodeSpec.sheetIndexEntry, CodeScopeSpec.Type.ParentElement);\n iModel.codeSpecs.insert(entrySpec);\n};\n\ndescribe(\"SheetIndex\", () => {\n let iModel: SnapshotDb;\n\n beforeEach(async () => {\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSheetIndex.bim\");\n\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"SheetIndex\" } });\n await ExtensiveTestScenario.prepareDb(iModelDb);\n await ExtensiveTestScenario.populateDb(iModelDb);\n iModel = iModelDb;\n\n await insertCodeSpec(iModel);\n });\n\n afterEach(() => {\n iModel.abandonChanges();\n iModel.close();\n });\n\n it(\"SheetIndexModel Should insert\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"testSheetIndex\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n });\n\n it(\"SheetIndex Should insert\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n });\n\n describe(\"Update\", () => {\n it(\"Priority\", () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n expect(folder?.entryPriority).equals(1);\n\n folder!.entryPriority = 0;\n folder!.update();\n\n const folderPostUpdate = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folderPostUpdate?.entryPriority).equals(0);\n });\n\n it(\"Parent\", () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\n\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n\n const parentRel11 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\n expect(parentRel11).to.not.be.undefined;\n\n folder!.parent = new SheetIndexOwnsEntries(sheetIndex2Id);\n folder!.update();\n\n const parentRel12 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\n expect(parentRel12).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex2Id, targetId: folderId });\n expect(parentRel22).to.not.be.undefined;\n });\n\n it(\"Sheet Reference\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const sheet1Id = await insertSheet(iModel, \"sheet-1\");\n const sheet2Id = await insertSheet(iModel, \"sheet-2\");\n\n const sheetRefId = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestSheetReference\", priority: 1 });\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\n\n const sheetRef = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\n expect(sheetRef).to.not.be.undefined;\n expect(sheetRef!.sheet).to.be.undefined;\n\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet1Id);\n sheetRef!.update();\n\n const refersRel11 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\n expect(refersRel11).to.not.be.undefined;\n\n const parentRel12 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\n expect(parentRel12).to.be.undefined;\n\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet2Id);\n sheetRef!.update();\n\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\n expect(refersRel21).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\n expect(parentRel22).to.not.be.undefined;\n });\n\n it(\"Sheet Index Reference\", () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\n const sheetIndex3Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-3\");\n expect(Id64.isValidId64(sheetIndex3Id)).to.be.true;\n\n const sheetIndexRefId = SheetIndexReference.insert({iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetReference\", priority: 1});\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\n\n const sheetIndexRef = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\n expect(sheetIndexRef).to.not.be.undefined;\n expect(sheetIndexRef!.sheetIndex).to.be.undefined;\n\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex2Id);\n sheetIndexRef!.update();\n\n const parentRel11 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(parentRel11).to.not.be.undefined;\n\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex3Id);\n sheetIndexRef!.update();\n\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(refersRel21).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex3Id });\n expect(parentRel22).to.not.be.undefined;\n });\n });\n\n describe(\"SheetIndexFolder\", () => {\n it(\"Should insert\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const folderId = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1});\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndexId, targetId: folderId });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexOwnsEntries.classFullName);\n\n expect(folder?.parent?.id).equals(sheetIndexId);\n });\n\n it(\"Should not insert SheetIndexFolder with the same name\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const folder = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folder)).to.be.true;\n\n const failInsert = () => SheetIndexFolder.insert({iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 0 });\n\n expect(failInsert).throws();\n });\n\n it(\"Should have children\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndexId = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const folder1Id = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\n expect(Id64.isValidId64(folder1Id)).to.be.true;\n\n const folder2Id = SheetIndexFolder.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: folder1Id, name: \"TestFolder-2\", priority: 1 });\n expect(Id64.isValidId64(folder2Id)).to.be.true;\n const folder2 = iModel.elements.tryGetElement<SheetIndexFolder>(folder2Id);\n expect(folder2).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: folder1Id, targetId: folder2Id });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexFolderOwnsEntries.classFullName);\n\n expect(folder2?.parent?.id).equals(folder1Id);\n });\n });\n\n describe(\"SheetReferences\", () => {\n it(\"Should not insert SheetReferences with the same name\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRef1 = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef1)).to.be.true;\n\n const failInsert = () => SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 0 });\n\n expect(failInsert).throws();\n });\n\n it(\"Should insert SheetReferences without a Sheet\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRef = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef)).to.be.true;\n });\n\n it(\"Should insert and with a Sheet\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n const sheetId = await insertSheet(iModel, \"sheet-1\");\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRefId = SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1, sheetId });\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\n\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\n expect(ref).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheetId });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetReferenceRefersToSheet.classFullName);\n\n expect(ref?.sheet?.id).equals(sheetId);\n });\n\n it.skip(\"Should not insert with the same Sheet twice\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n const sheetId = await insertSheet(iModel, \"sheet-1\");\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n\n SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-1\", priority: 1, sheetId });\n\n const sameIndex = () => SheetReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-2\", priority: 2, sheetId });\n\n expect(sameIndex).throws();\n });\n });\n\n describe(\"SheetIndexReferences\", () => {\n it(\"Should not insert SheetIndexReferences with the same name\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetIndexRef = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 1 });\n expect(Id64.isValidId64(sheetIndexRef)).to.be.true;\n\n const failInsert = () => SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 0 });\n\n expect(failInsert).throws();\n });\n\n it(\"Should insert SheetIndexReferences without a SheetIndexRef\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetRef = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetIndexRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef)).to.be.true;\n });\n\n it(\"Should insert and with a SheetIndexRef\", async () => {\n const subjectId = iModel.elements.getRootSubject().id;\n\n const modelId = SheetIndexModel.insert(iModel, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex1Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n const sheetIndex2Id = SheetIndex.insert(iModel, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndexRefId = SheetIndexReference.insert({ iModelDb: iModel, sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetRef\", priority: 1, sheetIndexId: sheetIndex2Id });\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\n\n const ref = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\n expect(ref).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexReferenceRefersToSheetIndex.classFullName);\n\n expect(ref?.sheetIndex?.id).equals(sheetIndex2Id);\n });\n });\n});\n"]}
|