@itwin/core-backend 5.9.0-dev.9 → 5.10.0-dev.3
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 +18 -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.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +6 -3
- 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.d.ts +9 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +255 -249
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +186 -0
- package/lib/cjs/ChangesetReader.d.ts.map +1 -0
- package/lib/cjs/ChangesetReader.js +372 -0
- package/lib/cjs/ChangesetReader.js.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.js +23 -0
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
- 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.d.ts +1 -1
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +68 -13
- 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.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts +55 -1
- package/lib/cjs/EditTxn.d.ts.map +1 -1
- package/lib/cjs/EditTxn.js +43 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +69 -0
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +36 -0
- 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.d.ts +15 -0
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +13 -4
- 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 +9 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +32 -13
- 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 +20 -9
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- 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.d.ts +34 -0
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +24 -0
- 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/PartialChangeUnifier.d.ts +77 -0
- package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/cjs/PartialChangeUnifier.js +234 -0
- package/lib/cjs/PartialChangeUnifier.js.map +1 -0
- 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.d.ts.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js +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.d.ts +14 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +25 -0
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +19 -7
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +77 -25
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.d.ts.map +1 -1
- package/lib/cjs/ViewStore.js +63 -21
- 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 +3 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +3 -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.d.ts +10 -10
- package/lib/cjs/internal/IntegrityCheck.js +22 -22
- 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 +33 -33
- 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/SettingsEditorImpl.js.map +1 -1
- 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/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 +6 -4
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- 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.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +6 -3
- 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.d.ts +9 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +255 -249
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +186 -0
- package/lib/esm/ChangesetReader.d.ts.map +1 -0
- package/lib/esm/ChangesetReader.js +368 -0
- package/lib/esm/ChangesetReader.js.map +1 -0
- package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
- package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/esm/ChangesetReaderTypes.js +20 -0
- package/lib/esm/ChangesetReaderTypes.js.map +1 -0
- 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.d.ts +1 -1
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +69 -14
- 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.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.d.ts +55 -1
- package/lib/esm/EditTxn.d.ts.map +1 -1
- package/lib/esm/EditTxn.js +43 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +69 -0
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +36 -0
- 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.d.ts +15 -0
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +12 -4
- 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 +9 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +33 -14
- 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 +20 -9
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- 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.d.ts +34 -0
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +24 -0
- 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/PartialChangeUnifier.d.ts +77 -0
- package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/esm/PartialChangeUnifier.js +230 -0
- package/lib/esm/PartialChangeUnifier.js.map +1 -0
- 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.d.ts.map +1 -1
- package/lib/esm/SqliteChangesetReader.js +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.d.ts +14 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +25 -0
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +19 -7
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +78 -26
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.d.ts.map +1 -1
- package/lib/esm/ViewStore.js +64 -22
- 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 +3 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +3 -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.d.ts +10 -10
- package/lib/esm/internal/IntegrityCheck.js +22 -22
- 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 +33 -33
- 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/SettingsEditorImpl.js.map +1 -1
- 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/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.d.ts.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.d.ts +1 -0
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +5 -0
- 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 +112 -0
- 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/TestEditTxn.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 +0 -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 +31 -31
- 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.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.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
- 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 +283 -142
- 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 +57 -57
- 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 +45 -45
- 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 +77 -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 +43 -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 +4201 -1671
- 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/DeleteElements.test.d.ts +2 -0
- package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
- package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
- 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/EditTxn.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.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/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
- 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/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
- 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.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 +20 -20
- 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 +90 -0
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
- 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.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +6 -4
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQliteChangesetReaderAndChangesetECAdaptor.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.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 { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ColorDef, GeometryStreamProps, IModel, QueryBinder, QueryRowFormat, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"node:path\";\r\nimport { DrawingCategory } from \"../../Category\";\r\nimport { ChangedECInstance, ChangesetECAdaptor, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\r\nimport { _nativeDb, ChannelControl, GraphicalElement2d, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\r\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { EditTxn } from \"../../EditTxn\";\r\n\r\n/* eslint-disable @typescript-eslint/no-deprecated */ // This test file will be removed subsequently, so we can allow usage of deprecated APIs within it.\r\n// This test file also contains tests outside of the ChangesetECAdaptor, so be cautious while removing it, remove just the tests which are related to ChangesetECAdaptor.\r\n\r\nfunction startTestTxn(iModel: BriefcaseDb | SnapshotDb, description = \"changeset reader\"): EditTxn {\r\n const txn = new EditTxn(iModel, description);\r\n txn.start();\r\n return txn;\r\n}\r\n\r\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\r\n if (txn.isActive)\r\n txn.saveChanges();\r\n await txn.iModel.importSchemaStrings(schemas);\r\n}\r\n\r\ndescribe(\"Sqlite Changeset Reader + ChangesetECAdaptor API\", async () => {\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"SqliteChangesetReaderAndChangesetECAdaptorTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\r\n /**\r\n * 1. Import schema with class that span overflow table.\r\n * 2. Insert a element for the class.\r\n * 3. Push changes to hub.\r\n * 4. Update the element.\r\n * 5. Push changes to hub.\r\n * 6. Delete the element.\r\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\r\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const nProps = 36;\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"recover overflow table changeset reader\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n // Insert element with 100 properties\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const props = Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `test_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {});\r\n\r\n const geomElement = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...props,\r\n };\r\n\r\n // 2. Insert a element for the class.\r\n const id = txn.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n txn.saveChanges();\r\n\r\n // 3. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 4. Update the element.\r\n const updatedElementProps = Object.assign(\r\n rwIModel.elements.getElementProps(id),\r\n Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `updated_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {}));\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n txn.updateElement(updatedElementProps);\r\n txn.saveChanges();\r\n\r\n // 5. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n\r\n // 6. Delete the element.\r\n txn.deleteElement(id);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\r\n\r\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\r\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\r\n\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n let assertOnOverflowTable = false;\r\n const classId = getClassIdByName(rwIModel, \"GeometricElement2d\");\r\n\r\n while (adaptor.step()) {\r\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\r\n\r\n assert.isUndefined(adaptor.inserted.ECClassId);\r\n assert.equal(adaptor.inserted.ECInstanceId, \"\");\r\n assert.deepEqual(adaptor.inserted.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.inserted.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.inserted.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.inserted.$meta.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.inserted.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.inserted.$meta?.stage, \"New\");\r\n\r\n assert.equal(adaptor.deleted!.ECInstanceId, \"\");\r\n assert.isUndefined(adaptor.deleted!.ECClassId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.deleted!.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.deleted!.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.deleted!.$meta!.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.deleted!.$meta?.stage, \"Old\");\r\n\r\n assertOnOverflowTable = true;\r\n }\r\n }\r\n\r\n assert.isTrue(assertOnOverflowTable);\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n\r\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\r\n stmt.bindString(1, className);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n return stmt.getValue(0).getId();\r\n });\r\n }\r\n\r\n async function getClassNameById(iModel: BriefcaseDb, classId: string): Promise<string | undefined> {\r\n const reader = iModel.createQueryReader(`select ec_classname(${classId});`);\r\n\r\n if (await reader.step())\r\n return reader.current[0] as string;\r\n\r\n return undefined;\r\n }\r\n\r\n it(\"Changeset reader / EC adaptor\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"changeset reader EC adaptor\");\r\n\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n }\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges(\"user 1: create drawing partition\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n }\r\n\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const insertElements = (className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = txn.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n const generatedStr = new Array(10).join(\"x\");\r\n insertElements(\"Test2dElement\", 1, () => {\r\n return { s: generatedStr };\r\n });\r\n\r\n const updatedElements = async () => {\r\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\r\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\r\n (updatedElement as any).s = \"updated property\";\r\n txn.updateElement(updatedElement);\r\n txn.saveChanges(\"user 1: updated data\");\r\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\r\n };\r\n\r\n txn.saveChanges(\"user 1: data\");\r\n\r\n if (true || \"test local changes\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n\r\n await updatedElements();\r\n\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n if (true || \"updated element\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].ECClassId, classId);\r\n assert.equal(changes[2].s, \"updated property\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[3].ECClassId, classId);\r\n assert.equal(changes[3].s, \"xxxxxxxxx\");\r\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"updated element when no classId\") {\r\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[2].ECClassId);\r\n assert.isDefined(changes[2].$meta?.fallbackClassId);\r\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[2].s);\r\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[3].ECClassId);\r\n assert.isDefined(changes[3].$meta?.fallbackClassId);\r\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[3].s);\r\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"test changeset file\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 1);\r\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.adaptor()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 2);\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"revert timeline changes\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"revert timeline changes\");\r\n let nProps = 0;\r\n // 1. Import schema with class that span overflow table.\r\n const addPropertyAndImportSchema = async () => {\r\n await rwIModel.acquireSchemaLock();\r\n ++nProps;\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n };\r\n await addPropertyAndImportSchema();\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const createEl = async (args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...args,\r\n };\r\n return txn.insertElement(e1);;\r\n };\r\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\r\n txn.updateElement(updatedElementProps);\r\n };\r\n\r\n const deleteEl = async (id: Id64String) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n txn.deleteElement(id);\r\n };\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\r\n };\r\n\r\n const findEl = (id: Id64String) => {\r\n try {\r\n return rwIModel.elements.getElementProps(id);\r\n } catch {\r\n return undefined;\r\n }\r\n };\r\n // 2. Insert a element for the class\r\n const el1 = await createEl({ p1: \"test1\" });\r\n const el2 = await createEl({ p1: \"test2\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\r\n\r\n // 3. Update the element.\r\n await updateEl(el1, { p1: \"test3\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element 1\" });\r\n\r\n // 4. Delete the element.\r\n await deleteEl(el2);\r\n const el3 = await createEl({ p1: \"test4\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element 2\" });\r\n\r\n // 5. import schema and insert element 4 & update element 3\r\n await addPropertyAndImportSchema();\r\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\r\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\r\n\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n // 6. Revert to timeline 2\r\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\r\n\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n\r\n await addPropertyAndImportSchema();\r\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\r\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n // skip schema changes & auto generated comment\r\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n assert.isUndefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n assert.isDefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"openGroup() & writeToFile()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"openGroup writeToFile\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = txn.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 3. Update the element.\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n txn.updateElement(updatedElementProps);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n // 4. Delete the element.\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n txn.deleteElement(e1id);\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\r\n\r\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n\r\n expect(instances.length).to.eq(1);\r\n expect(instances[0].id).to.eq(\"0x20000000001\");\r\n expect(instances[0].classId).to.eq(drawingModelClassId);\r\n expect(instances[0].op).to.eq(\"Updated\");\r\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\r\n }\r\n\r\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n\r\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\r\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n\r\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\r\n }\r\n if (true || \"writeToFile() test\") {\r\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n\r\n it(\"Delete class FK constraint violation in cache table\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\r\n\r\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK constraint setup\");\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?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 <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n\r\n // Sync the second briefcase with the iModel\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n </ECSchema>`]);\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, true);\r\n\r\n // Apply the latest changeset to a new briefcase\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n firstTxn.end();\r\n secondBriefCase.close();\r\n firstBriefCase.close();\r\n });\r\n\r\n\r\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefCase, \"delete class FK revert\");\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?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 <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await importSchemaStrings(firstTxn, [`<?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 <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"AnotherTestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Revert the latest changeset from the first briefcase\r\n try {\r\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\r\n\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n firstTxn.end();\r\n secondBriefCase.close();\r\n firstBriefCase.close();\r\n });\r\n\r\n it(\"Track changeset health stats\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefcase, secondBriefcase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n const firstTxn = startTestTxn(firstBriefcase, \"track changeset health first briefcase\");\r\n const secondTxn = startTestTxn(secondBriefcase, \"track changeset health second briefcase\");\r\n\r\n [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await importSchemaStrings(firstTxn, [`<?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 <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n\r\n // Enable changeset tracking for both briefcases\r\n await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Schema upgrade\r\n await importSchemaStrings(secondTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.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 <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"TestProperty\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n\r\n await secondBriefcase.pushChanges({ description: \"Added a property to TestClass and an enum\", accessToken: adminToken });\r\n await firstBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Major schema change\r\n await importSchemaStrings(firstTxn, [`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"Deleted TestClass\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();\r\n const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();\r\n\r\n assert.equal(firstBriefcaseChangesets.length, 1);\r\n const firstBriefcaseChangeset = firstBriefcaseChangesets[0];\r\n\r\n expect(firstBriefcaseChangeset.changesetIndex).to.be.eql(2);\r\n expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);\r\n expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);\r\n expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);\r\n expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);\r\n\r\n assert.equal(secondBriefcaseChangesets.length, 2);\r\n const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;\r\n\r\n expect(secondBriefcaseChangeset1.changesetIndex).to.be.eql(1);\r\n expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset1.insertedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset1.deletedRows).to.be.greaterThanOrEqual(0)\r\n expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);\r\n\r\n expect(secondBriefcaseChangeset2.changesetIndex).to.be.eql(3);\r\n expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset2.insertedRows).to.be.greaterThanOrEqual(0);\r\n expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset2.deletedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);\r\n\r\n // Cleanup\r\n secondTxn.end();\r\n firstTxn.end();\r\n secondBriefcase.close();\r\n firstBriefcase.close();\r\n });\r\n it(\"openInMemory() & step()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n const txn = startTestTxn(rwIModel, \"openInMemory step\");\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await importSchemaStrings(txn, [schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n txn.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = txn.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n const testElClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n if (true) {\r\n const reader = SqliteChangesetReader.openInMemory({ db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(1);\r\n const testEl = instances[0];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n\r\n // save changes and verify the the txn\r\n txn.saveChanges();\r\n\r\n if (true) {\r\n const txnId = rwIModel.txns.getLastSavedTxnProps()?.id as string;\r\n expect(txnId).to.not.be.undefined;\r\n const reader = SqliteChangesetReader.openTxn({ db: rwIModel, disableSchemaCheck: true, txnId });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(3);\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n // DrawingModel new instance\r\n const drawingModelElNew = instances[0];\r\n expect(drawingModelElNew.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElNew.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElNew.$meta?.stage).to.equals(\"New\");\r\n expect(drawingModelElNew.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElNew.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElNew.LastMod).to.exist;\r\n expect(drawingModelElNew.GeometryGuid).to.exist;\r\n\r\n // DrawingModel old instance\r\n const drawingModelElOld = instances[1];\r\n expect(drawingModelElOld.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElOld.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElOld.$meta?.stage).to.equals(\"Old\");\r\n expect(drawingModelElOld.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElOld.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElOld.LastMod).to.null;\r\n expect(drawingModelElOld.GeometryGuid).to.null;\r\n\r\n // Test element instance\r\n const testEl = instances[2];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n txn.end();\r\n rwIModel.close();\r\n });\r\n it(\"Instance update to a different class (bug)\", async () => {\r\n /**\r\n * Test scenario: Verifies changeset reader behavior when an instance ID is reused with a different class.\r\n *\r\n * Steps:\r\n * 1. Import schema with two classes (T1 and T2) that inherit from GraphicalElement2d.\r\n * - T1 has property 'p' of type string\r\n * - T2 has property 'p' of type long\r\n * 2. Insert an element of type T1 with id=elId and property p=\"wwww\"\r\n * 3. Push changeset #1: \"insert element\"\r\n * 4. Delete the T1 element\r\n * 5. Manipulate the element ID sequence to force reuse of the same ID\r\n * 6. Insert a new element of type T2 with the same id=elId but property p=1111\r\n * 7. Push changeset #2: \"buggy changeset\"\r\n *\r\n * Verification:\r\n * - Changeset #2 should show an \"Updated\" operation (not Delete+Insert)\r\n * - In bis_Element table: ECClassId changes from T1 to T2\r\n * - In bis_GeometricElement2d table: ECClassId changes from T1 to T2\r\n * - Property 'p' changes from string \"wwww\" to integer 1111\r\n *\r\n * This tests the changeset reader's ability to handle instance class changes,\r\n * which can occur in edge cases where IDs are reused with different types.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const modelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(modelId);\r\n let b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: modelId, accessToken: adminToken });\r\n let txn = startTestTxn(b1, \"instance update to different class\");\r\n // 1. Import schema with classes that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"T1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"T2\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"long\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await importSchemaStrings(txn, [schema]);\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const geomElementT1 = {\r\n classFullName: `TestDomain:T1`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: \"wwww\",\r\n };\r\n\r\n const elId = txn.insertElement(geomElementT1);\r\n assert.isTrue(Id64.isValidId64(elId), \"insert worked\");\r\n txn.saveChanges();\r\n await b1.pushChanges({ description: \"insert element\" });\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId, exclusive: elId });\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n txn.deleteElement(elId);\r\n txn.saveChanges();\r\n\r\n // Force id set to reproduce same instance with different classid\r\n const bid = BigInt(elId) - 1n\r\n b1[_nativeDb].saveLocalValue(\"bis_elementidsequence\", bid.toString());\r\n txn.saveChanges();\r\n const fileName = b1[_nativeDb].getFilePath();\r\n txn.end();\r\n b1.close();\r\n\r\n b1 = await BriefcaseDb.open({ fileName });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n txn = startTestTxn(b1, \"instance update to different class reopened briefcase\");\r\n\r\n\r\n const geomElementT2 = {\r\n classFullName: `TestDomain:T2`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: 1111,\r\n };\r\n\r\n const elId2 = txn.insertElement(geomElementT2);\r\n chai.expect(elId).equals(elId2);\r\n\r\n txn.saveChanges();\r\n await b1.pushChanges({ description: \"buggy changeset\" });\r\n\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: modelId, targetDir: path.join(KnownTestLocations.outputDir, modelId, \"changesets\") });\r\n };\r\n\r\n\r\n const changesets = await getChanges();\r\n chai.expect(changesets.length).equals(2);\r\n chai.expect(changesets[0].description).equals(\"insert element\");\r\n chai.expect(changesets[1].description).equals(\"buggy changeset\");\r\n\r\n const getClassId = async (name: string) => {\r\n const r = b1.createQueryReader(\"SELECT FORMAT('0x%x', ec_classid(?))\", QueryBinder.from([name]));\r\n if (await r.step()) {\r\n return r.current[0];\r\n }\r\n }\r\n\r\n const t1ClassId = await getClassId(\"TestDomain:T1\");\r\n const t2ClassId = await getClassId(\"TestDomain:T2\");\r\n\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 });\r\n let bisElementAsserted = false;\r\n let bisGeometricElement2dAsserted = false;\r\n while (reader.step()) {\r\n if (reader.tableName === \"bis_Element\" && reader.op === \"Updated\") {\r\n bisElementAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"Id\",\r\n \"ECClassId\",\r\n \"ModelId\",\r\n \"LastMod\",\r\n \"CodeSpecId\",\r\n \"CodeScopeId\",\r\n \"CodeValue\",\r\n \"UserLabel\",\r\n \"ParentId\",\r\n \"ParentRelECClassId\",\r\n \"FederationGuid\",\r\n \"JsonProperties\",\r\n ]);\r\n\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n }\r\n if (reader.tableName === \"bis_GeometricElement2d\" && reader.op === \"Updated\") {\r\n bisGeometricElement2dAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"ElementId\",\r\n \"ECClassId\",\r\n \"CategoryId\",\r\n \"Origin_X\",\r\n \"Origin_Y\",\r\n \"Rotation\",\r\n \"BBoxLow_X\",\r\n \"BBoxLow_Y\",\r\n \"BBoxHigh_X\",\r\n \"BBoxHigh_Y\",\r\n \"GeometryStream\",\r\n \"TypeDefinitionId\",\r\n \"TypeDefinitionRelECClassId\",\r\n \"js1\",\r\n \"js2\",\r\n ]);\r\n\r\n // ECInstanceId\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n // ECClassId (changed)\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n\r\n // Property 'p' changed type and value.\r\n const oldP = reader.getChangeValueText(13, \"Old\");\r\n const newP = reader.getChangeValueInteger(13, \"New\");\r\n chai.expect(oldP).equals(\"wwww\");\r\n chai.expect(newP).equals(1111);\r\n }\r\n }\r\n\r\n chai.expect(bisElementAsserted).to.be.true;\r\n chai.expect(bisGeometricElement2dAsserted).to.be.true;\r\n reader.close();\r\n\r\n\r\n // ChangesetECAdaptor works incorrectly as it does not expect ECClassId to change in an update.\r\n const adaptor = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n\r\n adaptor.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor.acceptOp(\"Updated\");\r\n\r\n let ecChangeForElementAsserted = false;\r\n let ecChangeForGeometricElement2dAsserted = false;\r\n while (adaptor.step()) {\r\n if (adaptor.reader.tableName === \"bis_Element\") {\r\n ecChangeForElementAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n }\r\n if (adaptor.reader.tableName === \"bis_GeometricElement2d\") {\r\n ecChangeForGeometricElement2dAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.inserted?.p).equals(\"0x457\"); // CORRECT p in T2 is integer\r\n chai.expect(adaptor.deleted?.p).equals(\"wwww\"); // CORRECT p in T1 is string\r\n }\r\n }\r\n chai.expect(ecChangeForElementAsserted).to.be.true;\r\n chai.expect(ecChangeForGeometricElement2dAsserted).to.be.true;\r\n adaptor.close();\r\n\r\n // PartialECChangeUnifier fail to combine changes correctly when ECClassId is updated.\r\n const adaptor2 = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n const unifier = new PartialECChangeUnifier(b1);\r\n adaptor2.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor2.acceptOp(\"Updated\");\r\n while (adaptor2.step()) {\r\n unifier.appendFrom(adaptor2);\r\n }\r\n\r\n chai.expect(unifier.getInstanceCount()).to.be.equals(2); // WRONG should be 1\r\n\r\n txn.end();\r\n b1.close();\r\n });\r\n\r\n});\r\n\r\ndescribe(\"PRAGMA ECSQL Functions\", async () => {\r\n let iTwinId: GuidString;\r\n let iModel: BriefcaseDb;\r\n\r\n before(() => {\r\n HubMock.startup(\"SqliteChangesetReaderAndChangesetECAdaptorTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n\r\n after(() => HubMock.shutdown());\r\n\r\n beforeEach(async () => {\r\n // Create new iModel\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"PRAGMA_test\";\r\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(iModelId);\r\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\r\n });\r\n\r\n afterEach(() => {\r\n // Cleanup\r\n iModel.close();\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check on a new iModel and return no errors\", async () => {\r\n // Call PRAGMA integrity_check\r\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\r\n const result = iModel.createQueryReader(query, undefined, undefined);\r\n const results = await result.toArray();\r\n\r\n // Verify no errors\r\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\r\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\r\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\r\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\r\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\r\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\r\n assert(results[5][2] === true, \"'check_linktable_fk_ids' check should be true\")\r\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\r\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\r\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check individual checks on a new iModel and return no errors\", async () => {\r\n // Call check_ec_profile\r\n let query = \"pragma integrity_check(check_ec_profile) options enable_experimental_features\";\r\n let result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n let resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_data_schema\r\n query = \"pragma integrity_check(check_data_schema) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_data_columns\r\n query = \"pragma integrity_check(check_data_columns) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_nav_class_ids\r\n query = \"pragma integrity_check(check_nav_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_nav_ids\r\n query = \"pragma integrity_check(check_nav_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_linktable_fk_class_ids\r\n query = \"pragma integrity_check(check_linktable_fk_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_linktable_fk_ids\r\n query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_class_ids\r\n query = \"pragma integrity_check(check_class_ids) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n\r\n // Call check_schema_load\r\n query = \"pragma integrity_check(check_schema_load) options enable_experimental_features\";\r\n result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(0); // No errors expected\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check on a corrupted iModel and return an error\", async () => {\r\n // Insert two elements\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted iModel\");\r\n\r\n const element1Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\r\n });\r\n\r\n const element2Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\r\n });\r\n txn.saveChanges();\r\n\r\n // Create a relationship between them\r\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\r\n const relationship = iModel.relationships.createInstance({\r\n classFullName: \"BisCore:SubjectRefersToSubject\",\r\n sourceId: element1Id,\r\n targetId: element2Id,\r\n });\r\n const relationshipId = txn.insertRelationship(relationship.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId));\r\n txn.saveChanges();\r\n\r\n // Delete one element without deleting the relationship to corrupt the iModel\r\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\r\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\r\n txn.saveChanges();\r\n\r\n // Call PRAGMA integrity_check\r\n const query = \"PRAGMA integrity_check ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\";\r\n const result = iModel.createQueryReader(query, undefined, undefined);\r\n const results = await result.toArray();\r\n\r\n // Verify error is reported\r\n assert(results.length > 0, \"Results should be returned from PRAGMA integrity_check\");\r\n assert(results[0][2] === true, \"'check_data_columns' check should be true\");\r\n assert(results[1][2] === true, \"'check_ec_profile' check should be true\")\r\n assert(results[2][2] === true, \"'check_nav_class_ids' check should be true\")\r\n assert(results[3][2] === true, \"'check_nav_ids' check should be true\")\r\n assert(results[4][2] === true, \"'check_linktable_fk_class_ids' check should be true\")\r\n assert(results[5][2] === false, \"'check_linktable_fk_ids' check should be false\") // Expecting error report here\r\n assert(results[6][2] === true, \"'check_class_ids' check should be true\")\r\n assert(results[7][2] === true, \"'check_data_schema' check should be true\")\r\n assert(results[8][2] === true, \"'check_schema_load' check should be true\")\r\n txn.end();\r\n });\r\n\r\n it(\"should call PRAGMA integrity_check(check_linktable_fk_class_ids) on a corrupted iModel and return an error\", async () => {\r\n // Insert two elements\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n const txn = startTestTxn(iModel, \"PRAGMA integrity check corrupted linktable fk ids\");\r\n\r\n const element1Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\r\n });\r\n\r\n const element2Id = txn.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\r\n });\r\n txn.saveChanges();\r\n\r\n // Create a relationship between them\r\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\r\n const relationship = iModel.relationships.createInstance({\r\n classFullName: \"BisCore:SubjectRefersToSubject\",\r\n sourceId: element1Id,\r\n targetId: element2Id,\r\n });\r\n const relationshipId = txn.insertRelationship(relationship.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId));\r\n txn.saveChanges();\r\n\r\n // Delete one element without deleting the relationship to corrupt the iModel\r\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\r\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\r\n txn.saveChanges();\r\n\r\n // Call PRAGMA integrity_check\r\n const query = \"pragma integrity_check(check_linktable_fk_ids) options enable_experimental_features\";\r\n const result = iModel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseECSqlPropertyNames });\r\n const resultArray = await result.toArray();\r\n expect(resultArray.length).to.equal(1); // 1 error report expected\r\n expect(resultArray[0].id).to.equal(\"0x20000000001\");\r\n expect(resultArray[0].key_id).to.equal(\"0x20000000002\");\r\n txn.end();\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 } from \"chai\";\nimport { Schema } from \"../../Schema\";\nimport * as Semver from \"semver\";\n\ndescribe(\"Schema Utilities Test\", () => {\n\n it(\"paddedVersionToSemver\", async () => {\n assert.equal(Schema.toSemverString(\"1.00.00\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.00.00\")));\n\n assert.equal(Schema.toSemverString(\"01.0.0\"), \"1.0.0\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"01.0.0\")));\n\n assert.equal(Schema.toSemverString(\"1.2.3\"), \"1.2.3\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.2.3\")));\n\n assert.equal(Schema.toSemverString(\"012.0013\"), \"12.0.13\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"012.0013\")));\n\n // bad inputs with undefined behavior\n\n assert.equal(Schema.toSemverString(\"bad.input\"), \"NaN.0.NaN\");\n assert.isNull(Semver.valid(Schema.toSemverString(\"bad.input\")));\n\n assert.equal(Schema.toSemverString(\"1..2\"), \"1.0.2\");\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1..2\")));\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaUtils.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SchemaUtils.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAErC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QAErC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 } from \"chai\";\r\nimport { Schema } from \"../../Schema\";\r\nimport * as Semver from \"semver\";\r\n\r\ndescribe(\"Schema Utilities Test\", () => {\r\n\r\n it(\"paddedVersionToSemver\", async () => {\r\n assert.equal(Schema.toSemverString(\"1.00.00\"), \"1.0.0\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.00.00\")));\r\n\r\n assert.equal(Schema.toSemverString(\"01.0.0\"), \"1.0.0\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"01.0.0\")));\r\n\r\n assert.equal(Schema.toSemverString(\"1.2.3\"), \"1.2.3\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1.2.3\")));\r\n\r\n assert.equal(Schema.toSemverString(\"012.0013\"), \"12.0.13\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"012.0013\")));\r\n\r\n // bad inputs with undefined behavior\r\n\r\n assert.equal(Schema.toSemverString(\"bad.input\"), \"NaN.0.NaN\");\r\n assert.isNull(Semver.valid(Schema.toSemverString(\"bad.input\")));\r\n\r\n assert.equal(Schema.toSemverString(\"1..2\"), \"1.0.2\");\r\n assert.isNotNull(Semver.valid(Schema.toSemverString(\"1..2\")));\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.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 { expect } from \"chai\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { RelatedElement, SectionDrawingProps, SectionType } from \"@itwin/core-common\";\nimport { Drawing, SectionDrawing } from \"../../Element\";\nimport { DocumentListModel, DrawingModel, SectionDrawingModel } from \"../../Model\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"SectionDrawing\", () => {\n let imodel: SnapshotDb;\n let documentListModelId: string;\n before(() => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"SectionDrawing\", \"SectionDrawing.bim\");\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"SectionDrawingTest\" } });\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should round-trip through JSON\", () => {\n // Insert a SectionDrawing\n const drawingId = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: SectionDrawing.classFullName,\n model: documentListModelId,\n code: Drawing.createCode(imodel, documentListModelId, \"SectionDrawingRoundTrip\"),\n }));\n expect(Id64.isValidId64(drawingId)).to.be.true;\n\n const model = imodel.models.createModel({\n classFullName: DrawingModel.classFullName,\n modeledElement: { id: drawingId },\n });\n const modelId = withEditTxn(imodel, (txn) => txn.insertModel(model.toJSON()));\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n let drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n expect(drawing instanceof SectionDrawing).to.be.true;\n\n // Expect default values\n expect(Id64.isValidId64(drawing.spatialView.id)).to.be.false;\n expect(drawing.sectionType).to.equal(SectionType.Section);\n expect(drawing.jsonProperties.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.jsonProperties.sheetToSpatialTransform).to.be.undefined;\n expect(drawing.drawingToSpatialTransform).to.be.undefined;\n expect(drawing.sheetToSpatialTransform).to.be.undefined;\n\n // Modify values\n const drawingToSpatial = Transform.createTranslationXYZ(1, 2, 3);\n const sheetToSpatial = Transform.createTranslationXYZ(4, 5, 6);\n drawing.spatialView = new RelatedElement({ id: \"0x123\" });\n drawing.sectionType = SectionType.Elevation;\n drawing.drawingToSpatialTransform = drawingToSpatial;\n drawing.sheetToSpatialTransform = sheetToSpatial;\n\n // Expect updated values\n const expectProps = (json: SectionDrawingProps | SectionDrawing) => {\n expect(json.spatialView).not.to.be.undefined;\n expect(json.spatialView?.id).to.equal(\"0x123\");\n expect(json.sectionType).to.equal(SectionType.Elevation);\n expect(Transform.fromJSON(json.jsonProperties?.drawingToSpatialTransform).isAlmostEqual(drawingToSpatial)).to.be.true;\n expect(Transform.fromJSON(json.jsonProperties?.sheetToSpatialTransform).isAlmostEqual(sheetToSpatial)).to.be.true;\n };\n\n const props = drawing.toJSON();\n expectProps(props);\n\n // Persist changes\n withEditTxn(imodel, (txn) => txn.updateElement(props));\n\n // Obtain persistent element\n drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\n\n // Expect persistent values\n expectProps(drawing);\n expectProps(drawing.toJSON());\n });\n\n it(\"should create a SectionDrawing and SectionDrawingModel on insert\", () => {\n const sectionDrawingId = withEditTxn(imodel, (txn) => SectionDrawing.insert(txn, documentListModelId, \"SectionDrawingInsert\"));\n\n expect(Id64.isValidId64(sectionDrawingId)).to.be.true;\n\n const insertedSectionDrawing = imodel.elements.getElement(sectionDrawingId);\n\n expect(insertedSectionDrawing instanceof SectionDrawing).to.be.true;\n\n const insertedSectionDrawingModel = imodel.models.getModel(sectionDrawingId);\n\n expect(insertedSectionDrawingModel.className).to.equal(\"SectionDrawingModel\");\n expect(insertedSectionDrawingModel instanceof SectionDrawingModel).to.be.true;\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"SectionDrawing.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SectionDrawing.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAuB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,MAAkB,CAAC;IACvB,IAAI,mBAA2B,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC7F,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC7F,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,0BAA0B;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;YAC/D,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,yBAAyB,CAAC;SACjF,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACtC,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,cAAc,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE7C,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,SAAS,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,YAAY,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAErD,wBAAwB;QACxB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAExD,gBAAgB;QAChB,MAAM,gBAAgB,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QAC5C,OAAO,CAAC,yBAAyB,GAAG,gBAAgB,CAAC;QACrD,OAAO,CAAC,uBAAuB,GAAG,cAAc,CAAC;QAEjD,wBAAwB;QACxB,MAAM,WAAW,GAAG,CAAC,IAA0C,EAAE,EAAE;YACjE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACtH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACpH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,CAAC,KAAK,CAAC,CAAC;QAEnB,kBAAkB;QAClB,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,4BAA4B;QAC5B,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,SAAS,CAAC,CAAC;QAEhE,2BAA2B;QAC3B,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAE/H,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtD,MAAM,sBAAsB,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE5E,MAAM,CAAC,sBAAsB,YAAY,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEpE,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAE7E,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC9E,MAAM,CAAC,2BAA2B,YAAY,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 { expect } from \"chai\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { RelatedElement, SectionDrawingProps, SectionType } from \"@itwin/core-common\";\r\nimport { Drawing, SectionDrawing } from \"../../Element\";\r\nimport { DocumentListModel, DrawingModel, SectionDrawingModel } from \"../../Model\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"SectionDrawing\", () => {\r\n let imodel: SnapshotDb;\r\n let documentListModelId: string;\r\n before(() => {\r\n const iModelPath = IModelTestUtils.prepareOutputFile(\"SectionDrawing\", \"SectionDrawing.bim\");\r\n imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"SectionDrawingTest\" } });\r\n documentListModelId = withEditTxn(imodel, (txn) => DocumentListModel.insert(txn, SnapshotDb.rootSubjectId, \"DocumentList\"));\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"should round-trip through JSON\", () => {\r\n // Insert a SectionDrawing\r\n const drawingId = withEditTxn(imodel, (txn) => txn.insertElement({\r\n classFullName: SectionDrawing.classFullName,\r\n model: documentListModelId,\r\n code: Drawing.createCode(imodel, documentListModelId, \"SectionDrawingRoundTrip\"),\r\n }));\r\n expect(Id64.isValidId64(drawingId)).to.be.true;\r\n\r\n const model = imodel.models.createModel({\r\n classFullName: DrawingModel.classFullName,\r\n modeledElement: { id: drawingId },\r\n });\r\n const modelId = withEditTxn(imodel, (txn) => txn.insertModel(model.toJSON()));\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n let drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\r\n expect(drawing instanceof SectionDrawing).to.be.true;\r\n\r\n // Expect default values\r\n expect(Id64.isValidId64(drawing.spatialView.id)).to.be.false;\r\n expect(drawing.sectionType).to.equal(SectionType.Section);\r\n expect(drawing.jsonProperties.drawingToSpatialTransform).to.be.undefined;\r\n expect(drawing.jsonProperties.sheetToSpatialTransform).to.be.undefined;\r\n expect(drawing.drawingToSpatialTransform).to.be.undefined;\r\n expect(drawing.sheetToSpatialTransform).to.be.undefined;\r\n\r\n // Modify values\r\n const drawingToSpatial = Transform.createTranslationXYZ(1, 2, 3);\r\n const sheetToSpatial = Transform.createTranslationXYZ(4, 5, 6);\r\n drawing.spatialView = new RelatedElement({ id: \"0x123\" });\r\n drawing.sectionType = SectionType.Elevation;\r\n drawing.drawingToSpatialTransform = drawingToSpatial;\r\n drawing.sheetToSpatialTransform = sheetToSpatial;\r\n\r\n // Expect updated values\r\n const expectProps = (json: SectionDrawingProps | SectionDrawing) => {\r\n expect(json.spatialView).not.to.be.undefined;\r\n expect(json.spatialView?.id).to.equal(\"0x123\");\r\n expect(json.sectionType).to.equal(SectionType.Elevation);\r\n expect(Transform.fromJSON(json.jsonProperties?.drawingToSpatialTransform).isAlmostEqual(drawingToSpatial)).to.be.true;\r\n expect(Transform.fromJSON(json.jsonProperties?.sheetToSpatialTransform).isAlmostEqual(sheetToSpatial)).to.be.true;\r\n };\r\n\r\n const props = drawing.toJSON();\r\n expectProps(props);\r\n\r\n // Persist changes\r\n withEditTxn(imodel, (txn) => txn.updateElement(props));\r\n\r\n // Obtain persistent element\r\n drawing = imodel.elements.getElement<SectionDrawing>(drawingId);\r\n\r\n // Expect persistent values\r\n expectProps(drawing);\r\n expectProps(drawing.toJSON());\r\n });\r\n\r\n it(\"should create a SectionDrawing and SectionDrawingModel on insert\", () => {\r\n const sectionDrawingId = withEditTxn(imodel, (txn) => SectionDrawing.insert(txn, documentListModelId, \"SectionDrawingInsert\"));\r\n\r\n expect(Id64.isValidId64(sectionDrawingId)).to.be.true;\r\n\r\n const insertedSectionDrawing = imodel.elements.getElement(sectionDrawingId);\r\n\r\n expect(insertedSectionDrawing instanceof SectionDrawing).to.be.true;\r\n\r\n const insertedSectionDrawingModel = imodel.models.getModel(sectionDrawingId);\r\n\r\n expect(insertedSectionDrawingModel.className).to.equal(\"SectionDrawingModel\");\r\n expect(insertedSectionDrawingModel instanceof SectionDrawingModel).to.be.true;\r\n });\r\n});\r\n"]}
|