@itwin/core-backend 5.11.0-dev.5 → 5.11.0-dev.6
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/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.js +3 -3
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- 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.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.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.js +7 -7
- package/lib/cjs/PartialChangeUnifier.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
- 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.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +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.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.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.js +3 -3
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ChangesetReaderTypes.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- 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.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.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.js +7 -7
- package/lib/esm/PartialChangeUnifier.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +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.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.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/SchemaChangesetCanBeReversed.test.js +51 -51
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.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.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.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
- package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
- package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
- package/lib/esm/test/schema/SchemaViewValidation.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 +296 -296
- 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.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/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.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.js +135 -135
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.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.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.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.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 +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaViewLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewLifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { expect } from \"chai\";\r\nimport { ChannelControl } from \"../../ChannelControl\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { HubWrappers } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\n/** Simple test schema that will be imported to test cache lifecycle. */\r\nconst testSchemaV1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n/** Updated schema with an additional property. */\r\nconst testSchemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropB\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\ndescribe(\"SchemaView lifecycle\", () => {\r\n let iModelId: string;\r\n\r\n before(async () => {\r\n HubMock.startup(\"SchemaViewLifecycle\", KnownTestLocations.outputDir);\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown();\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n beforeEach(async () => {\r\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);\r\n });\r\n\r\n afterEach(async () => {\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n });\r\n\r\n it(\"getSchemaView reflects imported schema after importSchemaStrings\", async () => {\r\n // Open a briefcase, get initial context\r\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n const ctx1 = await bc.getSchemaView();\r\n expect(ctx1.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\r\n expect(ctx1.isOutdated).to.be.false;\r\n\r\n // Import v1 schema - adds TestElement with PropA\r\n // importSchemaStrings calls clearCaches which immediately invalidates _schemasPromise.\r\n await bc.importSchemaStrings([testSchemaV1]);\r\n\r\n // importSchemaStrings calls clearCaches which immediately invalidates the cached view\r\n const ctx2 = await bc.getSchemaView();\r\n expect(ctx1.isOutdated).to.be.true;\r\n expect(ctx2.isOutdated).to.be.false;\r\n\r\n const testClass1 = ctx2.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass1).to.not.be.undefined;\r\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\r\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropB\")).to.be.undefined;\r\n\r\n // Import v2 schema - adds PropB\r\n await bc.importSchemaStrings([testSchemaV2]);\r\n\r\n // cache is again invalidated automatically\r\n const ctx3 = await bc.getSchemaView();\r\n expect(ctx2.isOutdated).to.be.true;\r\n expect(ctx3.isOutdated).to.be.false;\r\n\r\n const testClass2 = ctx3.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass2).to.not.be.undefined;\r\n expect(testClass2!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\r\n\r\n bc.close();\r\n });\r\n\r\n it(\"getSchemas on second briefcase reflects schema pushed from first\", async () => {\r\n // bc1 imports a schema and pushes\r\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n await bc1.importSchemaStrings([testSchemaV1]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1 schema\" });\r\n\r\n // bc2 pulls and should see the new schema\r\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n const ctx = await bc2.getSchemaView();\r\n const testClass = ctx.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass).to.not.be.undefined;\r\n expect(testClass!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\r\n\r\n bc1.close();\r\n bc2.close();\r\n });\r\n\r\n it(\"pullChanges invalidates cached SchemaView\", async () => {\r\n // bc1 will push schema changes; bc2 will pull them\r\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // bc2 gets initial context (no test schema)\r\n const ctxBefore = await bc2.getSchemaView();\r\n expect(ctxBefore.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\r\n\r\n // bc1: import v1 + push\r\n await bc1.importSchemaStrings([testSchemaV1]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1\" });\r\n\r\n // bc2: pull changes\r\n await bc2.pullChanges();\r\n\r\n // After pulling a schema changeset, clearCaches is called which immediately nulls _schemasPromise.\r\n const ctxAfterPull = await bc2.getSchemaView();\r\n expect(ctxBefore.isOutdated).to.be.true;\r\n const testClass = ctxAfterPull.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(testClass).to.not.be.undefined;\r\n\r\n // bc1: import v2 + push\r\n await bc1.importSchemaStrings([testSchemaV2]);\r\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v2\" });\r\n\r\n // bc2: pull again\r\n await bc2.pullChanges();\r\n const ctxAfterPull2 = await bc2.getSchemaView();\r\n expect(ctxAfterPull.isOutdated).to.be.true;\r\n const updated = ctxAfterPull2.findClass(\"SchemaViewLifecycleTest:TestElement\");\r\n expect(updated).to.not.be.undefined;\r\n expect(updated!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\r\n\r\n bc1.close();\r\n bc2.close();\r\n });\r\n\r\n it(\"concurrent getSchemaView calls share a single hydration\", async () => {\r\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Fire multiple concurrent getSchemaView calls - they should all resolve to the same context\r\n const [ctx1, ctx2, ctx3] = await Promise.all([\r\n bc.getSchemaView(),\r\n bc.getSchemaView(),\r\n bc.getSchemaView(),\r\n ]);\r\n\r\n expect(ctx1).to.equal(ctx2);\r\n expect(ctx2).to.equal(ctx3);\r\n expect(ctx1.isOutdated).to.be.false;\r\n\r\n bc.close();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaViewLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewLifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Guid } from \"@itwin/core-bentley\";\nimport { expect } from \"chai\";\nimport { ChannelControl } from \"../../ChannelControl\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { HubWrappers } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { TestUtils } from \"../TestUtils\";\n\n/** Simple test schema that will be imported to test cache lifecycle. */\nconst testSchemaV1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n/** Updated schema with an additional property. */\nconst testSchemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropB\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`;\n\ndescribe(\"SchemaView lifecycle\", () => {\n let iModelId: string;\n\n before(async () => {\n HubMock.startup(\"SchemaViewLifecycle\", KnownTestLocations.outputDir);\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n after(async () => {\n HubMock.shutdown();\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n beforeEach(async () => {\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);\n });\n\n afterEach(async () => {\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n });\n\n it(\"getSchemaView reflects imported schema after importSchemaStrings\", async () => {\n // Open a briefcase, get initial context\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx1 = await bc.getSchemaView();\n expect(ctx1.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n expect(ctx1.isOutdated).to.be.false;\n\n // Import v1 schema - adds TestElement with PropA\n // importSchemaStrings calls clearCaches which immediately invalidates _schemasPromise.\n await bc.importSchemaStrings([testSchemaV1]);\n\n // importSchemaStrings calls clearCaches which immediately invalidates the cached view\n const ctx2 = await bc.getSchemaView();\n expect(ctx1.isOutdated).to.be.true;\n expect(ctx2.isOutdated).to.be.false;\n\n const testClass1 = ctx2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass1).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropB\")).to.be.undefined;\n\n // Import v2 schema - adds PropB\n await bc.importSchemaStrings([testSchemaV2]);\n\n // cache is again invalidated automatically\n const ctx3 = await bc.getSchemaView();\n expect(ctx2.isOutdated).to.be.true;\n expect(ctx3.isOutdated).to.be.false;\n\n const testClass2 = ctx3.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass2).to.not.be.undefined;\n expect(testClass2!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc.close();\n });\n\n it(\"getSchemas on second briefcase reflects schema pushed from first\", async () => {\n // bc1 imports a schema and pushes\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1 schema\" });\n\n // bc2 pulls and should see the new schema\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx = await bc2.getSchemaView();\n const testClass = ctx.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n expect(testClass!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"pullChanges invalidates cached SchemaView\", async () => {\n // bc1 will push schema changes; bc2 will pull them\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // bc2 gets initial context (no test schema)\n const ctxBefore = await bc2.getSchemaView();\n expect(ctxBefore.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n\n // bc1: import v1 + push\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1\" });\n\n // bc2: pull changes\n await bc2.pullChanges();\n\n // After pulling a schema changeset, clearCaches is called which immediately nulls _schemasPromise.\n const ctxAfterPull = await bc2.getSchemaView();\n expect(ctxBefore.isOutdated).to.be.true;\n const testClass = ctxAfterPull.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n\n // bc1: import v2 + push\n await bc1.importSchemaStrings([testSchemaV2]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v2\" });\n\n // bc2: pull again\n await bc2.pullChanges();\n const ctxAfterPull2 = await bc2.getSchemaView();\n expect(ctxAfterPull.isOutdated).to.be.true;\n const updated = ctxAfterPull2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(updated).to.not.be.undefined;\n expect(updated!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"concurrent getSchemaView calls share a single hydration\", async () => {\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Fire multiple concurrent getSchemaView calls - they should all resolve to the same context\n const [ctx1, ctx2, ctx3] = await Promise.all([\n bc.getSchemaView(),\n bc.getSchemaView(),\n bc.getSchemaView(),\n ]);\n\n expect(ctx1).to.equal(ctx2);\n expect(ctx2).to.equal(ctx3);\n expect(ctx1.isOutdated).to.be.false;\n\n bc.close();\n });\n});\n"]}
|
|
@@ -313,11 +313,11 @@ describe("SchemaView cross-validation", () => {
|
|
|
313
313
|
// Build a set of property IDs that have CoreCustomAttributes:HiddenProperty CA
|
|
314
314
|
// (without Show=True override), mirroring the C++ writer's CollectHiddenPropertyIds.
|
|
315
315
|
const hiddenPropertyIds = new Set();
|
|
316
|
-
iModel.withSqliteStatement(`SELECT ca.ContainerId, ca.Instance
|
|
317
|
-
FROM ec_CustomAttribute ca
|
|
318
|
-
JOIN ec_Class cac ON ca.ClassId=cac.Id
|
|
319
|
-
JOIN ec_Schema cas ON cac.SchemaId=cas.Id
|
|
320
|
-
WHERE ca.ContainerType & 992 <> 0
|
|
316
|
+
iModel.withSqliteStatement(`SELECT ca.ContainerId, ca.Instance
|
|
317
|
+
FROM ec_CustomAttribute ca
|
|
318
|
+
JOIN ec_Class cac ON ca.ClassId=cac.Id
|
|
319
|
+
JOIN ec_Schema cas ON cac.SchemaId=cas.Id
|
|
320
|
+
WHERE ca.ContainerType & 992 <> 0
|
|
321
321
|
AND cas.Name='CoreCustomAttributes' AND cac.Name='HiddenProperty'`, (stmt) => {
|
|
322
322
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
323
323
|
const instance = stmt.getValueString(1) ?? "";
|
|
@@ -332,9 +332,9 @@ describe("SchemaView cross-validation", () => {
|
|
|
332
332
|
// Build a map of property ID -> (schemaName, className, propertyName) from ec_ tables
|
|
333
333
|
// so we can correlate ec_ property IDs to SchemaView properties.
|
|
334
334
|
const propIdMap = new Map();
|
|
335
|
-
iModel.withSqliteStatement(`SELECT p.Id, s.Name, c.Name, p.Name
|
|
336
|
-
FROM ec_Property p
|
|
337
|
-
JOIN ec_Class c ON p.ClassId=c.Id
|
|
335
|
+
iModel.withSqliteStatement(`SELECT p.Id, s.Name, c.Name, p.Name
|
|
336
|
+
FROM ec_Property p
|
|
337
|
+
JOIN ec_Class c ON p.ClassId=c.Id
|
|
338
338
|
JOIN ec_Schema s ON c.SchemaId=s.Id`, (stmt) => {
|
|
339
339
|
while (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
340
340
|
propIdMap.set(stmt.getValueInteger(0), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaViewValidation.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewValidation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { IModelHost, SnapshotDb } from \"../../core-backend\";\r\nimport { ClassModifier, ClassType, ECClass, ECClassModifier, Enumeration, KindOfQuantity, Mixin, NavigationProperty, PrimitiveProperty, Property, PropertyCategory, RelationshipClass, SchemaItemType, type SchemaView, StructProperty } from \"@itwin/ecschema-metadata\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\n/** Schemas excluded from the SchemaView binary blob by the C++ writer.\r\n * Must stay in sync with `IsExcludedSchema()` in `SchemaViewWriter.cpp`.\r\n */\r\nconst excludedSchemaViewSchemas: ReadonlySet<string> = new Set([\r\n \"BisCustomAttributes\",\r\n \"CoreCustomAttributes\",\r\n \"ECDbFileInfo\",\r\n \"ECDbMap\",\r\n \"ECDbSchemaPolicies\",\r\n \"ECDbSystem\",\r\n \"ECv3ConversionAttributes\",\r\n \"EditorCustomAttributes\",\r\n \"Formats\",\r\n \"SchemaLocalizationCustomAttributes\",\r\n \"SchemaUpgradeCustomAttributes\",\r\n \"Units\",\r\n]);\r\n\r\n/**\r\n * Cross-validation test: walks ecschema-metadata and SchemaView in parallel,\r\n * asserting that every schema, class, property, enumeration, KoQ, and category returns\r\n * identical information from both layers.\r\n *\r\n * This test is iModel-agnostic - it works for any test bim. No hard-coded expected values.\r\n * To validate against a larger real iModel, just add its path to the `iModelPaths` array.\r\n */\r\ndescribe(\"SchemaView cross-validation\", () => {\r\n before(async () => {\r\n if (!IModelHost.isValid)\r\n await TestUtils.startBackend();\r\n });\r\n\r\n /** All test iModels to validate. Add paths here to test against larger/real iModels. */\r\n const iModelPaths = [\r\n path.join(KnownTestLocations.assetsDir, \"test.bim\"),\r\n // To temporarily test with a larger iModel:\r\n // \"/path/to/real/imodel.bim\",\r\n ];\r\n\r\n for (const iModelPath of iModelPaths) {\r\n const iModelName = path.basename(iModelPath);\r\n\r\n describe(iModelName, () => {\r\n let iModel: SnapshotDb;\r\n let schemaView: SchemaView;\r\n\r\n before(async () => {\r\n iModel = SnapshotDb.openFile(iModelPath);\r\n schemaView = await iModel.getSchemaView();\r\n });\r\n\r\n after(() => {\r\n iModel.close();\r\n });\r\n\r\n it(\"should have matching schema count and names\", () => {\r\n // Force all schemas to load via the schemaContext by looking up a class from each SchemaView schema.\r\n // ecschema-metadata loads schemas lazily - getKnownSchemas() only returns already-loaded ones.\r\n for (const rSchema of schemaView.getSchemas()) {\r\n // Looking up any item from this schema forces it to load in ecschema-metadata\r\n const firstClass = rSchema.getClasses().next();\r\n if (!firstClass.done) {\r\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, firstClass.value.name);\r\n assert.isDefined(metaClass, `Schema '${rSchema.name}' could not be loaded in ecschema-metadata`);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching classes for every schema\", () => {\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\r\n assert.isDefined(metaClass, `Class '${rClass.fullName}' not found in ecschema-metadata`);\r\n\r\n // Name and fullName\r\n expect(rClass.name).to.equal(metaClass!.name, `name mismatch for ${rClass.fullName}`);\r\n\r\n // Type\r\n const expectedType = schemaItemTypeToClassType(metaClass!.schemaItemType, metaClass!);\r\n expect(rClass.type).to.equal(expectedType, `type mismatch for ${rClass.fullName}: schemaView=${ClassType[rClass.type]}, expected=${ClassType[expectedType]}`);\r\n\r\n // Modifier\r\n const expectedModifier = ecModifierToClassModifier(metaClass!.modifier);\r\n expect(rClass.modifier).to.equal(expectedModifier, `modifier mismatch for ${rClass.fullName}`);\r\n\r\n // Label (ecschema-metadata returns undefined when no label, SchemaView returns the name)\r\n if (metaClass!.label !== undefined) {\r\n expect(rClass.label).to.equal(metaClass!.label, `label mismatch for ${rClass.fullName}`);\r\n }\r\n\r\n // Base class\r\n const metaBase = metaClass!.getBaseClassSync();\r\n if (metaBase !== undefined) {\r\n assert.isDefined(rClass.baseClass, `${rClass.fullName} should have a base class`);\r\n expect(rClass.baseClass!.name).to.equal(metaBase.name, `base class name mismatch for ${rClass.fullName}`);\r\n }\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching properties for every class\", () => {\r\n let totalChecked = 0;\r\n\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\r\n if (metaClass === undefined)\r\n continue;\r\n\r\n // Compare own properties (exclude inherited to avoid ordering issues across layers)\r\n const rOwnProps = rClass.getOwnProperties();\r\n const metaOwnProps = [...metaClass.getPropertiesSync(true)]; // excludeInherited=true\r\n\r\n expect(rOwnProps.length).to.equal(metaOwnProps.length,\r\n `own property count mismatch for ${rClass.fullName}: schemaView=${rOwnProps.length}, meta=${metaOwnProps.length}`);\r\n\r\n for (const rProp of rOwnProps) {\r\n const metaProp = metaOwnProps.find((p) => p.name.toLowerCase() === rProp.name.toLowerCase());\r\n assert.isDefined(metaProp, `Property '${rProp.name}' on ${rClass.fullName} not found in ecschema-metadata`);\r\n\r\n compareProperty(rProp, metaProp!, rClass);\r\n totalChecked++;\r\n }\r\n }\r\n }\r\n\r\n // Sanity: we actually compared something\r\n assert.isAbove(totalChecked, 0, \"No properties were compared - something is wrong with the test setup\");\r\n });\r\n\r\n it(\"should have matching inherited properties for every class\", () => {\r\n let classesChecked = 0;\r\n\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\r\n if (metaClass === undefined)\r\n continue;\r\n\r\n // Compare all properties (including inherited)\r\n const rAllProps = rClass.getProperties();\r\n const metaAllProps = [...metaClass.getPropertiesSync(false)]; // includeInherited\r\n\r\n // Check that every ecschema-metadata property exists in the SchemaView\r\n for (const metaProp of metaAllProps) {\r\n const rProp = rAllProps.find((p) => p.name.toLowerCase() === metaProp.name.toLowerCase());\r\n assert.isDefined(rProp, `Inherited property '${metaProp.name}' on ${rClass.fullName} missing from SchemaView`);\r\n }\r\n\r\n // Check that every SchemaView property exists in ecschema-metadata\r\n for (const rProp of rAllProps) {\r\n const metaProp = metaAllProps.find((p) => p.name.toLowerCase() === rProp.name.toLowerCase());\r\n assert.isDefined(metaProp, `SchemaView property '${rProp.name}' on ${rClass.fullName} has no ecschema-metadata counterpart`);\r\n }\r\n\r\n expect(rAllProps.length).to.equal(metaAllProps.length,\r\n `total property count mismatch for ${rClass.fullName}`);\r\n\r\n classesChecked++;\r\n }\r\n }\r\n\r\n assert.isAbove(classesChecked, 0);\r\n });\r\n\r\n it(\"should have correct ecInstanceId values\", () => {\r\n // Validate that ecInstanceId on SchemaView objects matches ec_ table row IDs.\r\n // This is the bridge that lets consumers fall back to ECDbMeta ECSQL queries.\r\n\r\n // Schemas\r\n const ecSchemaIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\"SELECT Id, Name FROM ec_Schema\", (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecSchemaIds.set(stmt.getValueString(1).toLowerCase(), stmt.getValueInteger(0));\r\n });\r\n for (const rSchema of schemaView.getSchemas()) {\r\n const ecId = ecSchemaIds.get(rSchema.name.toLowerCase());\r\n assert.isDefined(ecId, `ec_Schema row not found for ${rSchema.name}`);\r\n expect(rSchema.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for schema ${rSchema.name}`);\r\n }\r\n\r\n // Classes\r\n const ecClassIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\r\n \"SELECT c.Id, s.Name, c.Name FROM ec_Class c JOIN ec_Schema s ON c.SchemaId=s.Id\",\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecClassIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\r\n },\r\n );\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n const key = `${rSchema.name.toLowerCase()}:${rClass.name.toLowerCase()}`;\r\n const ecId = ecClassIds.get(key);\r\n assert.isDefined(ecId, `ec_Class row not found for ${rClass.fullName}`);\r\n expect(rClass.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for class ${rClass.fullName}`);\r\n }\r\n }\r\n\r\n // Own properties\r\n const ecPropIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\r\n \"SELECT p.Id, s.Name, c.Name, p.Name FROM ec_Property p JOIN ec_Class c ON p.ClassId=c.Id JOIN ec_Schema s ON c.SchemaId=s.Id\",\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecPropIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}.${stmt.getValueString(3).toLowerCase()}`, stmt.getValueInteger(0));\r\n },\r\n );\r\n let propsChecked = 0;\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n for (const rProp of rClass.getOwnProperties()) {\r\n const key = `${rSchema.name.toLowerCase()}:${rClass.name.toLowerCase()}.${rProp.name.toLowerCase()}`;\r\n const ecId = ecPropIds.get(key);\r\n if (ecId === undefined) continue; // dropped properties (broken refs)\r\n expect(rProp.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for property ${rClass.fullName}.${rProp.name}`);\r\n propsChecked++;\r\n }\r\n }\r\n }\r\n assert.isAbove(propsChecked, 0, \"No property ecInstanceIds were checked\");\r\n\r\n // Enumerations\r\n const ecEnumIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\r\n \"SELECT e.Id, s.Name, e.Name FROM ec_Enumeration e JOIN ec_Schema s ON e.SchemaId=s.Id\",\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecEnumIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\r\n },\r\n );\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rEnum of rSchema.getEnumerations()) {\r\n const key = `${rSchema.name.toLowerCase()}:${rEnum.name.toLowerCase()}`;\r\n const ecId = ecEnumIds.get(key);\r\n assert.isDefined(ecId, `ec_Enumeration row not found for ${rEnum.fullName}`);\r\n expect(rEnum.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for enum ${rEnum.fullName}`);\r\n }\r\n }\r\n\r\n // KindOfQuantity\r\n const ecKoqIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\r\n \"SELECT k.Id, s.Name, k.Name FROM ec_KindOfQuantity k JOIN ec_Schema s ON k.SchemaId=s.Id\",\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecKoqIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\r\n },\r\n );\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rKoq of rSchema.getKindOfQuantities()) {\r\n const key = `${rSchema.name.toLowerCase()}:${rKoq.name.toLowerCase()}`;\r\n const ecId = ecKoqIds.get(key);\r\n assert.isDefined(ecId, `ec_KindOfQuantity row not found for ${rKoq.fullName}`);\r\n expect(rKoq.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for KoQ ${rKoq.fullName}`);\r\n }\r\n }\r\n\r\n // PropertyCategory\r\n const ecCatIds = new Map<string, number>();\r\n iModel.withSqliteStatement(\r\n \"SELECT pc.Id, s.Name, pc.Name FROM ec_PropertyCategory pc JOIN ec_Schema s ON pc.SchemaId=s.Id\",\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n ecCatIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\r\n },\r\n );\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rCat of rSchema.getPropertyCategories()) {\r\n const key = `${rSchema.name.toLowerCase()}:${rCat.name.toLowerCase()}`;\r\n const ecId = ecCatIds.get(key);\r\n assert.isDefined(ecId, `ec_PropertyCategory row not found for ${rCat.fullName}`);\r\n expect(rCat.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for category ${rCat.fullName}`);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching enumerations\", () => {\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rEnum of rSchema.getEnumerations()) {\r\n const metaEnum = iModel.schemaContext.getSchemaItemSync(rSchema.name, rEnum.name) as Enumeration | undefined;\r\n assert.isDefined(metaEnum, `Enumeration '${rEnum.fullName}' not found in ecschema-metadata`);\r\n\r\n expect(rEnum.isStrict).to.equal(metaEnum!.isStrict, `isStrict mismatch for ${rEnum.fullName}`);\r\n\r\n // Compare enumerators\r\n const rEnumerators = [...rEnum.getEnumerators()];\r\n const metaEnumerators = metaEnum!.enumerators;\r\n expect(rEnumerators.length).to.equal(metaEnumerators.length,\r\n `enumerator count mismatch for ${rEnum.fullName}`);\r\n\r\n for (let i = 0; i < rEnumerators.length; i++) {\r\n expect(rEnumerators[i].name).to.equal(metaEnumerators[i].name,\r\n `enumerator name mismatch at index ${i} in ${rEnum.fullName}`);\r\n expect(rEnumerators[i].value).to.equal(metaEnumerators[i].value,\r\n `enumerator value mismatch for ${rEnumerators[i].name} in ${rEnum.fullName}`);\r\n }\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching KindOfQuantity items\", () => {\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rKoq of rSchema.getKindOfQuantities()) {\r\n const metaKoq = iModel.schemaContext.getSchemaItemSync(rSchema.name, rKoq.name) as KindOfQuantity | undefined;\r\n assert.isDefined(metaKoq, `KoQ '${rKoq.fullName}' not found in ecschema-metadata`);\r\n\r\n expect(rKoq.relativeError).to.equal(metaKoq!.relativeError,\r\n `relativeError mismatch for ${rKoq.fullName}`);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching PropertyCategory items\", () => {\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rCat of rSchema.getPropertyCategories()) {\r\n const metaCat = iModel.schemaContext.getSchemaItemSync(rSchema.name, rCat.name) as PropertyCategory | undefined;\r\n assert.isDefined(metaCat, `PropertyCategory '${rCat.fullName}' not found in ecschema-metadata`);\r\n\r\n expect(rCat.priority).to.equal(metaCat!.priority,\r\n `priority mismatch for ${rCat.fullName}`);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching relationship constraints\", () => {\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n if (!rClass.isRelationship())\r\n continue;\r\n\r\n const metaRel = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as RelationshipClass | undefined;\r\n assert.isDefined(metaRel, `Relationship '${rClass.fullName}' not in ecschema-metadata`);\r\n\r\n // Source constraint\r\n if (rClass.source !== undefined) {\r\n const metaSrc = metaRel!.source;\r\n if (metaSrc.abstractConstraint !== undefined && rClass.source.abstractConstraint !== undefined) {\r\n expect(rClass.source.abstractConstraint.name).to.equal(\r\n metaSrc.abstractConstraint.fullName.split(\".\").pop(),\r\n `source abstractConstraint mismatch for ${rClass.fullName}`,\r\n );\r\n }\r\n }\r\n\r\n // Target constraint\r\n if (rClass.target !== undefined) {\r\n const metaTgt = metaRel!.target;\r\n if (metaTgt.abstractConstraint !== undefined && rClass.target.abstractConstraint !== undefined) {\r\n expect(rClass.target.abstractConstraint.name).to.equal(\r\n metaTgt.abstractConstraint.fullName.split(\".\").pop(),\r\n `target abstractConstraint mismatch for ${rClass.fullName}`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n it(\"should have matching IS-A relationships\", () => {\r\n // Pick a few well-known hierarchies and verify IS-A checks match\r\n const testPairs: Array<[string, string, boolean]> = [\r\n [\"BisCore:GeometricElement3d\", \"BisCore:Element\", true],\r\n [\"BisCore:Element\", \"BisCore:GeometricElement3d\", false],\r\n [\"BisCore:PhysicalElement\", \"BisCore:GeometricElement\", true],\r\n [\"BisCore:ModelContainsElements\", \"BisCore:ElementRefersToElements\", false],\r\n ];\r\n\r\n for (const [className, baseName, expected] of testPairs) {\r\n const rClass = schemaView.findClass(className);\r\n if (rClass === undefined)\r\n continue; // Class may not exist in minimal test iModels\r\n\r\n const result = rClass.is(baseName);\r\n expect(result).to.equal(expected, `IS-A check: ${className} -> ${baseName}`);\r\n }\r\n });\r\n\r\n it(\"should have matching isHidden flags against ec_CustomAttribute\", () => {\r\n // Build a set of property IDs that have CoreCustomAttributes:HiddenProperty CA\r\n // (without Show=True override), mirroring the C++ writer's CollectHiddenPropertyIds.\r\n const hiddenPropertyIds = new Set<number>();\r\n iModel.withSqliteStatement(\r\n `SELECT ca.ContainerId, ca.Instance\r\n FROM ec_CustomAttribute ca\r\n JOIN ec_Class cac ON ca.ClassId=cac.Id\r\n JOIN ec_Schema cas ON cac.SchemaId=cas.Id\r\n WHERE ca.ContainerType & 992 <> 0\r\n AND cas.Name='CoreCustomAttributes' AND cac.Name='HiddenProperty'`,\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const instance: string = stmt.getValueString(1) ?? \"\";\r\n if (instance) {\r\n const lower = instance.toLowerCase();\r\n if (lower.includes(\">true</\"))\r\n continue; // Show=True means NOT hidden\r\n }\r\n hiddenPropertyIds.add(stmt.getValueInteger(0));\r\n }\r\n },\r\n );\r\n\r\n // Build a map of property ID -> (schemaName, className, propertyName) from ec_ tables\r\n // so we can correlate ec_ property IDs to SchemaView properties.\r\n const propIdMap = new Map<number, { schema: string; cls: string; prop: string }>();\r\n iModel.withSqliteStatement(\r\n `SELECT p.Id, s.Name, c.Name, p.Name\r\n FROM ec_Property p\r\n JOIN ec_Class c ON p.ClassId=c.Id\r\n JOIN ec_Schema s ON c.SchemaId=s.Id`,\r\n (stmt) => {\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n propIdMap.set(stmt.getValueInteger(0), {\r\n schema: stmt.getValueString(1),\r\n cls: stmt.getValueString(2),\r\n prop: stmt.getValueString(3),\r\n });\r\n }\r\n },\r\n );\r\n\r\n // Cross-validate: for every hidden property in ec_ tables that belongs to a\r\n // non-excluded schema, the SchemaView must also mark it as hidden.\r\n let hiddenChecked = 0;\r\n for (const propId of hiddenPropertyIds) {\r\n const info = propIdMap.get(propId);\r\n if (info === undefined) continue;\r\n if (excludedSchemaViewSchemas.has(info.schema)) continue;\r\n\r\n const rClass = schemaView.findClass(`${info.schema}:${info.cls}`);\r\n if (rClass === undefined) continue;\r\n\r\n // Check own properties only (the property lives on this class)\r\n const rProp = rClass.getOwnProperties().find(\r\n (p) => p.name.toLowerCase() === info.prop.toLowerCase(),\r\n );\r\n if (rProp === undefined) continue; // property may have been dropped (broken struct ref)\r\n\r\n expect(rProp.isHidden).to.equal(true,\r\n `${info.schema}:${info.cls}.${info.prop} should be hidden (has HiddenProperty CA)`);\r\n hiddenChecked++;\r\n }\r\n\r\n // Also spot-check that explicitly visible properties are NOT hidden.\r\n // Walk a subset of SchemaView classes and verify that properties not in the hidden set\r\n // are marked as not hidden.\r\n let visibleChecked = 0;\r\n for (const rSchema of schemaView.getSchemas()) {\r\n for (const rClass of rSchema.getClasses()) {\r\n for (const rProp of rClass.getOwnProperties()) {\r\n // Find the ec_ property ID for this prop\r\n const matchingEntry = [...propIdMap.entries()].find(([_, info]) =>\r\n info.schema.toLowerCase() === rSchema.name.toLowerCase()\r\n && info.cls.toLowerCase() === rClass.name.toLowerCase()\r\n && info.prop.toLowerCase() === rProp.name.toLowerCase(),\r\n );\r\n if (matchingEntry === undefined) continue;\r\n const [propId] = matchingEntry;\r\n\r\n if (!hiddenPropertyIds.has(propId)) {\r\n expect(rProp.isHidden).to.equal(false,\r\n `${rClass.fullName}.${rProp.name} should NOT be hidden (no HiddenProperty CA)`);\r\n visibleChecked++;\r\n }\r\n }\r\n if (visibleChecked >= 200) break; // cap to keep test fast\r\n }\r\n if (visibleChecked >= 200) break;\r\n }\r\n\r\n // The test.bim likely has at least some non-hidden properties\r\n assert.isAbove(visibleChecked, 0, \"No visible properties checked - test setup issue\");\r\n assert.isAbove(hiddenChecked, 0, \"No hidden properties checked - test setup issue\");\r\n });\r\n });\r\n }\r\n});\r\n\r\n// --- Helper functions ---\r\n\r\n/** Map ecschema-metadata SchemaItemType to SchemaView ClassType. */\r\nfunction schemaItemTypeToClassType(itemType: SchemaItemType, ecClass: ECClass): ClassType {\r\n switch (itemType) {\r\n case SchemaItemType.EntityClass:\r\n // ecschema-metadata distinguishes Mixin via instanceof, not SchemaItemType\r\n return (ecClass instanceof Mixin) ? ClassType.Mixin : ClassType.Entity;\r\n case SchemaItemType.Mixin:\r\n return ClassType.Mixin;\r\n case SchemaItemType.RelationshipClass:\r\n return ClassType.Relationship;\r\n case SchemaItemType.StructClass:\r\n return ClassType.Struct;\r\n case SchemaItemType.CustomAttributeClass:\r\n return ClassType.CustomAttribute;\r\n default:\r\n assert.fail(`Unexpected SchemaItemType '${itemType}' for class '${ecClass.fullName}'`);\r\n }\r\n}\r\n\r\n/** Map ecschema-metadata ECClassModifier to SchemaView ClassModifier. */\r\nfunction ecModifierToClassModifier(modifier: ECClassModifier): ClassModifier {\r\n switch (modifier) {\r\n case ECClassModifier.None: return ClassModifier.None;\r\n case ECClassModifier.Abstract: return ClassModifier.Abstract;\r\n case ECClassModifier.Sealed: return ClassModifier.Sealed;\r\n default: return ClassModifier.None;\r\n }\r\n}\r\n\r\n/** Compare a single property across both layers. */\r\nfunction compareProperty(rProp: ReturnType<SchemaView.Class[\"getProperties\"]>[number], metaProp: Property, rClass: SchemaView.Class): void {\r\n const ctx = `${rClass.fullName}.${rProp.name}`;\r\n\r\n // Name\r\n expect(rProp.name.toLowerCase()).to.equal(metaProp.name.toLowerCase(), `name mismatch for ${ctx}`);\r\n\r\n // Kind discriminators (methods, not getters - they are real type predicates)\r\n expect(rProp.isPrimitive()).to.equal(metaProp.isPrimitive(), `isPrimitive mismatch for ${ctx}`);\r\n expect(rProp.isNavigation()).to.equal(metaProp.isNavigation(), `isNavigation mismatch for ${ctx}`);\r\n expect(rProp.isArray()).to.equal(metaProp.isArray(), `isArray mismatch for ${ctx}`);\r\n\r\n // For primitives and enums: check primitiveType and extendedTypeName\r\n if (rProp.isPrimitive()) {\r\n // Cast to PrimitiveProperty for field access - ecschema-metadata's type hierarchy\r\n // doesn't model enum-as-primitive correctly (see itwinjs-core#8448), but the fields exist at runtime.\r\n const metaPrimProp = metaProp as unknown as PrimitiveProperty;\r\n if (metaPrimProp.primitiveType !== undefined) {\r\n // SchemaViewPrimitiveType values match PrimitiveType values\r\n expect(rProp.primitiveType).to.equal(metaPrimProp.primitiveType,\r\n `primitiveType mismatch for ${ctx}: schemaView=0x${rProp.primitiveType.toString(16)}, meta=0x${metaPrimProp.primitiveType.toString(16)}`);\r\n }\r\n if (metaPrimProp.extendedTypeName !== undefined) {\r\n expect(rProp.extendedTypeName?.toLowerCase()).to.equal(metaPrimProp.extendedTypeName.toLowerCase(),\r\n `extendedTypeName mismatch for ${ctx}`);\r\n }\r\n\r\n // KindOfQuantity reference (only on primitive properties)\r\n const metaKoq = metaProp.getKindOfQuantitySync();\r\n if (metaKoq !== undefined && rProp.kindOfQuantity !== undefined) {\r\n expect(rProp.kindOfQuantity.name).to.equal(metaKoq.name, `KoQ mismatch for ${ctx}`);\r\n }\r\n }\r\n\r\n // isReadOnly\r\n expect(rProp.isReadOnly).to.equal(metaProp.isReadOnly, `isReadOnly mismatch for ${ctx}`);\r\n\r\n // Struct class reference - structClass is non-nullable on struct subclasses\r\n if (rProp.isStruct()) {\r\n const metaStruct = metaProp as StructProperty;\r\n expect(rProp.structClass.name).to.equal(metaStruct.structClass.name, `structClass mismatch for ${ctx}`);\r\n }\r\n\r\n // Navigation property: direction and relationship class\r\n if (rProp.isNavigation()) {\r\n const metaNav = metaProp as NavigationProperty;\r\n expect(rProp.direction).to.equal(metaNav.direction, `direction mismatch for ${ctx}`);\r\n\r\n const metaRelClass = metaNav.getRelationshipClassSync();\r\n if (metaRelClass !== undefined) {\r\n expect(rProp.relationshipClass.name).to.equal(metaRelClass.name,\r\n `nav relationshipClass mismatch for ${ctx}`);\r\n }\r\n }\r\n\r\n // Category reference (available on all property kinds)\r\n const metaCat = metaProp.getCategorySync();\r\n if (metaCat !== undefined && rProp.category !== undefined) {\r\n expect(rProp.category.name).to.equal(metaCat.name, `category mismatch for ${ctx}`);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaViewValidation.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewValidation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { IModelHost, SnapshotDb } from \"../../core-backend\";\nimport { ClassModifier, ClassType, ECClass, ECClassModifier, Enumeration, KindOfQuantity, Mixin, NavigationProperty, PrimitiveProperty, Property, PropertyCategory, RelationshipClass, SchemaItemType, type SchemaView, StructProperty } from \"@itwin/ecschema-metadata\";\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { TestUtils } from \"../TestUtils\";\n\n/** Schemas excluded from the SchemaView binary blob by the C++ writer.\n * Must stay in sync with `IsExcludedSchema()` in `SchemaViewWriter.cpp`.\n */\nconst excludedSchemaViewSchemas: ReadonlySet<string> = new Set([\n \"BisCustomAttributes\",\n \"CoreCustomAttributes\",\n \"ECDbFileInfo\",\n \"ECDbMap\",\n \"ECDbSchemaPolicies\",\n \"ECDbSystem\",\n \"ECv3ConversionAttributes\",\n \"EditorCustomAttributes\",\n \"Formats\",\n \"SchemaLocalizationCustomAttributes\",\n \"SchemaUpgradeCustomAttributes\",\n \"Units\",\n]);\n\n/**\n * Cross-validation test: walks ecschema-metadata and SchemaView in parallel,\n * asserting that every schema, class, property, enumeration, KoQ, and category returns\n * identical information from both layers.\n *\n * This test is iModel-agnostic - it works for any test bim. No hard-coded expected values.\n * To validate against a larger real iModel, just add its path to the `iModelPaths` array.\n */\ndescribe(\"SchemaView cross-validation\", () => {\n before(async () => {\n if (!IModelHost.isValid)\n await TestUtils.startBackend();\n });\n\n /** All test iModels to validate. Add paths here to test against larger/real iModels. */\n const iModelPaths = [\n path.join(KnownTestLocations.assetsDir, \"test.bim\"),\n // To temporarily test with a larger iModel:\n // \"/path/to/real/imodel.bim\",\n ];\n\n for (const iModelPath of iModelPaths) {\n const iModelName = path.basename(iModelPath);\n\n describe(iModelName, () => {\n let iModel: SnapshotDb;\n let schemaView: SchemaView;\n\n before(async () => {\n iModel = SnapshotDb.openFile(iModelPath);\n schemaView = await iModel.getSchemaView();\n });\n\n after(() => {\n iModel.close();\n });\n\n it(\"should have matching schema count and names\", () => {\n // Force all schemas to load via the schemaContext by looking up a class from each SchemaView schema.\n // ecschema-metadata loads schemas lazily - getKnownSchemas() only returns already-loaded ones.\n for (const rSchema of schemaView.getSchemas()) {\n // Looking up any item from this schema forces it to load in ecschema-metadata\n const firstClass = rSchema.getClasses().next();\n if (!firstClass.done) {\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, firstClass.value.name);\n assert.isDefined(metaClass, `Schema '${rSchema.name}' could not be loaded in ecschema-metadata`);\n }\n }\n });\n\n it(\"should have matching classes for every schema\", () => {\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\n assert.isDefined(metaClass, `Class '${rClass.fullName}' not found in ecschema-metadata`);\n\n // Name and fullName\n expect(rClass.name).to.equal(metaClass!.name, `name mismatch for ${rClass.fullName}`);\n\n // Type\n const expectedType = schemaItemTypeToClassType(metaClass!.schemaItemType, metaClass!);\n expect(rClass.type).to.equal(expectedType, `type mismatch for ${rClass.fullName}: schemaView=${ClassType[rClass.type]}, expected=${ClassType[expectedType]}`);\n\n // Modifier\n const expectedModifier = ecModifierToClassModifier(metaClass!.modifier);\n expect(rClass.modifier).to.equal(expectedModifier, `modifier mismatch for ${rClass.fullName}`);\n\n // Label (ecschema-metadata returns undefined when no label, SchemaView returns the name)\n if (metaClass!.label !== undefined) {\n expect(rClass.label).to.equal(metaClass!.label, `label mismatch for ${rClass.fullName}`);\n }\n\n // Base class\n const metaBase = metaClass!.getBaseClassSync();\n if (metaBase !== undefined) {\n assert.isDefined(rClass.baseClass, `${rClass.fullName} should have a base class`);\n expect(rClass.baseClass!.name).to.equal(metaBase.name, `base class name mismatch for ${rClass.fullName}`);\n }\n }\n }\n });\n\n it(\"should have matching properties for every class\", () => {\n let totalChecked = 0;\n\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\n if (metaClass === undefined)\n continue;\n\n // Compare own properties (exclude inherited to avoid ordering issues across layers)\n const rOwnProps = rClass.getOwnProperties();\n const metaOwnProps = [...metaClass.getPropertiesSync(true)]; // excludeInherited=true\n\n expect(rOwnProps.length).to.equal(metaOwnProps.length,\n `own property count mismatch for ${rClass.fullName}: schemaView=${rOwnProps.length}, meta=${metaOwnProps.length}`);\n\n for (const rProp of rOwnProps) {\n const metaProp = metaOwnProps.find((p) => p.name.toLowerCase() === rProp.name.toLowerCase());\n assert.isDefined(metaProp, `Property '${rProp.name}' on ${rClass.fullName} not found in ecschema-metadata`);\n\n compareProperty(rProp, metaProp!, rClass);\n totalChecked++;\n }\n }\n }\n\n // Sanity: we actually compared something\n assert.isAbove(totalChecked, 0, \"No properties were compared - something is wrong with the test setup\");\n });\n\n it(\"should have matching inherited properties for every class\", () => {\n let classesChecked = 0;\n\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n const metaClass = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as ECClass | undefined;\n if (metaClass === undefined)\n continue;\n\n // Compare all properties (including inherited)\n const rAllProps = rClass.getProperties();\n const metaAllProps = [...metaClass.getPropertiesSync(false)]; // includeInherited\n\n // Check that every ecschema-metadata property exists in the SchemaView\n for (const metaProp of metaAllProps) {\n const rProp = rAllProps.find((p) => p.name.toLowerCase() === metaProp.name.toLowerCase());\n assert.isDefined(rProp, `Inherited property '${metaProp.name}' on ${rClass.fullName} missing from SchemaView`);\n }\n\n // Check that every SchemaView property exists in ecschema-metadata\n for (const rProp of rAllProps) {\n const metaProp = metaAllProps.find((p) => p.name.toLowerCase() === rProp.name.toLowerCase());\n assert.isDefined(metaProp, `SchemaView property '${rProp.name}' on ${rClass.fullName} has no ecschema-metadata counterpart`);\n }\n\n expect(rAllProps.length).to.equal(metaAllProps.length,\n `total property count mismatch for ${rClass.fullName}`);\n\n classesChecked++;\n }\n }\n\n assert.isAbove(classesChecked, 0);\n });\n\n it(\"should have correct ecInstanceId values\", () => {\n // Validate that ecInstanceId on SchemaView objects matches ec_ table row IDs.\n // This is the bridge that lets consumers fall back to ECDbMeta ECSQL queries.\n\n // Schemas\n const ecSchemaIds = new Map<string, number>();\n iModel.withSqliteStatement(\"SELECT Id, Name FROM ec_Schema\", (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecSchemaIds.set(stmt.getValueString(1).toLowerCase(), stmt.getValueInteger(0));\n });\n for (const rSchema of schemaView.getSchemas()) {\n const ecId = ecSchemaIds.get(rSchema.name.toLowerCase());\n assert.isDefined(ecId, `ec_Schema row not found for ${rSchema.name}`);\n expect(rSchema.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for schema ${rSchema.name}`);\n }\n\n // Classes\n const ecClassIds = new Map<string, number>();\n iModel.withSqliteStatement(\n \"SELECT c.Id, s.Name, c.Name FROM ec_Class c JOIN ec_Schema s ON c.SchemaId=s.Id\",\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecClassIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\n },\n );\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n const key = `${rSchema.name.toLowerCase()}:${rClass.name.toLowerCase()}`;\n const ecId = ecClassIds.get(key);\n assert.isDefined(ecId, `ec_Class row not found for ${rClass.fullName}`);\n expect(rClass.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for class ${rClass.fullName}`);\n }\n }\n\n // Own properties\n const ecPropIds = new Map<string, number>();\n iModel.withSqliteStatement(\n \"SELECT p.Id, s.Name, c.Name, p.Name FROM ec_Property p JOIN ec_Class c ON p.ClassId=c.Id JOIN ec_Schema s ON c.SchemaId=s.Id\",\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecPropIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}.${stmt.getValueString(3).toLowerCase()}`, stmt.getValueInteger(0));\n },\n );\n let propsChecked = 0;\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n for (const rProp of rClass.getOwnProperties()) {\n const key = `${rSchema.name.toLowerCase()}:${rClass.name.toLowerCase()}.${rProp.name.toLowerCase()}`;\n const ecId = ecPropIds.get(key);\n if (ecId === undefined) continue; // dropped properties (broken refs)\n expect(rProp.ecInstanceId).to.equal(ecId, `ecInstanceId mismatch for property ${rClass.fullName}.${rProp.name}`);\n propsChecked++;\n }\n }\n }\n assert.isAbove(propsChecked, 0, \"No property ecInstanceIds were checked\");\n\n // Enumerations\n const ecEnumIds = new Map<string, number>();\n iModel.withSqliteStatement(\n \"SELECT e.Id, s.Name, e.Name FROM ec_Enumeration e JOIN ec_Schema s ON e.SchemaId=s.Id\",\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecEnumIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\n },\n );\n for (const rSchema of schemaView.getSchemas()) {\n for (const rEnum of rSchema.getEnumerations()) {\n const key = `${rSchema.name.toLowerCase()}:${rEnum.name.toLowerCase()}`;\n const ecId = ecEnumIds.get(key);\n assert.isDefined(ecId, `ec_Enumeration row not found for ${rEnum.fullName}`);\n expect(rEnum.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for enum ${rEnum.fullName}`);\n }\n }\n\n // KindOfQuantity\n const ecKoqIds = new Map<string, number>();\n iModel.withSqliteStatement(\n \"SELECT k.Id, s.Name, k.Name FROM ec_KindOfQuantity k JOIN ec_Schema s ON k.SchemaId=s.Id\",\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecKoqIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\n },\n );\n for (const rSchema of schemaView.getSchemas()) {\n for (const rKoq of rSchema.getKindOfQuantities()) {\n const key = `${rSchema.name.toLowerCase()}:${rKoq.name.toLowerCase()}`;\n const ecId = ecKoqIds.get(key);\n assert.isDefined(ecId, `ec_KindOfQuantity row not found for ${rKoq.fullName}`);\n expect(rKoq.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for KoQ ${rKoq.fullName}`);\n }\n }\n\n // PropertyCategory\n const ecCatIds = new Map<string, number>();\n iModel.withSqliteStatement(\n \"SELECT pc.Id, s.Name, pc.Name FROM ec_PropertyCategory pc JOIN ec_Schema s ON pc.SchemaId=s.Id\",\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n ecCatIds.set(`${stmt.getValueString(1).toLowerCase()}:${stmt.getValueString(2).toLowerCase()}`, stmt.getValueInteger(0));\n },\n );\n for (const rSchema of schemaView.getSchemas()) {\n for (const rCat of rSchema.getPropertyCategories()) {\n const key = `${rSchema.name.toLowerCase()}:${rCat.name.toLowerCase()}`;\n const ecId = ecCatIds.get(key);\n assert.isDefined(ecId, `ec_PropertyCategory row not found for ${rCat.fullName}`);\n expect(rCat.ecInstanceId).to.equal(ecId!, `ecInstanceId mismatch for category ${rCat.fullName}`);\n }\n }\n });\n\n it(\"should have matching enumerations\", () => {\n for (const rSchema of schemaView.getSchemas()) {\n for (const rEnum of rSchema.getEnumerations()) {\n const metaEnum = iModel.schemaContext.getSchemaItemSync(rSchema.name, rEnum.name) as Enumeration | undefined;\n assert.isDefined(metaEnum, `Enumeration '${rEnum.fullName}' not found in ecschema-metadata`);\n\n expect(rEnum.isStrict).to.equal(metaEnum!.isStrict, `isStrict mismatch for ${rEnum.fullName}`);\n\n // Compare enumerators\n const rEnumerators = [...rEnum.getEnumerators()];\n const metaEnumerators = metaEnum!.enumerators;\n expect(rEnumerators.length).to.equal(metaEnumerators.length,\n `enumerator count mismatch for ${rEnum.fullName}`);\n\n for (let i = 0; i < rEnumerators.length; i++) {\n expect(rEnumerators[i].name).to.equal(metaEnumerators[i].name,\n `enumerator name mismatch at index ${i} in ${rEnum.fullName}`);\n expect(rEnumerators[i].value).to.equal(metaEnumerators[i].value,\n `enumerator value mismatch for ${rEnumerators[i].name} in ${rEnum.fullName}`);\n }\n }\n }\n });\n\n it(\"should have matching KindOfQuantity items\", () => {\n for (const rSchema of schemaView.getSchemas()) {\n for (const rKoq of rSchema.getKindOfQuantities()) {\n const metaKoq = iModel.schemaContext.getSchemaItemSync(rSchema.name, rKoq.name) as KindOfQuantity | undefined;\n assert.isDefined(metaKoq, `KoQ '${rKoq.fullName}' not found in ecschema-metadata`);\n\n expect(rKoq.relativeError).to.equal(metaKoq!.relativeError,\n `relativeError mismatch for ${rKoq.fullName}`);\n }\n }\n });\n\n it(\"should have matching PropertyCategory items\", () => {\n for (const rSchema of schemaView.getSchemas()) {\n for (const rCat of rSchema.getPropertyCategories()) {\n const metaCat = iModel.schemaContext.getSchemaItemSync(rSchema.name, rCat.name) as PropertyCategory | undefined;\n assert.isDefined(metaCat, `PropertyCategory '${rCat.fullName}' not found in ecschema-metadata`);\n\n expect(rCat.priority).to.equal(metaCat!.priority,\n `priority mismatch for ${rCat.fullName}`);\n }\n }\n });\n\n it(\"should have matching relationship constraints\", () => {\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n if (!rClass.isRelationship())\n continue;\n\n const metaRel = iModel.schemaContext.getSchemaItemSync(rSchema.name, rClass.name) as RelationshipClass | undefined;\n assert.isDefined(metaRel, `Relationship '${rClass.fullName}' not in ecschema-metadata`);\n\n // Source constraint\n if (rClass.source !== undefined) {\n const metaSrc = metaRel!.source;\n if (metaSrc.abstractConstraint !== undefined && rClass.source.abstractConstraint !== undefined) {\n expect(rClass.source.abstractConstraint.name).to.equal(\n metaSrc.abstractConstraint.fullName.split(\".\").pop(),\n `source abstractConstraint mismatch for ${rClass.fullName}`,\n );\n }\n }\n\n // Target constraint\n if (rClass.target !== undefined) {\n const metaTgt = metaRel!.target;\n if (metaTgt.abstractConstraint !== undefined && rClass.target.abstractConstraint !== undefined) {\n expect(rClass.target.abstractConstraint.name).to.equal(\n metaTgt.abstractConstraint.fullName.split(\".\").pop(),\n `target abstractConstraint mismatch for ${rClass.fullName}`,\n );\n }\n }\n }\n }\n });\n\n it(\"should have matching IS-A relationships\", () => {\n // Pick a few well-known hierarchies and verify IS-A checks match\n const testPairs: Array<[string, string, boolean]> = [\n [\"BisCore:GeometricElement3d\", \"BisCore:Element\", true],\n [\"BisCore:Element\", \"BisCore:GeometricElement3d\", false],\n [\"BisCore:PhysicalElement\", \"BisCore:GeometricElement\", true],\n [\"BisCore:ModelContainsElements\", \"BisCore:ElementRefersToElements\", false],\n ];\n\n for (const [className, baseName, expected] of testPairs) {\n const rClass = schemaView.findClass(className);\n if (rClass === undefined)\n continue; // Class may not exist in minimal test iModels\n\n const result = rClass.is(baseName);\n expect(result).to.equal(expected, `IS-A check: ${className} -> ${baseName}`);\n }\n });\n\n it(\"should have matching isHidden flags against ec_CustomAttribute\", () => {\n // Build a set of property IDs that have CoreCustomAttributes:HiddenProperty CA\n // (without Show=True override), mirroring the C++ writer's CollectHiddenPropertyIds.\n const hiddenPropertyIds = new Set<number>();\n iModel.withSqliteStatement(\n `SELECT ca.ContainerId, ca.Instance\n FROM ec_CustomAttribute ca\n JOIN ec_Class cac ON ca.ClassId=cac.Id\n JOIN ec_Schema cas ON cac.SchemaId=cas.Id\n WHERE ca.ContainerType & 992 <> 0\n AND cas.Name='CoreCustomAttributes' AND cac.Name='HiddenProperty'`,\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const instance: string = stmt.getValueString(1) ?? \"\";\n if (instance) {\n const lower = instance.toLowerCase();\n if (lower.includes(\">true</\"))\n continue; // Show=True means NOT hidden\n }\n hiddenPropertyIds.add(stmt.getValueInteger(0));\n }\n },\n );\n\n // Build a map of property ID -> (schemaName, className, propertyName) from ec_ tables\n // so we can correlate ec_ property IDs to SchemaView properties.\n const propIdMap = new Map<number, { schema: string; cls: string; prop: string }>();\n iModel.withSqliteStatement(\n `SELECT p.Id, s.Name, c.Name, p.Name\n FROM ec_Property p\n JOIN ec_Class c ON p.ClassId=c.Id\n JOIN ec_Schema s ON c.SchemaId=s.Id`,\n (stmt) => {\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n propIdMap.set(stmt.getValueInteger(0), {\n schema: stmt.getValueString(1),\n cls: stmt.getValueString(2),\n prop: stmt.getValueString(3),\n });\n }\n },\n );\n\n // Cross-validate: for every hidden property in ec_ tables that belongs to a\n // non-excluded schema, the SchemaView must also mark it as hidden.\n let hiddenChecked = 0;\n for (const propId of hiddenPropertyIds) {\n const info = propIdMap.get(propId);\n if (info === undefined) continue;\n if (excludedSchemaViewSchemas.has(info.schema)) continue;\n\n const rClass = schemaView.findClass(`${info.schema}:${info.cls}`);\n if (rClass === undefined) continue;\n\n // Check own properties only (the property lives on this class)\n const rProp = rClass.getOwnProperties().find(\n (p) => p.name.toLowerCase() === info.prop.toLowerCase(),\n );\n if (rProp === undefined) continue; // property may have been dropped (broken struct ref)\n\n expect(rProp.isHidden).to.equal(true,\n `${info.schema}:${info.cls}.${info.prop} should be hidden (has HiddenProperty CA)`);\n hiddenChecked++;\n }\n\n // Also spot-check that explicitly visible properties are NOT hidden.\n // Walk a subset of SchemaView classes and verify that properties not in the hidden set\n // are marked as not hidden.\n let visibleChecked = 0;\n for (const rSchema of schemaView.getSchemas()) {\n for (const rClass of rSchema.getClasses()) {\n for (const rProp of rClass.getOwnProperties()) {\n // Find the ec_ property ID for this prop\n const matchingEntry = [...propIdMap.entries()].find(([_, info]) =>\n info.schema.toLowerCase() === rSchema.name.toLowerCase()\n && info.cls.toLowerCase() === rClass.name.toLowerCase()\n && info.prop.toLowerCase() === rProp.name.toLowerCase(),\n );\n if (matchingEntry === undefined) continue;\n const [propId] = matchingEntry;\n\n if (!hiddenPropertyIds.has(propId)) {\n expect(rProp.isHidden).to.equal(false,\n `${rClass.fullName}.${rProp.name} should NOT be hidden (no HiddenProperty CA)`);\n visibleChecked++;\n }\n }\n if (visibleChecked >= 200) break; // cap to keep test fast\n }\n if (visibleChecked >= 200) break;\n }\n\n // The test.bim likely has at least some non-hidden properties\n assert.isAbove(visibleChecked, 0, \"No visible properties checked - test setup issue\");\n assert.isAbove(hiddenChecked, 0, \"No hidden properties checked - test setup issue\");\n });\n });\n }\n});\n\n// --- Helper functions ---\n\n/** Map ecschema-metadata SchemaItemType to SchemaView ClassType. */\nfunction schemaItemTypeToClassType(itemType: SchemaItemType, ecClass: ECClass): ClassType {\n switch (itemType) {\n case SchemaItemType.EntityClass:\n // ecschema-metadata distinguishes Mixin via instanceof, not SchemaItemType\n return (ecClass instanceof Mixin) ? ClassType.Mixin : ClassType.Entity;\n case SchemaItemType.Mixin:\n return ClassType.Mixin;\n case SchemaItemType.RelationshipClass:\n return ClassType.Relationship;\n case SchemaItemType.StructClass:\n return ClassType.Struct;\n case SchemaItemType.CustomAttributeClass:\n return ClassType.CustomAttribute;\n default:\n assert.fail(`Unexpected SchemaItemType '${itemType}' for class '${ecClass.fullName}'`);\n }\n}\n\n/** Map ecschema-metadata ECClassModifier to SchemaView ClassModifier. */\nfunction ecModifierToClassModifier(modifier: ECClassModifier): ClassModifier {\n switch (modifier) {\n case ECClassModifier.None: return ClassModifier.None;\n case ECClassModifier.Abstract: return ClassModifier.Abstract;\n case ECClassModifier.Sealed: return ClassModifier.Sealed;\n default: return ClassModifier.None;\n }\n}\n\n/** Compare a single property across both layers. */\nfunction compareProperty(rProp: ReturnType<SchemaView.Class[\"getProperties\"]>[number], metaProp: Property, rClass: SchemaView.Class): void {\n const ctx = `${rClass.fullName}.${rProp.name}`;\n\n // Name\n expect(rProp.name.toLowerCase()).to.equal(metaProp.name.toLowerCase(), `name mismatch for ${ctx}`);\n\n // Kind discriminators (methods, not getters - they are real type predicates)\n expect(rProp.isPrimitive()).to.equal(metaProp.isPrimitive(), `isPrimitive mismatch for ${ctx}`);\n expect(rProp.isNavigation()).to.equal(metaProp.isNavigation(), `isNavigation mismatch for ${ctx}`);\n expect(rProp.isArray()).to.equal(metaProp.isArray(), `isArray mismatch for ${ctx}`);\n\n // For primitives and enums: check primitiveType and extendedTypeName\n if (rProp.isPrimitive()) {\n // Cast to PrimitiveProperty for field access - ecschema-metadata's type hierarchy\n // doesn't model enum-as-primitive correctly (see itwinjs-core#8448), but the fields exist at runtime.\n const metaPrimProp = metaProp as unknown as PrimitiveProperty;\n if (metaPrimProp.primitiveType !== undefined) {\n // SchemaViewPrimitiveType values match PrimitiveType values\n expect(rProp.primitiveType).to.equal(metaPrimProp.primitiveType,\n `primitiveType mismatch for ${ctx}: schemaView=0x${rProp.primitiveType.toString(16)}, meta=0x${metaPrimProp.primitiveType.toString(16)}`);\n }\n if (metaPrimProp.extendedTypeName !== undefined) {\n expect(rProp.extendedTypeName?.toLowerCase()).to.equal(metaPrimProp.extendedTypeName.toLowerCase(),\n `extendedTypeName mismatch for ${ctx}`);\n }\n\n // KindOfQuantity reference (only on primitive properties)\n const metaKoq = metaProp.getKindOfQuantitySync();\n if (metaKoq !== undefined && rProp.kindOfQuantity !== undefined) {\n expect(rProp.kindOfQuantity.name).to.equal(metaKoq.name, `KoQ mismatch for ${ctx}`);\n }\n }\n\n // isReadOnly\n expect(rProp.isReadOnly).to.equal(metaProp.isReadOnly, `isReadOnly mismatch for ${ctx}`);\n\n // Struct class reference - structClass is non-nullable on struct subclasses\n if (rProp.isStruct()) {\n const metaStruct = metaProp as StructProperty;\n expect(rProp.structClass.name).to.equal(metaStruct.structClass.name, `structClass mismatch for ${ctx}`);\n }\n\n // Navigation property: direction and relationship class\n if (rProp.isNavigation()) {\n const metaNav = metaProp as NavigationProperty;\n expect(rProp.direction).to.equal(metaNav.direction, `direction mismatch for ${ctx}`);\n\n const metaRelClass = metaNav.getRelationshipClassSync();\n if (metaRelClass !== undefined) {\n expect(rProp.relationshipClass.name).to.equal(metaRelClass.name,\n `nav relationshipClass mismatch for ${ctx}`);\n }\n }\n\n // Category reference (available on all property kinds)\n const metaCat = metaProp.getCategorySync();\n if (metaCat !== undefined && rProp.category !== undefined) {\n expect(rProp.category.name).to.equal(metaCat.name, `category mismatch for ${ctx}`);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SheetIndex.test.js","sourceRoot":"","sources":["../../../../src/test/sheetindex/SheetIndex.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BisCodeSpec, CodeScopeSpec, CodeSpec, EditTxnError, SheetProps } from \"@itwin/core-common\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\n\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { DocumentPartition, Sheet } from \"../../Element\";\r\nimport { expect } from \"chai\";\r\nimport { DocumentListModel, SheetIndexModel, SheetModel } from \"../../Model\";\r\nimport { ElementOwnsChildElements, SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"../../NavigationRelationship\";\r\nimport { SheetIndex, SheetIndexFolder, SheetIndexReference, SheetReference } from \"../../SheetIndex\";\r\n\r\nconst getOrCreateDocumentList = (txn: EditTxn): Id64String => {\r\n const documentListName = \"SheetList\";\r\n const ids = txn.iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'` });\r\n if (ids.size === 1)\r\n return ids.values().next().value!;\r\n\r\n const subjectId = txn.iModel.elements.getRootSubject().id;\r\n return DocumentListModel.insert(txn, subjectId, documentListName);\r\n};\r\n\r\nconst insertSheet = (txn: EditTxn, sheetName: string): Id64String => {\r\n const modelId = getOrCreateDocumentList(txn);\r\n const sheetElementProps: SheetProps = {\r\n height: 42,\r\n width: 42,\r\n scale: 42,\r\n classFullName: Sheet.classFullName,\r\n code: Sheet.createCode(txn.iModel, modelId, sheetName),\r\n model: modelId,\r\n };\r\n const sheetElementId = txn.insertElement(sheetElementProps);\r\n return txn.insertModel({\r\n classFullName: SheetModel.classFullName,\r\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" },\r\n });\r\n};\r\n\r\nconst insertCodeSpec = (txn: EditTxn) => {\r\n const indexSpec = CodeSpec.create(txn.iModel, BisCodeSpec.sheetIndex, CodeScopeSpec.Type.Model);\r\n txn.iModel.codeSpecs.insert(txn, indexSpec);\r\n\r\n const entrySpec = CodeSpec.create(txn.iModel, BisCodeSpec.sheetIndexEntry, CodeScopeSpec.Type.ParentElement);\r\n txn.iModel.codeSpecs.insert(txn, entrySpec);\r\n};\r\n\r\ndescribe(\"SheetIndex\", () => {\r\n let iModel: SnapshotDb;\r\n\r\n beforeEach(async () => {\r\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSheetIndex.bim\");\r\n\r\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"SheetIndex\" } });\r\n await ExtensiveTestScenario.prepareDb(iModelDb);\r\n await ExtensiveTestScenario.populateDb(iModelDb);\r\n iModel = iModelDb;\r\n\r\n withEditTxn(iModel, (txn) => insertCodeSpec(txn));\r\n });\r\n\r\n afterEach(() => {\r\n iModel.close();\r\n });\r\n\r\n it(\"SheetIndexModel Should insert\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"testSheetIndex\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n });\r\n });\r\n\r\n it(\"SheetIndex Should insert\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n });\r\n });\r\n\r\n describe(\"Update\", () => {\r\n it(\"Priority\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n expect(folder?.entryPriority).equals(1);\r\n\r\n folder!.entryPriority = 0;\r\n folder!.update(txn);\r\n\r\n const folderPostUpdate = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folderPostUpdate?.entryPriority).equals(0);\r\n });\r\n });\r\n\r\n it(\"Parent\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n\r\n const parentRel11 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\r\n expect(parentRel11).to.not.be.undefined;\r\n\r\n folder!.parent = new SheetIndexOwnsEntries(sheetIndex2Id);\r\n folder!.update(txn);\r\n\r\n const parentRel12 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\r\n expect(parentRel12).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex2Id, targetId: folderId });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n });\r\n\r\n it(\"Sheet Reference\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const sheet1Id = insertSheet(txn, \"sheet-1\");\r\n const sheet2Id = insertSheet(txn, \"sheet-2\");\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const sheetRefId = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestSheetReference\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\r\n\r\n const sheetRef = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\r\n expect(sheetRef).to.not.be.undefined;\r\n expect(sheetRef!.sheet).to.be.undefined;\r\n\r\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet1Id);\r\n sheetRef!.update(txn);\r\n\r\n const refersRel11 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\r\n expect(refersRel11).to.not.be.undefined;\r\n\r\n const parentRel12 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\r\n expect(parentRel12).to.be.undefined;\r\n\r\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet2Id);\r\n sheetRef!.update(txn);\r\n\r\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\r\n expect(refersRel21).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n });\r\n\r\n it(\"Sheet Index Reference\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\r\n const sheetIndex3Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-3\");\r\n expect(Id64.isValidId64(sheetIndex3Id)).to.be.true;\r\n\r\n const sheetIndexRefId = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetReference\", priority: 1 });\r\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\r\n\r\n const sheetIndexRef = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\r\n expect(sheetIndexRef).to.not.be.undefined;\r\n expect(sheetIndexRef!.sheetIndex).to.be.undefined;\r\n\r\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex2Id);\r\n sheetIndexRef!.update(txn);\r\n\r\n const parentRel11 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(parentRel11).to.not.be.undefined;\r\n\r\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex3Id);\r\n sheetIndexRef!.update(txn);\r\n\r\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(refersRel21).to.be.undefined;\r\n\r\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex3Id });\r\n expect(parentRel22).to.not.be.undefined;\r\n });\r\n });\r\n });\r\n\r\n describe(\"SheetIndexFolder\", () => {\r\n it(\"Should insert\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\r\n expect(Id64.isValidId64(folderId)).to.be.true;\r\n\r\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\r\n expect(folder).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndexId, targetId: folderId });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexOwnsEntries.classFullName);\r\n\r\n expect(folder?.parent?.id).equals(sheetIndexId);\r\n });\r\n });\r\n\r\n it(\"Should not insert SheetIndexFolder with the same name\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const folder = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 1 });\r\n expect(Id64.isValidId64(folder)).to.be.true;\r\n\r\n const failInsert = () => SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n });\r\n\r\n it(\"Should have children\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\r\n\r\n const folder1Id = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\r\n expect(Id64.isValidId64(folder1Id)).to.be.true;\r\n\r\n const folder2Id = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: folder1Id, name: \"TestFolder-2\", priority: 1 });\r\n expect(Id64.isValidId64(folder2Id)).to.be.true;\r\n const folder2 = iModel.elements.tryGetElement<SheetIndexFolder>(folder2Id);\r\n expect(folder2).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: folder1Id, targetId: folder2Id });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexFolderOwnsEntries.classFullName);\r\n\r\n expect(folder2?.parent?.id).equals(folder1Id);\r\n });\r\n });\r\n });\r\n\r\n describe(\"SheetReferences\", () => {\r\n it(\"Should not insert SheetReferences with the same name\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRef1 = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef1)).to.be.true;\r\n\r\n const failInsert = () => SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n });\r\n\r\n it(\"Should insert SheetReferences without a Sheet\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRef = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef)).to.be.true;\r\n });\r\n });\r\n\r\n it(\"Should insert and with a Sheet\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const sheetId = insertSheet(txn, \"sheet-1\");\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetRefId = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1, sheetId });\r\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\r\n\r\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\r\n expect(ref).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheetId });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetReferenceRefersToSheet.classFullName);\r\n\r\n expect(ref?.sheet?.id).equals(sheetId);\r\n });\r\n });\r\n\r\n it(\"supports deprecated SheetReference.insert overload when implicit writes are allowed\", () => {\r\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\r\n EditTxn.implicitWriteEnforcement = \"allow\";\r\n\r\n try {\r\n withEditTxn(iModel, (txn) => {\r\n const sheetId = insertSheet(txn, \"legacy-sheet\");\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"LegacySheetRefModel\");\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"LegacySheetIndex\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const sheetRefId = SheetReference.insert({\r\n iModelDb: iModel,\r\n sheetIndexModelId: modelId,\r\n parentId: sheetIndex,\r\n name: \"LegacySheetRef\",\r\n priority: 1,\r\n sheetId,\r\n });\r\n\r\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\r\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\r\n expect(ref?.sheet?.id).to.equal(sheetId);\r\n });\r\n } finally {\r\n EditTxn.implicitWriteEnforcement = previousEnforcement;\r\n }\r\n });\r\n\r\n it(\"rejects deprecated SheetReference.insert overload when implicit writes are disallowed\", () => {\r\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\r\n EditTxn.implicitWriteEnforcement = \"throw\";\r\n\r\n try {\r\n withEditTxn(iModel, (txn) => {\r\n const sheetId = insertSheet(txn, \"legacy-throw-sheet\");\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"LegacyThrowSheetRefModel\");\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"LegacyThrowSheetIndex\");\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => SheetReference.insert({\r\n iModelDb: iModel,\r\n sheetIndexModelId: modelId,\r\n parentId: sheetIndex,\r\n name: \"LegacyThrowSheetRef\",\r\n priority: 1,\r\n sheetId,\r\n })).to.throw().that.satisfies((error: unknown) => EditTxnError.isError(error, \"implicit-txn-write-disallowed\"));\r\n });\r\n } finally {\r\n EditTxn.implicitWriteEnforcement = previousEnforcement;\r\n }\r\n });\r\n\r\n it.skip(\"Should not insert with the same Sheet twice\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const sheetId = insertSheet(txn, \"sheet-1\");\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n\r\n SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-1\", priority: 1, sheetId });\r\n\r\n const sameIndex = () => SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-2\", priority: 2, sheetId });\r\n\r\n expect(sameIndex).throws();\r\n });\r\n });\r\n });\r\n\r\n describe(\"SheetIndexReferences\", () => {\r\n it(\"Should not insert SheetIndexReferences with the same name\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\r\n\r\n const sheetIndexRef = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetIndexRef)).to.be.true;\r\n\r\n const failInsert = () => SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 0 });\r\n\r\n expect(failInsert).throws();\r\n });\r\n });\r\n\r\n it(\"Should insert SheetIndexReferences without a SheetIndexRef\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetRef = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetIndexRef\", priority: 1 });\r\n expect(Id64.isValidId64(sheetRef)).to.be.true;\r\n });\r\n });\r\n\r\n it(\"Should insert and with a SheetIndexRef\", () => {\r\n withEditTxn(iModel, (txn) => {\r\n const subjectId = iModel.elements.getRootSubject().id;\r\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\r\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\r\n\r\n const sheetIndexRefId = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetRef\", priority: 1, sheetIndexId: sheetIndex2Id });\r\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\r\n\r\n const ref = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\r\n expect(ref).to.not.be.undefined;\r\n\r\n const relationship = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\r\n expect(relationship).to.not.be.undefined;\r\n expect(relationship?.classFullName).equals(SheetIndexReferenceRefersToSheetIndex.classFullName);\r\n\r\n expect(ref?.sheetIndex?.id).equals(sheetIndex2Id);\r\n });\r\n });\r\n });\r\n});\r\n\r\n\r\n\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"SheetIndex.test.js","sourceRoot":"","sources":["../../../../src/test/sheetindex/SheetIndex.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { BisCodeSpec, CodeScopeSpec, CodeSpec, EditTxnError, SheetProps } from \"@itwin/core-common\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\n\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\nimport { DocumentPartition, Sheet } from \"../../Element\";\nimport { expect } from \"chai\";\nimport { DocumentListModel, SheetIndexModel, SheetModel } from \"../../Model\";\nimport { ElementOwnsChildElements, SheetIndexFolderOwnsEntries, SheetIndexOwnsEntries, SheetIndexReferenceRefersToSheetIndex, SheetReferenceRefersToSheet } from \"../../NavigationRelationship\";\nimport { SheetIndex, SheetIndexFolder, SheetIndexReference, SheetReference } from \"../../SheetIndex\";\n\nconst getOrCreateDocumentList = (txn: EditTxn): Id64String => {\n const documentListName = \"SheetList\";\n const ids = txn.iModel.queryEntityIds({ from: DocumentPartition.classFullName, where: `CodeValue = '${documentListName}'` });\n if (ids.size === 1)\n return ids.values().next().value!;\n\n const subjectId = txn.iModel.elements.getRootSubject().id;\n return DocumentListModel.insert(txn, subjectId, documentListName);\n};\n\nconst insertSheet = (txn: EditTxn, sheetName: string): Id64String => {\n const modelId = getOrCreateDocumentList(txn);\n const sheetElementProps: SheetProps = {\n height: 42,\n width: 42,\n scale: 42,\n classFullName: Sheet.classFullName,\n code: Sheet.createCode(txn.iModel, modelId, sheetName),\n model: modelId,\n };\n const sheetElementId = txn.insertElement(sheetElementProps);\n return txn.insertModel({\n classFullName: SheetModel.classFullName,\n modeledElement: { id: sheetElementId, relClassName: \"BisCore:ModelModelsElement\" },\n });\n};\n\nconst insertCodeSpec = (txn: EditTxn) => {\n const indexSpec = CodeSpec.create(txn.iModel, BisCodeSpec.sheetIndex, CodeScopeSpec.Type.Model);\n txn.iModel.codeSpecs.insert(txn, indexSpec);\n\n const entrySpec = CodeSpec.create(txn.iModel, BisCodeSpec.sheetIndexEntry, CodeScopeSpec.Type.ParentElement);\n txn.iModel.codeSpecs.insert(txn, entrySpec);\n};\n\ndescribe(\"SheetIndex\", () => {\n let iModel: SnapshotDb;\n\n beforeEach(async () => {\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSheetIndex.bim\");\n\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"SheetIndex\" } });\n await ExtensiveTestScenario.prepareDb(iModelDb);\n await ExtensiveTestScenario.populateDb(iModelDb);\n iModel = iModelDb;\n\n withEditTxn(iModel, (txn) => insertCodeSpec(txn));\n });\n\n afterEach(() => {\n iModel.close();\n });\n\n it(\"SheetIndexModel Should insert\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"testSheetIndex\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n });\n });\n\n it(\"SheetIndex Should insert\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n });\n });\n\n describe(\"Update\", () => {\n it(\"Priority\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n expect(folder?.entryPriority).equals(1);\n\n folder!.entryPriority = 0;\n folder!.update(txn);\n\n const folderPostUpdate = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folderPostUpdate?.entryPriority).equals(0);\n });\n });\n\n it(\"Parent\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\n\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n\n const parentRel11 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\n expect(parentRel11).to.not.be.undefined;\n\n folder!.parent = new SheetIndexOwnsEntries(sheetIndex2Id);\n folder!.update(txn);\n\n const parentRel12 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex1Id, targetId: folderId });\n expect(parentRel12).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndex2Id, targetId: folderId });\n expect(parentRel22).to.not.be.undefined;\n });\n });\n\n it(\"Sheet Reference\", () => {\n withEditTxn(iModel, (txn) => {\n const sheet1Id = insertSheet(txn, \"sheet-1\");\n const sheet2Id = insertSheet(txn, \"sheet-2\");\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const sheetRefId = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestSheetReference\", priority: 1 });\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\n\n const sheetRef = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\n expect(sheetRef).to.not.be.undefined;\n expect(sheetRef!.sheet).to.be.undefined;\n\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet1Id);\n sheetRef!.update(txn);\n\n const refersRel11 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\n expect(refersRel11).to.not.be.undefined;\n\n const parentRel12 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\n expect(parentRel12).to.be.undefined;\n\n sheetRef!.sheet = new SheetReferenceRefersToSheet(sheet2Id);\n sheetRef!.update(txn);\n\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet1Id });\n expect(refersRel21).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheet2Id });\n expect(parentRel22).to.not.be.undefined;\n });\n });\n\n it(\"Sheet Index Reference\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex2Id)).to.be.true;\n const sheetIndex3Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-3\");\n expect(Id64.isValidId64(sheetIndex3Id)).to.be.true;\n\n const sheetIndexRefId = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetReference\", priority: 1 });\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\n\n const sheetIndexRef = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\n expect(sheetIndexRef).to.not.be.undefined;\n expect(sheetIndexRef!.sheetIndex).to.be.undefined;\n\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex2Id);\n sheetIndexRef!.update(txn);\n\n const parentRel11 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(parentRel11).to.not.be.undefined;\n\n sheetIndexRef!.sheetIndex = new SheetIndexReferenceRefersToSheetIndex(sheetIndex3Id);\n sheetIndexRef!.update(txn);\n\n const refersRel21 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(refersRel21).to.be.undefined;\n\n const parentRel22 = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex3Id });\n expect(parentRel22).to.not.be.undefined;\n });\n });\n });\n\n describe(\"SheetIndexFolder\", () => {\n it(\"Should insert\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const folderId = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\n expect(Id64.isValidId64(folderId)).to.be.true;\n\n const folder = iModel.elements.tryGetElement<SheetIndexFolder>(folderId);\n expect(folder).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: sheetIndexId, targetId: folderId });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexOwnsEntries.classFullName);\n\n expect(folder?.parent?.id).equals(sheetIndexId);\n });\n });\n\n it(\"Should not insert SheetIndexFolder with the same name\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const folder = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 1 });\n expect(Id64.isValidId64(folder)).to.be.true;\n\n const failInsert = () => SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestFolder\", priority: 0 });\n\n expect(failInsert).throws();\n });\n });\n\n it(\"Should have children\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndexId = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndexId)).to.be.true;\n\n const folder1Id = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndexId, name: \"TestFolder-1\", priority: 1 });\n expect(Id64.isValidId64(folder1Id)).to.be.true;\n\n const folder2Id = SheetIndexFolder.insert(txn, { sheetIndexModelId: modelId, parentId: folder1Id, name: \"TestFolder-2\", priority: 1 });\n expect(Id64.isValidId64(folder2Id)).to.be.true;\n const folder2 = iModel.elements.tryGetElement<SheetIndexFolder>(folder2Id);\n expect(folder2).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(ElementOwnsChildElements.classFullName, { sourceId: folder1Id, targetId: folder2Id });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexFolderOwnsEntries.classFullName);\n\n expect(folder2?.parent?.id).equals(folder1Id);\n });\n });\n });\n\n describe(\"SheetReferences\", () => {\n it(\"Should not insert SheetReferences with the same name\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRef1 = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef1)).to.be.true;\n\n const failInsert = () => SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 0 });\n\n expect(failInsert).throws();\n });\n });\n\n it(\"Should insert SheetReferences without a Sheet\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRef = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef)).to.be.true;\n });\n });\n\n it(\"Should insert and with a Sheet\", () => {\n withEditTxn(iModel, (txn) => {\n const sheetId = insertSheet(txn, \"sheet-1\");\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetRefId = SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef\", priority: 1, sheetId });\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\n\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\n expect(ref).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(SheetReferenceRefersToSheet.classFullName, { sourceId: sheetRefId, targetId: sheetId });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetReferenceRefersToSheet.classFullName);\n\n expect(ref?.sheet?.id).equals(sheetId);\n });\n });\n\n it(\"supports deprecated SheetReference.insert overload when implicit writes are allowed\", () => {\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\n EditTxn.implicitWriteEnforcement = \"allow\";\n\n try {\n withEditTxn(iModel, (txn) => {\n const sheetId = insertSheet(txn, \"legacy-sheet\");\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"LegacySheetRefModel\");\n const sheetIndex = SheetIndex.insert(txn, modelId, \"LegacySheetIndex\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const sheetRefId = SheetReference.insert({\n iModelDb: iModel,\n sheetIndexModelId: modelId,\n parentId: sheetIndex,\n name: \"LegacySheetRef\",\n priority: 1,\n sheetId,\n });\n\n expect(Id64.isValidId64(sheetRefId)).to.be.true;\n const ref = iModel.elements.tryGetElement<SheetReference>(sheetRefId);\n expect(ref?.sheet?.id).to.equal(sheetId);\n });\n } finally {\n EditTxn.implicitWriteEnforcement = previousEnforcement;\n }\n });\n\n it(\"rejects deprecated SheetReference.insert overload when implicit writes are disallowed\", () => {\n const previousEnforcement = EditTxn.implicitWriteEnforcement;\n EditTxn.implicitWriteEnforcement = \"throw\";\n\n try {\n withEditTxn(iModel, (txn) => {\n const sheetId = insertSheet(txn, \"legacy-throw-sheet\");\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"LegacyThrowSheetRefModel\");\n const sheetIndex = SheetIndex.insert(txn, modelId, \"LegacyThrowSheetIndex\");\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => SheetReference.insert({\n iModelDb: iModel,\n sheetIndexModelId: modelId,\n parentId: sheetIndex,\n name: \"LegacyThrowSheetRef\",\n priority: 1,\n sheetId,\n })).to.throw().that.satisfies((error: unknown) => EditTxnError.isError(error, \"implicit-txn-write-disallowed\"));\n });\n } finally {\n EditTxn.implicitWriteEnforcement = previousEnforcement;\n }\n });\n\n it.skip(\"Should not insert with the same Sheet twice\", () => {\n withEditTxn(iModel, (txn) => {\n const sheetId = insertSheet(txn, \"sheet-1\");\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n\n SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-1\", priority: 1, sheetId });\n\n const sameIndex = () => SheetReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetRef-2\", priority: 2, sheetId });\n\n expect(sameIndex).throws();\n });\n });\n });\n\n describe(\"SheetIndexReferences\", () => {\n it(\"Should not insert SheetIndexReferences with the same name\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex)).to.be.true;\n\n const sheetIndexRef = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 1 });\n expect(Id64.isValidId64(sheetIndexRef)).to.be.true;\n\n const failInsert = () => SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex, name: \"TestSheetIndexRef\", priority: 0 });\n\n expect(failInsert).throws();\n });\n });\n\n it(\"Should insert SheetIndexReferences without a SheetIndexRef\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetRef = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetIndexRef\", priority: 1 });\n expect(Id64.isValidId64(sheetRef)).to.be.true;\n });\n });\n\n it(\"Should insert and with a SheetIndexRef\", () => {\n withEditTxn(iModel, (txn) => {\n const subjectId = iModel.elements.getRootSubject().id;\n const modelId = SheetIndexModel.insert(txn, subjectId, \"TestSheetIndexModel\");\n expect(Id64.isValidId64(modelId)).to.be.true;\n const sheetIndex1Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-1\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n const sheetIndex2Id = SheetIndex.insert(txn, modelId, \"TestSheetIndex-2\");\n expect(Id64.isValidId64(sheetIndex1Id)).to.be.true;\n\n const sheetIndexRefId = SheetIndexReference.insert(txn, { sheetIndexModelId: modelId, parentId: sheetIndex1Id, name: \"TestSheetRef\", priority: 1, sheetIndexId: sheetIndex2Id });\n expect(Id64.isValidId64(sheetIndexRefId)).to.be.true;\n\n const ref = iModel.elements.tryGetElement<SheetIndexReference>(sheetIndexRefId);\n expect(ref).to.not.be.undefined;\n\n const relationship = iModel.relationships.tryGetInstanceProps(SheetIndexReferenceRefersToSheetIndex.classFullName, { sourceId: sheetIndexRefId, targetId: sheetIndex2Id });\n expect(relationship).to.not.be.undefined;\n expect(relationship?.classFullName).equals(SheetIndexReferenceRefersToSheetIndex.classFullName);\n\n expect(ref?.sheetIndex?.id).equals(sheetIndex2Id);\n });\n });\n });\n});\n\n\n\n\n"]}
|