@itwin/core-backend 5.13.0-dev.9 → 5.14.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +5 -0
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +13 -3
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +3 -3
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts.map +1 -1
- package/lib/cjs/EditTxn.js +1 -0
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +48 -12
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +120 -24
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +30 -15
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +51 -15
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/Model.d.ts +5 -5
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/PropertyStore.js +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/SchemaSync.d.ts +37 -9
- package/lib/cjs/SchemaSync.d.ts.map +1 -1
- package/lib/cjs/SchemaSync.js +125 -6
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SynchronousChannel.d.ts +62 -0
- package/lib/cjs/SynchronousChannel.d.ts.map +1 -0
- package/lib/cjs/SynchronousChannel.js +11 -0
- package/lib/cjs/SynchronousChannel.js.map +1 -0
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +44 -4
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +72 -14
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +6 -6
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +22 -7
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +104 -36
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +25 -10
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.d.ts +22 -0
- package/lib/cjs/internal/IntegrityCheck.d.ts.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js +13 -0
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NoReservations.d.ts +6 -0
- package/lib/cjs/internal/NoReservations.d.ts.map +1 -0
- package/lib/cjs/internal/NoReservations.js +21 -0
- package/lib/cjs/internal/NoReservations.js.map +1 -0
- package/lib/cjs/internal/SchemaSyncReservations.d.ts +4 -0
- package/lib/cjs/internal/SchemaSyncReservations.d.ts.map +1 -0
- package/lib/cjs/internal/SchemaSyncReservations.js +118 -0
- package/lib/cjs/internal/SchemaSyncReservations.js.map +1 -0
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +5 -0
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +13 -3
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +3 -3
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/EditTxn.d.ts.map +1 -1
- package/lib/esm/EditTxn.js +1 -0
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +48 -12
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +121 -25
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +30 -15
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +52 -16
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/Model.d.ts +5 -5
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/PropertyStore.js +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/SchemaSync.d.ts +37 -9
- package/lib/esm/SchemaSync.d.ts.map +1 -1
- package/lib/esm/SchemaSync.js +127 -8
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SynchronousChannel.d.ts +62 -0
- package/lib/esm/SynchronousChannel.d.ts.map +1 -0
- package/lib/esm/SynchronousChannel.js +9 -0
- package/lib/esm/SynchronousChannel.js.map +1 -0
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +44 -4
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +72 -14
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +6 -6
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +22 -7
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +104 -36
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +25 -10
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.d.ts +22 -0
- package/lib/esm/internal/IntegrityCheck.d.ts.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js +13 -0
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NoReservations.d.ts +6 -0
- package/lib/esm/internal/NoReservations.d.ts.map +1 -0
- package/lib/esm/internal/NoReservations.js +18 -0
- package/lib/esm/internal/NoReservations.js.map +1 -0
- package/lib/esm/internal/SchemaSyncReservations.d.ts +4 -0
- package/lib/esm/internal/SchemaSyncReservations.d.ts.map +1 -0
- package/lib/esm/internal/SchemaSyncReservations.js +115 -0
- package/lib/esm/internal/SchemaSyncReservations.js.map +1 -0
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +8 -3
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +178 -2
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +48 -18
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +177 -0
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +2 -16
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +2 -2
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +80 -2
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelECSql.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelECSql.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelECSql.test.js +367 -0
- package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.js +969 -0
- package/lib/esm/test/imodel/IModelElements.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js +539 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js +499 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js +274 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.js +357 -0
- package/lib/esm/test/imodel/IModelModels.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js +407 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts +53 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js +107 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.js +199 -0
- package/lib/esm/test/imodel/IModelViews.test.js.map +1 -0
- package/lib/esm/test/index.d.ts +0 -1
- package/lib/esm/test/index.d.ts.map +1 -1
- package/lib/esm/test/index.js +0 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +8 -26
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts +2 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js +263 -0
- package/lib/esm/test/standalone/DgnDomainMergeConflict.test.js.map +1 -0
- package/lib/esm/test/standalone/GeometryStream.test.js +1 -3
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +78 -1
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +29 -10
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +23 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts +2 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.js +221 -0
- package/lib/esm/test/standalone/SchemaSyncDb.test.js.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts +2 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js +459 -0
- package/lib/esm/test/standalone/SchemaSyncElementReservation.test.js.map +1 -0
- package/lib/esm/test/standalone/SnapshotDb.test.js +1 -0
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +108 -8
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/package.json +14 -17
- package/lib/esm/test/RevisionUtility.d.ts +0 -33
- package/lib/esm/test/RevisionUtility.d.ts.map +0 -1
- package/lib/esm/test/RevisionUtility.js +0 -52
- package/lib/esm/test/RevisionUtility.js.map +0 -1
- package/lib/esm/test/imodel/IModel.test.d.ts +0 -2
- package/lib/esm/test/imodel/IModel.test.d.ts.map +0 -1
- package/lib/esm/test/imodel/IModel.test.js +0 -3277
- package/lib/esm/test/imodel/IModel.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SnapshotDb.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 { expect } from \"chai\";\r\nimport * as sinon from \"sinon\";\r\nimport { ChangesetIdWithIndex } from \"@itwin/core-common\";\r\nimport { CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { IModelDb, SnapshotDb, StandaloneDb } from \"../../IModelDb\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { IModelHost } from \"../../IModelHost\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { _hubAccess } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { SpatialCategory } from \"../../Category\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport * as path from \"path\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"SnapshotDb.refreshContainerForRpc\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\r\n const iTwinId = \"fakeIModelId\";\r\n const iModelId = \"fakeIModelId\";\r\n const makeToken = (date: string) => {\r\n const dateUri = encodeURIComponent(date);\r\n return `?sv=2018-03-28&st=${dateUri}&se=${dateUri}&sr=c&sp=rl&sig=bad`;\r\n };\r\n\r\n const mockCheckpointV2 = {\r\n accountName: \"testAccount\",\r\n containerId: \"imodelblocks-123\",\r\n sasToken: makeToken(\"2021-01-01T01:00:00Z\"),\r\n dbName: \"testDb\",\r\n storageType: \"azure?sas=1\",\r\n };\r\n\r\n const cloudContainer = { accessToken: mockCheckpointV2.sasToken };\r\n const fakeSnapshotDb: any = {\r\n cloudContainer,\r\n isReadonly: () => true,\r\n isOpen: () => true,\r\n getIModelId: () => iModelId,\r\n getITwinId: () => iTwinId,\r\n getCurrentChangeset: () => changeset,\r\n hasUnsavedChanges: () => false,\r\n setIModelDb: () => { },\r\n closeIModel: () => { },\r\n restartDefaultTxn: () => { },\r\n closeFile: () => { },\r\n getFilePath: () => \"fakeFilePath\",\r\n clearECDbCache: () => { },\r\n };\r\n it(\"perform checkpoint\", async () => {\r\n const sourceFileName = path.join(KnownTestLocations.outputDir, \"checkpoint1.bim\");\r\n if (IModelJsFs.existsSync(sourceFileName))\r\n IModelJsFs.removeSync(sourceFileName);\r\n\r\n const iModel = StandaloneDb.createEmpty(sourceFileName, {\r\n rootSubject: { name: sourceFileName },\r\n });\r\n\r\n iModel.clearCaches();\r\n iModel.performCheckpoint();\r\n\r\n withEditTxn(iModel, (txn) => SpatialCategory.insert(\r\n txn,\r\n IModelDb.dictionaryId,\r\n \"spatial category\",\r\n {}\r\n ));\r\n\r\n // Use to throw error SQLITE_LOCKED\r\n iModel.performCheckpoint();\r\n iModel.close();\r\n });\r\n it(\"should restart default txn after inactivity\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n const defaultTxnSpy = sinon.spy(SnapshotDb.prototype, \"restartDefaultTxn\");\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\r\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\r\n });\r\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\r\n\r\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n\r\n const userAccessToken = \"token\";\r\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\r\n expect(openDgnDbStub.calledOnce).to.be.true;\r\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\r\n\r\n const tenMinutes = 10 * 60 * 1000;\r\n\r\n // Test 20 minute timer activated when opening v2 checkpoint works.\r\n await clock.tickAsync(tenMinutes - 100);\r\n expect(defaultTxnSpy.callCount).equal(0);\r\n await clock.tickAsync(101);\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n\r\n // Make sure timeout doesn't trigger more than once unless refreshContainer is called.\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n await checkpoint.refreshContainerForRpc(\"\"); // activates timeout again by calling refresh on the timer.\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(2);\r\n\r\n // Keep calling refreshContainer and make sure that restartDefaultTxn doesn't get called.\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n await clock.tickAsync(tenMinutes - 100);\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n await clock.tickAsync(tenMinutes - 100);\r\n expect(defaultTxnSpy.callCount).equal(2);\r\n\r\n // advance time past 20 minutes without refreshing container and make sure defaultTxn still restarts\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(3);\r\n });\r\n\r\n it(\"should refresh checkpoint sasToken from RPC\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\r\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\r\n });\r\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\r\n\r\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n\r\n const userAccessToken = \"token\";\r\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\r\n expect(checkpoint.cloudContainer?.accessToken).equal(mockCheckpointV2.sasToken);\r\n expect(openDgnDbStub.calledOnce).to.be.true;\r\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\r\n\r\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\r\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:58:10Z\")); // within safety period\r\n void expect(checkpoint.refreshContainerForRpc(\"\")).to.be.fulfilled;\r\n expect(queryStub.callCount).equal(0, \"should not need reattach yet\");\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:59:10Z\")); // after safety period\r\n\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T02:00:00Z\");\r\n const attachPromise = checkpoint.refreshContainerForRpc(\"\");\r\n const promise2 = checkpoint.refreshContainerForRpc(\"\"); // gets copy of first promise\r\n const promise3 = checkpoint.refreshContainerForRpc(\"\"); // \"\r\n expect(queryStub.callCount).equal(1); // shouldn't need to attach since first call already started the process\r\n expect(infoLogStub.callCount).equal(1);\r\n expect(infoLogStub.args[0][1]).include(\"attempting to refresh\");\r\n expect(errorLogStub.callCount).equal(0);\r\n\r\n void expect(attachPromise).to.not.be.fulfilled;\r\n void expect(promise2).to.not.be.fulfilled;\r\n void expect(promise3).to.not.be.fulfilled;\r\n await attachPromise;\r\n void expect(attachPromise).to.be.fulfilled;\r\n void expect(promise2).to.be.fulfilled;\r\n void expect(promise3).to.be.fulfilled;\r\n expect(infoLogStub.callCount).equal(2);\r\n expect(infoLogStub.args[1][1]).include(\"refreshed checkpoint sasToken\");\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:00Z\"));\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T03:00:10Z\"); // an expiry within safety interval should cause error log\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n expect(errorLogStub.callCount).equal(1);\r\n expect(errorLogStub.args[0][1]).include(\"timestamp that expires before safety interval\");\r\n\r\n queryStub.resetHistory();\r\n errorLogStub.resetHistory();\r\n infoLogStub.resetHistory();\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T04:00:10Z\"); // expiry after safety interval\r\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:02Z\"));\r\n // next call to reattach daemon should work fine and correct problem\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n expect(queryStub.callCount).equal(1);\r\n expect(infoLogStub.callCount).equal(2);\r\n expect(errorLogStub.callCount).equal(0);\r\n });\r\n\r\n it(\"should not refreshContainer if SnapshotDb is not a checkpoint\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n\r\n const snapshot = IModelTestUtils.openCheckpoint(\"fakeFilePath\", { iTwinId: \"fakeITwinId\", iModelId: \"fake1\", changeset });\r\n const nowStub = sinon.stub(Date, \"now\");\r\n await snapshot.refreshContainerForRpc(\"\");\r\n snapshot.close();\r\n expect(nowStub.called).to.be.false;\r\n nowStub.restore();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SnapshotDb.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/SnapshotDb.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 { expect } from \"chai\";\r\nimport * as sinon from \"sinon\";\r\nimport { ChangesetIdWithIndex } from \"@itwin/core-common\";\r\nimport { CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { IModelDb, SnapshotDb, StandaloneDb } from \"../../IModelDb\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { IModelHost } from \"../../IModelHost\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { _hubAccess } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { SpatialCategory } from \"../../Category\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport * as path from \"path\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"SnapshotDb.refreshContainerForRpc\", () => {\r\n afterEach(() => sinon.restore());\r\n\r\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\r\n const iTwinId = \"fakeIModelId\";\r\n const iModelId = \"fakeIModelId\";\r\n const makeToken = (date: string) => {\r\n const dateUri = encodeURIComponent(date);\r\n return `?sv=2018-03-28&st=${dateUri}&se=${dateUri}&sr=c&sp=rl&sig=bad`;\r\n };\r\n\r\n const mockCheckpointV2 = {\r\n accountName: \"testAccount\",\r\n containerId: \"imodelblocks-123\",\r\n sasToken: makeToken(\"2021-01-01T01:00:00Z\"),\r\n dbName: \"testDb\",\r\n storageType: \"azure?sas=1\",\r\n };\r\n\r\n const cloudContainer = { accessToken: mockCheckpointV2.sasToken };\r\n const fakeSnapshotDb: any = {\r\n cloudContainer,\r\n isReadonly: () => true,\r\n isOpen: () => true,\r\n getIModelId: () => iModelId,\r\n getITwinId: () => iTwinId,\r\n getCurrentChangeset: () => changeset,\r\n hasUnsavedChanges: () => false,\r\n schemaSyncEnabled: () => false,\r\n setIModelDb: () => { },\r\n closeIModel: () => { },\r\n restartDefaultTxn: () => { },\r\n closeFile: () => { },\r\n getFilePath: () => \"fakeFilePath\",\r\n clearECDbCache: () => { },\r\n };\r\n it(\"perform checkpoint\", async () => {\r\n const sourceFileName = path.join(KnownTestLocations.outputDir, \"checkpoint1.bim\");\r\n if (IModelJsFs.existsSync(sourceFileName))\r\n IModelJsFs.removeSync(sourceFileName);\r\n\r\n const iModel = StandaloneDb.createEmpty(sourceFileName, {\r\n rootSubject: { name: sourceFileName },\r\n });\r\n\r\n iModel.clearCaches();\r\n iModel.performCheckpoint();\r\n\r\n withEditTxn(iModel, (txn) => SpatialCategory.insert(\r\n txn,\r\n IModelDb.dictionaryId,\r\n \"spatial category\",\r\n {}\r\n ));\r\n\r\n // Use to throw error SQLITE_LOCKED\r\n iModel.performCheckpoint();\r\n iModel.close();\r\n });\r\n it(\"should restart default txn after inactivity\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n const defaultTxnSpy = sinon.spy(SnapshotDb.prototype, \"restartDefaultTxn\");\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\r\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\r\n });\r\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\r\n\r\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n\r\n const userAccessToken = \"token\";\r\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\r\n expect(openDgnDbStub.calledOnce).to.be.true;\r\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\r\n\r\n const tenMinutes = 10 * 60 * 1000;\r\n\r\n // Test 20 minute timer activated when opening v2 checkpoint works.\r\n await clock.tickAsync(tenMinutes - 100);\r\n expect(defaultTxnSpy.callCount).equal(0);\r\n await clock.tickAsync(101);\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n\r\n // Make sure timeout doesn't trigger more than once unless refreshContainer is called.\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n await checkpoint.refreshContainerForRpc(\"\"); // activates timeout again by calling refresh on the timer.\r\n expect(defaultTxnSpy.callCount).equal(1);\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(2);\r\n\r\n // Keep calling refreshContainer and make sure that restartDefaultTxn doesn't get called.\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n await clock.tickAsync(tenMinutes - 100);\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n await clock.tickAsync(tenMinutes - 100);\r\n expect(defaultTxnSpy.callCount).equal(2);\r\n\r\n // advance time past 20 minutes without refreshing container and make sure defaultTxn still restarts\r\n await clock.tickAsync(tenMinutes + 100);\r\n expect(defaultTxnSpy.callCount).equal(3);\r\n });\r\n\r\n it(\"should refresh checkpoint sasToken from RPC\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\r\n return { dbName: \"fakeDb\", container: cloudContainer } as any;\r\n });\r\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\r\n\r\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n\r\n const userAccessToken = \"token\";\r\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken: userAccessToken, iTwinId, iModelId, changeset, reattachSafetySeconds: 60 });\r\n expect(checkpoint.cloudContainer?.accessToken).equal(mockCheckpointV2.sasToken);\r\n expect(openDgnDbStub.calledOnce).to.be.true;\r\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\r\n\r\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\r\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:58:10Z\")); // within safety period\r\n void expect(checkpoint.refreshContainerForRpc(\"\")).to.be.fulfilled;\r\n expect(queryStub.callCount).equal(0, \"should not need reattach yet\");\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:59:10Z\")); // after safety period\r\n\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T02:00:00Z\");\r\n const attachPromise = checkpoint.refreshContainerForRpc(\"\");\r\n const promise2 = checkpoint.refreshContainerForRpc(\"\"); // gets copy of first promise\r\n const promise3 = checkpoint.refreshContainerForRpc(\"\"); // \"\r\n expect(queryStub.callCount).equal(1); // shouldn't need to attach since first call already started the process\r\n expect(infoLogStub.callCount).equal(1);\r\n expect(infoLogStub.args[0][1]).include(\"attempting to refresh\");\r\n expect(errorLogStub.callCount).equal(0);\r\n\r\n void expect(attachPromise).to.not.be.fulfilled;\r\n void expect(promise2).to.not.be.fulfilled;\r\n void expect(promise3).to.not.be.fulfilled;\r\n await attachPromise;\r\n void expect(attachPromise).to.be.fulfilled;\r\n void expect(promise2).to.be.fulfilled;\r\n void expect(promise3).to.be.fulfilled;\r\n expect(infoLogStub.callCount).equal(2);\r\n expect(infoLogStub.args[1][1]).include(\"refreshed checkpoint sasToken\");\r\n\r\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:00Z\"));\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T03:00:10Z\"); // an expiry within safety interval should cause error log\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n expect(errorLogStub.callCount).equal(1);\r\n expect(errorLogStub.args[0][1]).include(\"timestamp that expires before safety interval\");\r\n\r\n queryStub.resetHistory();\r\n errorLogStub.resetHistory();\r\n infoLogStub.resetHistory();\r\n mockCheckpointV2.sasToken = makeToken(\"2021-01-01T04:00:10Z\"); // expiry after safety interval\r\n clock.setSystemTime(Date.parse(\"2021-01-01T03:00:02Z\"));\r\n // next call to reattach daemon should work fine and correct problem\r\n await checkpoint.refreshContainerForRpc(\"\");\r\n expect(queryStub.callCount).equal(1);\r\n expect(infoLogStub.callCount).equal(2);\r\n expect(errorLogStub.callCount).equal(0);\r\n });\r\n\r\n it(\"should not refreshContainer if SnapshotDb is not a checkpoint\", async () => {\r\n const clock = sinon.useFakeTimers();\r\n clock.setSystemTime(Date.parse(\"2021-01-01T00:00:00Z\"));\r\n sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(CheckpointManager, \"validateCheckpointGuids\").returns();\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n\r\n const snapshot = IModelTestUtils.openCheckpoint(\"fakeFilePath\", { iTwinId: \"fakeITwinId\", iModelId: \"fake1\", changeset });\r\n const nowStub = sinon.stub(Date, \"now\");\r\n await snapshot.refreshContainerForRpc(\"\");\r\n snapshot.close();\r\n expect(nowStub.called).to.be.false;\r\n nowStub.restore();\r\n });\r\n});\r\n"]}
|
|
@@ -58,7 +58,7 @@ import { assert, expect } from "chai";
|
|
|
58
58
|
import { BeDuration, Guid, Id64, IModelStatus, OpenMode } from "@itwin/core-bentley";
|
|
59
59
|
import { LineSegment3d, Point3d, YawPitchRollAngles } from "@itwin/core-geometry";
|
|
60
60
|
import { Code, ColorByName, DomainOptions, GeometryStreamBuilder, IModel, IModelError, SubCategoryAppearance, TxnAction, } from "@itwin/core-common";
|
|
61
|
-
import { _nativeDb, ChannelControl, IModelDb, IModelJsFs, PhysicalModel, PhysicalPartition, setMaxEntitiesPerEvent, SpatialCategory, StandaloneDb, SubjectOwnsPartitionElements, withEditTxn, } from "../../core-backend";
|
|
61
|
+
import { _nativeDb, ChannelControl, DocumentListModel, Drawing, IModelDb, IModelJsFs, PhysicalModel, PhysicalPartition, SectionDrawing, setMaxEntitiesPerEvent, SpatialCategory, StandaloneDb, SubjectOwnsPartitionElements, withEditTxn, } from "../../core-backend";
|
|
62
62
|
import { IModelTestUtils, TestElementDrivesElement, TestPhysicalObject } from "../IModelTestUtils";
|
|
63
63
|
import { IModelNative } from "../../internal/NativePlatform";
|
|
64
64
|
import { EntityClass, SchemaItemKey, SchemaKey } from "@itwin/ecschema-metadata";
|
|
@@ -438,8 +438,11 @@ describe("TxnManager", () => {
|
|
|
438
438
|
const iterName = iterNames[propName];
|
|
439
439
|
const entities = changes[iterName];
|
|
440
440
|
const dest = this[propName];
|
|
441
|
-
for (const entity of entities)
|
|
442
|
-
|
|
441
|
+
for (const entity of entities) {
|
|
442
|
+
expect(entity.metadata.classFullName).not.to.equal("");
|
|
443
|
+
expect(entity.metadata.is(entity.metadata.classFullName)).to.be.true;
|
|
444
|
+
dest.push({ id: entity.id, classId: entity.classId });
|
|
445
|
+
}
|
|
443
446
|
}
|
|
444
447
|
expectNumValidations(expected) {
|
|
445
448
|
expect(this.numValidates).to.equal(expected);
|
|
@@ -577,16 +580,110 @@ describe("TxnManager", () => {
|
|
|
577
580
|
});
|
|
578
581
|
});
|
|
579
582
|
});
|
|
583
|
+
it("includes class metadata in elements changed events", async () => {
|
|
584
|
+
const metadata = [];
|
|
585
|
+
const removeListener = imodel.txns.onElementsChanged.addListener((changes) => {
|
|
586
|
+
for (const change of changes.inserts)
|
|
587
|
+
metadata.push(change.metadata);
|
|
588
|
+
});
|
|
589
|
+
try {
|
|
590
|
+
await withEditTxn(imodel, "elements-event-metadata", async (editTxn) => {
|
|
591
|
+
editTxn.insertElement(props);
|
|
592
|
+
editTxn.insertElement(props);
|
|
593
|
+
editTxn.saveChanges("2 inserts");
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
finally {
|
|
597
|
+
removeListener();
|
|
598
|
+
}
|
|
599
|
+
assert.lengthOf(metadata, 2);
|
|
600
|
+
assert.strictEqual(metadata[0], metadata[1], "metadata should be shared by entities of the same class");
|
|
601
|
+
assert.equal(metadata[0].classFullName, "TestBim:TestPhysicalObject");
|
|
602
|
+
assert.isTrue(metadata[0].is("TestBim:TestPhysicalObject"));
|
|
603
|
+
assert.isTrue(metadata[0].is("BisCore:PhysicalElement"));
|
|
604
|
+
assert.isTrue(metadata[0].is("BisCore:Element"));
|
|
605
|
+
assert.isFalse(metadata[0].is("BisCore:Model"));
|
|
606
|
+
});
|
|
607
|
+
it("maps metadata to each changed class", async () => {
|
|
608
|
+
const changes = [];
|
|
609
|
+
const removeListener = imodel.txns.onElementsChanged.addListener((event) => {
|
|
610
|
+
for (const change of event.inserts)
|
|
611
|
+
changes.push({ ...change });
|
|
612
|
+
});
|
|
613
|
+
let physicalObjectId = "";
|
|
614
|
+
let categoryId = "";
|
|
615
|
+
try {
|
|
616
|
+
await withEditTxn(imodel, "elements-event-class-metadata", async (editTxn) => {
|
|
617
|
+
physicalObjectId = editTxn.insertElement(props);
|
|
618
|
+
categoryId = insertSpatialCategory(editTxn, IModel.dictionaryId, Guid.createValue(), new SubCategoryAppearance({ color: ColorByName.green }));
|
|
619
|
+
editTxn.saveChanges("multiple changed classes");
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
finally {
|
|
623
|
+
removeListener();
|
|
624
|
+
}
|
|
625
|
+
const byId = new Map(changes.map((change) => [change.id, change]));
|
|
626
|
+
assert.equal(byId.get(physicalObjectId)?.metadata.classFullName, "TestBim:TestPhysicalObject");
|
|
627
|
+
assert.equal(byId.get(categoryId)?.metadata.classFullName, "BisCore:SpatialCategory");
|
|
628
|
+
assert.equal(byId.get(IModel.getDefaultSubCategoryId(categoryId))?.metadata.classFullName, "BisCore:SubCategory");
|
|
629
|
+
});
|
|
630
|
+
it("handles changed classes when a base class is also changed", async () => {
|
|
631
|
+
const metadata = new Map();
|
|
632
|
+
const removeListener = imodel.txns.onElementsChanged.addListener((changes) => {
|
|
633
|
+
for (const change of changes.inserts)
|
|
634
|
+
metadata.set(change.metadata.classFullName, change.metadata);
|
|
635
|
+
});
|
|
636
|
+
const documentListModelId = withEditTxn(imodel, "document-list-model", (editTxn) => DocumentListModel.insert(editTxn, IModel.rootSubjectId, "Documents"));
|
|
637
|
+
try {
|
|
638
|
+
await withEditTxn(imodel, "elements-event-base-class-metadata", async (editTxn) => {
|
|
639
|
+
editTxn.insertElement({
|
|
640
|
+
classFullName: SectionDrawing.classFullName,
|
|
641
|
+
model: documentListModelId,
|
|
642
|
+
code: Drawing.createCode(imodel, documentListModelId, "DerivedDrawing"),
|
|
643
|
+
});
|
|
644
|
+
editTxn.insertElement({
|
|
645
|
+
classFullName: Drawing.classFullName,
|
|
646
|
+
model: documentListModelId,
|
|
647
|
+
code: Drawing.createCode(imodel, documentListModelId, "BaseDrawing"),
|
|
648
|
+
});
|
|
649
|
+
editTxn.saveChanges("derived and base drawings");
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
finally {
|
|
653
|
+
removeListener();
|
|
654
|
+
}
|
|
655
|
+
const sectionDrawingMetadata = metadata.get("BisCore:SectionDrawing");
|
|
656
|
+
const drawingMetadata = metadata.get("BisCore:Drawing");
|
|
657
|
+
assert.isDefined(sectionDrawingMetadata);
|
|
658
|
+
assert.isDefined(drawingMetadata);
|
|
659
|
+
assert.isTrue(sectionDrawingMetadata.is("BisCore:Drawing"));
|
|
660
|
+
assert.isTrue(sectionDrawingMetadata.is("BisCore:Document"));
|
|
661
|
+
assert.isTrue(drawingMetadata.is("BisCore:Document"));
|
|
662
|
+
});
|
|
580
663
|
it("dispatches events when models change", async () => {
|
|
581
664
|
await withEditTxn(imodel, "models-events", async (editTxn) => {
|
|
582
665
|
const existingModelId = props.model;
|
|
583
666
|
let newModelId;
|
|
667
|
+
let modelMetadataChecked = false;
|
|
584
668
|
EventAccumulator.testModels(imodel, (accum) => {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
669
|
+
const removeMetadataListener = imodel.txns.onModelsChanged.addListener((changes) => {
|
|
670
|
+
for (const change of changes.inserts) {
|
|
671
|
+
assert.strictEqual(change.metadata.classFullName, "BisCore:PhysicalModel");
|
|
672
|
+
assert.isTrue(change.metadata.is("BisCore:Model"));
|
|
673
|
+
modelMetadataChecked = true;
|
|
674
|
+
}
|
|
675
|
+
});
|
|
676
|
+
try {
|
|
677
|
+
newModelId = insertPhysicalModel(editTxn, IModel.rootSubjectId, Guid.createValue());
|
|
678
|
+
editTxn.saveChanges("1 insert");
|
|
679
|
+
accum.expectNumValidations(1);
|
|
680
|
+
accum.expectChanges({ inserted: [physicalModelEntity(newModelId)] });
|
|
681
|
+
}
|
|
682
|
+
finally {
|
|
683
|
+
removeMetadataListener();
|
|
684
|
+
}
|
|
589
685
|
});
|
|
686
|
+
assert.isTrue(modelMetadataChecked, "model insert did not include metadata");
|
|
590
687
|
EventAccumulator.testModels(roImodel, (accum) => {
|
|
591
688
|
roImodel[_nativeDb].restartDefaultTxn();
|
|
592
689
|
accum.expectChanges({ inserted: [physicalModelEntity(newModelId)] });
|
|
@@ -748,8 +845,11 @@ describe("TxnManager", () => {
|
|
|
748
845
|
await withEditTxn(imodel, "batch-events", async (editTxn) => {
|
|
749
846
|
function entityCount(entities) {
|
|
750
847
|
let count = 0;
|
|
751
|
-
for (const
|
|
848
|
+
for (const entity of entities) {
|
|
849
|
+
expect(entity.metadata.classFullName).to.equal("TestBim:TestPhysicalObject");
|
|
850
|
+
expect(entity.metadata.is("BisCore:Element")).to.be.true;
|
|
752
851
|
++count;
|
|
852
|
+
}
|
|
753
853
|
return count;
|
|
754
854
|
}
|
|
755
855
|
const test = (numChangesExpected, func) => {
|