@itwin/core-backend 5.9.0-dev.15 → 5.9.0-dev.17

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.
Files changed (137) hide show
  1. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  2. package/lib/cjs/BriefcaseManager.js +6 -3
  3. package/lib/cjs/BriefcaseManager.js.map +1 -1
  4. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  5. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  6. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  7. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  8. package/lib/cjs/ChangesetReader.d.ts +186 -0
  9. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  10. package/lib/cjs/ChangesetReader.js +372 -0
  11. package/lib/cjs/ChangesetReader.js.map +1 -0
  12. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  13. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  16. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  17. package/lib/cjs/DevTools.js.map +1 -1
  18. package/lib/cjs/DisplayStyle.js.map +1 -1
  19. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  20. package/lib/cjs/ECSqlStatement.js.map +1 -1
  21. package/lib/cjs/EditTxn.d.ts +49 -3
  22. package/lib/cjs/EditTxn.d.ts.map +1 -1
  23. package/lib/cjs/EditTxn.js +24 -9
  24. package/lib/cjs/EditTxn.js.map +1 -1
  25. package/lib/cjs/Element.d.ts +69 -0
  26. package/lib/cjs/Element.d.ts.map +1 -1
  27. package/lib/cjs/Element.js +36 -0
  28. package/lib/cjs/Element.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ExternalSource.js.map +1 -1
  31. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  32. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  33. package/lib/cjs/GeographicCRSServices.js +13 -4
  34. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  35. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  36. package/lib/cjs/IpcHost.js.map +1 -1
  37. package/lib/cjs/Model.d.ts +34 -0
  38. package/lib/cjs/Model.d.ts.map +1 -1
  39. package/lib/cjs/Model.js +24 -0
  40. package/lib/cjs/Model.js.map +1 -1
  41. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  42. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  43. package/lib/cjs/PartialChangeUnifier.js +234 -0
  44. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  45. package/lib/cjs/SheetIndex.js.map +1 -1
  46. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  47. package/lib/cjs/SqliteChangesetReader.js +1 -1
  48. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  49. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  50. package/lib/cjs/core-backend.d.ts +3 -0
  51. package/lib/cjs/core-backend.d.ts.map +1 -1
  52. package/lib/cjs/core-backend.js +3 -0
  53. package/lib/cjs/core-backend.js.map +1 -1
  54. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  55. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  56. package/lib/esm/BriefcaseManager.js +6 -3
  57. package/lib/esm/BriefcaseManager.js.map +1 -1
  58. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  59. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  60. package/lib/esm/ChangesetECAdaptor.js +7 -1
  61. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  62. package/lib/esm/ChangesetReader.d.ts +186 -0
  63. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  64. package/lib/esm/ChangesetReader.js +368 -0
  65. package/lib/esm/ChangesetReader.js.map +1 -0
  66. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  67. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  68. package/lib/esm/ChangesetReaderTypes.js +20 -0
  69. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  70. package/lib/esm/ConcurrentQuery.js.map +1 -1
  71. package/lib/esm/DevTools.js.map +1 -1
  72. package/lib/esm/DisplayStyle.js.map +1 -1
  73. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  74. package/lib/esm/ECSqlStatement.js.map +1 -1
  75. package/lib/esm/EditTxn.d.ts +49 -3
  76. package/lib/esm/EditTxn.d.ts.map +1 -1
  77. package/lib/esm/EditTxn.js +23 -8
  78. package/lib/esm/EditTxn.js.map +1 -1
  79. package/lib/esm/Element.d.ts +69 -0
  80. package/lib/esm/Element.d.ts.map +1 -1
  81. package/lib/esm/Element.js +36 -0
  82. package/lib/esm/Element.js.map +1 -1
  83. package/lib/esm/ElementGraphics.js.map +1 -1
  84. package/lib/esm/ExternalSource.js.map +1 -1
  85. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  86. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  87. package/lib/esm/GeographicCRSServices.js +12 -4
  88. package/lib/esm/GeographicCRSServices.js.map +1 -1
  89. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  90. package/lib/esm/IpcHost.js.map +1 -1
  91. package/lib/esm/Model.d.ts +34 -0
  92. package/lib/esm/Model.d.ts.map +1 -1
  93. package/lib/esm/Model.js +24 -0
  94. package/lib/esm/Model.js.map +1 -1
  95. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  96. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  97. package/lib/esm/PartialChangeUnifier.js +230 -0
  98. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  99. package/lib/esm/SheetIndex.js.map +1 -1
  100. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  101. package/lib/esm/SqliteChangesetReader.js +1 -1
  102. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  103. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  104. package/lib/esm/core-backend.d.ts +3 -0
  105. package/lib/esm/core-backend.d.ts.map +1 -1
  106. package/lib/esm/core-backend.js +3 -0
  107. package/lib/esm/core-backend.js.map +1 -1
  108. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  109. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  110. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  111. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  112. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  113. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  114. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  115. package/lib/esm/test/element/DeleteDefinitionElements.test.js +40 -31
  116. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  117. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  118. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  119. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  120. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  121. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  122. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  123. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  124. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  125. package/lib/esm/test/standalone/DeleteElements.test.js +39 -15
  126. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  127. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  128. package/lib/esm/test/standalone/IntegrityCheck.test.js +1 -1
  129. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  130. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  131. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  132. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  133. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  134. package/lib/esm/test/standalone/ViewDefinition.test.js +1 -1
  135. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  136. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  137. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"Rebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/Rebase.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, Guid, Id64String } from \"@itwin/core-bentley\";\nimport { ChangesetIdWithIndex, ChangesetProps, Code, GeometricElement2dProps, GeometricModelProps, GeometryStreamBuilder, IModel, ModelGeometryChangesProps, ModelIdAndGeometryGuid, QueryBinder, RelatedElementProps, RelationshipProps, SubCategoryAppearance, TxnProps } from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { Suite } from \"mocha\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChangesetECAdaptor, ChannelControl, DrawingCategory, ElementGroupsMembers, SqliteChangesetReader, TxnIdString } from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { StashManager } from \"../../StashManager\";\nimport { EditTxn } from \"../../EditTxn\";\nimport { TestUtils } from \"../TestUtils\";\nimport { existsSync, unlinkSync, writeFileSync } from \"fs\";\nimport * as path from \"path\";\nimport { LineSegment3d, Point3d } from \"@itwin/core-geometry\";\nchai.use(chaiAsPromised);\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"rebase\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\n\nclass TestIModel {\n public iModelId: Id64String = \"\";\n public drawingModelId: Id64String = \"\";\n public drawingCategoryId: Id64String = \"\";\n public briefcases: BriefcaseDb[] = [];\n private _data = 0;\n private _nextAccessToken = 1;\n public constructor() { }\n\n private acquireAccessToken(): string {\n return `user${this._nextAccessToken++}`;\n }\n\n public async startup() {\n HubMock.startup(\"TestIModel\", KnownTestLocations.outputDir);\n const accessToken = this.acquireAccessToken();\n this.iModelId = await HubMock.createNewIModel({ accessToken, iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken, iTwinId: HubMock.iTwinId, iModelId: this.iModelId });\n const b1Txn = startTestTxn(b1, \"rebase startup\");\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" 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=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECEntityClass typeName=\"A1Recipe2d\">\n <BaseClass>bis:TemplateRecipe2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECRelationshipClass typeName=\"A1OwnsA1\" modifier=\"None\" strength=\"embedding\">\n <BaseClass>bis:ElementOwnsChildElements</BaseClass>\n <Source multiplicity=\"(0..1)\" roleLabel=\"owns\" polymorphic=\"true\">\n <Class class=\"a1\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is owned by\" polymorphic=\"false\">\n <Class class=\"a1\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`;\n\n await importSchemaStrings(b1Txn, [schema1]);\n chai.expect(b1.txns.hasPendingTxns).to.be.true\n await b1.pushChanges({ description: \"schema1\" });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n this.drawingModelId = IModelTestUtils.createAndInsertDrawingPartitionAndModel(b1Txn, codeProps, true)[1];\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(b1Txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n this.drawingCategoryId = drawingCategoryId;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"drawing category\" });\n b1.close();\n }\n public async openBriefcase(): Promise<BriefcaseDb> {\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: this.acquireAccessToken(), iTwinId: HubMock.iTwinId, iModelId: this.iModelId });\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n b[_nativeDb].saveChanges();\n this.briefcases.push(b);\n return b;\n }\n public async insertRecipe2d(txn: EditTxn, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [IModel.dictionaryId] });\n const baseProps = {\n classFullName: \"TestDomain:A1Recipe2d\",\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n };\n\n let id: Id64String = \"\";\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement({ ...baseProps, prop1: `${this._data++}` } as any);\n });\n return id;\n }\n return txn.insertElement({ ...baseProps, prop1: `${this._data++}` } as any);\n }\n public async updateRecipe2d(txn: EditTxn, id: Id64String, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [IModel.dictionaryId], exclusive: [id] });\n const elProps = b.elements.getElementProps(id);\n\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n });\n } else {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n }\n }\n public async insertElement(txn: EditTxn, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId] });\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 5.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n\n const baseProps = {\n classFullName: \"TestDomain:a1\",\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n geom: builder.geometryStream,\n prop1: `${this._data++}`,\n } as GeometricElement2dProps & { prop1: string };\n\n let id: Id64String = \"\";\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement(baseProps);\n });\n return id;\n }\n baseProps.prop1 = `${this._data++}`;\n return txn.insertElement(baseProps);\n }\n public async insertElementEx(txn: EditTxn, args?: { prop1?: string, markAsIndirect?: true, parent?: RelatedElementProps }) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId] });\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 5.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n\n const props: GeometricElement2dProps & { prop1: string } = {\n classFullName: \"TestDomain:a1\",\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n parent: args?.parent,\n geom: builder.geometryStream,\n prop1: args?.prop1 ?? `${this._data++}`\n };\n\n let id: Id64String = \"\";\n if (args?.markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement(props as any);\n });\n return id;\n }\n return txn.insertElement(props as any);\n }\n public async updateElement(txn: EditTxn, id: Id64String, markAsIndirect?: true, updateGeom?: boolean) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });\n const elProps = b.elements.getElementProps<GeometricElement2dProps & { prop1: string }>(id);\n\n if (updateGeom) {\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 10.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n elProps.geom = builder.geometryStream;\n }\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n });\n } else {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n }\n }\n public async deleteElement(txn: EditTxn, id: Id64String, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.deleteElement(id);\n });\n } else {\n txn.deleteElement(id);\n }\n }\n public async shutdown(): Promise<void> {\n this.briefcases.forEach(b => b.close());\n HubMock.shutdown();\n }\n}\n\nconst removePropertyRecursive = (obj: any, prop: string) => {\n if (obj && typeof obj === \"object\") {\n Object.keys(obj).forEach((key) => {\n if (key === prop) {\n delete obj[key];\n } else {\n removePropertyRecursive(obj[key], prop);\n }\n });\n }\n};\n\nfor (const enableSemanticRebase of [false, true]) {\n describe(`rebase changes & stashing api (useSemanticRebase=${enableSemanticRebase})`, function (this: Suite) {\n let testIModel: TestIModel;\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: enableSemanticRebase });\n });\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n this.beforeEach(async () => {\n testIModel = new TestIModel();\n await testIModel.startup();\n });\n this.afterEach(async () => {\n await testIModel.shutdown();\n });\n it(\"save changes args\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"save changes args\");\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges({\n source: \"test\",\n description: \"test description\",\n appData: {\n test: \"test\",\n foo: [1, 2, 3],\n bar: { baz: \"qux\" }\n }\n });\n\n let lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).to.be.equals(\"test\");\n chai.expect(lastTxn.props.description).to.be.equals(\"test description\");\n chai.expect(lastTxn.props.appData).to.not.be.undefined;\n chai.expect(lastTxn.props.appData?.test).to.be.eq(\"test\");\n chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([1, 2, 3]);\n chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: \"qux\" });\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.undefined;\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000000');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges({\n source: \"test2\",\n description: \"test description 2\",\n appData: {\n test: \"test 2\",\n foo: [11, 12, 13],\n bar: { baz: \"qux2\" }\n }\n });\n\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).to.be.equals(\"test2\");\n chai.expect(lastTxn.props.description).to.be.equals(\"test description 2\");\n chai.expect(lastTxn.props.appData).to.not.be.undefined;\n chai.expect(lastTxn.props.appData?.test).to.be.eq(\"test 2\");\n chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([11, 12, 13]);\n chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: \"qux2\" });\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.equal('0x100000000');\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000001');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(\"new element\");\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).is.undefined;\n chai.expect(lastTxn.props.description).to.be.equals(\"new element\");\n chai.expect(lastTxn.props.appData).to.be.undefined;\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.equal('0x100000001');\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000002');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await b1.pushChanges({ description: \"new element\" });\n chai.expect(b1.txns.isUndoPossible).is.false;\n chai.expect(b1.txns.isRedoPossible).is.false;\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isUndefined(lastTxn);\n });\n\n it(\"direct / indirect\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"direct indirect\");\n const directElId = await testIModel.insertElement(b1Txn);\n const indirectElId = await testIModel.insertElement(b1Txn, true);\n chai.expect(directElId).to.not.be.undefined;\n chai.expect(indirectElId).to.not.be.undefined;\n b1Txn.saveChanges({ description: \"insert element 1 direct and 1 indirect\" });\n const txn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(txn);\n if (txn) {\n let checkCount = 0;\n const reader = SqliteChangesetReader.openTxn({ txnId: txn?.id, db: b1 });\n while (reader.step()) {\n if (reader.primaryKeyValues.length === 0) continue;\n if (reader.tableName !== \"bis_Element\") continue;\n const iid = reader.primaryKeyValues[0] as Id64String;\n if (iid === directElId) {\n chai.expect(reader.isIndirect).to.be.false;\n }\n if (iid === indirectElId) {\n chai.expect(reader.isIndirect).to.be.true;\n }\n checkCount++;\n }\n chai.expect(checkCount).to.be.equals(2);\n }\n\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n chai.expect(b1.txns.isUndoPossible).is.false;\n chai.expect(b1.txns.isRedoPossible).is.false;\n const lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isUndefined(lastTxn);\n });\n\n it(\"rebase handler\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"rebase handler b1\");\n const b2Txn = startTestTxn(b2, \"rebase handler b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps): Promise<void> => {\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n },\n });\n await b1.pullChanges();\n });\n it(\"stash & drop\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"stash drop\");\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n const e2 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`first`);\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges(`second`);\n await testIModel.deleteElement(b1Txn, e2);\n b1Txn.saveChanges(`third`);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`fourth`);\n\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\" });\n\n chai.expect(stash1).to.exist;\n chai.assert(Guid.isGuid(stash1.id));\n chai.expect(stash1.description).to.equals(\"stash test 1\");\n chai.expect(stash1.briefcaseId).equals(b1.briefcaseId);\n chai.expect(stash1.iModelId).to.equals(b1.iModelId);\n chai.expect(stash1.timestamp).to.exist;\n chai.expect(stash1.description).to.exist;\n chai.expect(stash1.hash).length(64);\n chai.expect(stash1.parentChangeset).to.exist;\n chai.expect(stash1.idSequences.element).to.equals(\"0x30000000004\");\n chai.expect(stash1.idSequences.instance).to.equals(\"0x30000000000\");\n chai.expect(stash1.acquiredLocks).equals(4);\n chai.expect(stash1.txns).to.exist;\n\n chai.expect(stash1.txns).to.have.lengthOf(4);\n chai.expect(stash1.txns[0].props.description).to.equal(\"first\");\n chai.expect(stash1.txns[1].props.description).to.equal(\"second\");\n chai.expect(stash1.txns[2].props.description).to.equal(\"third\");\n chai.expect(stash1.txns[3].props.description).to.equal(\"fourth\");\n\n chai.expect(stash1.txns[0].id).to.equals(\"0x100000000\");\n chai.expect(stash1.txns[1].id).to.equals(\"0x100000001\");\n chai.expect(stash1.txns[2].id).to.equals(\"0x100000002\");\n chai.expect(stash1.txns[3].id).to.equals(\"0x100000003\");\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`fifth`);\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges(`sixth`);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`seventh`);\n\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\" });\n chai.expect(stash2).to.exist;\n chai.expect(stash2.description).to.equals(\"stash test 2\");\n chai.expect(stash2.hash).length(64);\n chai.expect(stash2.parentChangeset).to.exist;\n chai.expect(stash2.idSequences.element).to.equals(\"0x30000000006\");\n chai.expect(stash2.idSequences.instance).to.equals(\"0x30000000000\");\n chai.expect(stash2.acquiredLocks).equals(4);\n chai.expect(stash2.txns).to.exist;\n\n chai.expect(stash2.txns).to.have.lengthOf(7);\n chai.expect(stash2.txns[0].props.description).to.equal(\"first\");\n chai.expect(stash2.txns[1].props.description).to.equal(\"second\");\n chai.expect(stash2.txns[2].props.description).to.equal(\"third\");\n chai.expect(stash2.txns[3].props.description).to.equal(\"fourth\");\n chai.expect(stash2.txns[4].props.description).to.equal(\"fifth\");\n chai.expect(stash2.txns[5].props.description).to.equal(\"sixth\");\n chai.expect(stash2.txns[6].props.description).to.equal(\"seventh\");\n\n chai.expect(stash2.txns[0].id).to.equals(\"0x100000000\");\n chai.expect(stash2.txns[1].id).to.equals(\"0x100000001\");\n chai.expect(stash2.txns[2].id).to.equals(\"0x100000002\");\n chai.expect(stash2.txns[3].id).to.equals(\"0x100000003\");\n chai.expect(stash2.txns[4].id).to.equals(\"0x100000004\");\n chai.expect(stash2.txns[5].id).to.equals(\"0x100000005\");\n chai.expect(stash2.txns[6].id).to.equals(\"0x100000006\");\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(2);\n chai.expect(stashes[0].description).to.equals(\"stash test 2\");\n chai.expect(stashes[1].description).to.equals(\"stash test 1\");\n chai.expect(stashes[0]).to.deep.equal(stash2);\n chai.expect(stashes[1]).to.deep.equal(stash1);\n\n StashManager.dropAllStashes(b1);\n chai.expect(StashManager.getStashes(b1)).to.have.lengthOf(0);\n });\n it(\"recursively calling withIndirectTxnMode()\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n chai.expect(() =>\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n throw new Error(\"Test error\");\n })).to.throw();\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n });\n it(\"should fail to importSchemas() & importSchemaStrings() in indirect scope\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect schema import failures\");\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"MySchema\" alias=\"ms1\" 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=\"my_class\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>`;\n\n const schemaFile = path.join(KnownTestLocations.outputDir, \"MySchema.01.00.00.ecschema.xml\");\n if (existsSync(schemaFile)) {\n unlinkSync(schemaFile);\n }\n writeFileSync(schemaFile, schema, { encoding: \"utf8\" });\n\n b1Txn.end(\"abandon\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.importSchemas([schema]);\n })).to.be.rejectedWith(\"Cannot import schemas while in an indirect change scope\");\n\n b1Txn.start();\n b1Txn.end(\"abandon\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.importSchemaStrings([schema]);\n })).to.be.rejectedWith(\"Cannot import schemas while in an indirect change scope\");\n\n await b1.importSchemaStrings([schema]);\n await b1.pushChanges({ description: \"import schema\" });\n });\n\n it(\"should fail to saveChanges() & pushChanges() in indirect scope\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect save push failures\");\n\n await testIModel.insertElement(b1Txn);\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.saveChanges();\n })).to.be.rejectedWith(\"Cannot save changes while in an indirect change scope\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.saveChanges();\n })).to.be.throws(\"Cannot save changes while in an indirect change scope\");\n\n b1Txn.saveChanges();\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.pushChanges({ description: \"test\" });\n })).to.be.rejectedWith(\"Cannot pull and apply changeset while in an indirect change scope\");\n\n await b1.pushChanges({ description: \"test\" });\n });\n\n it(\"should fail to saveFileProperty/deleteFileProperty in indirect scope\", async () => {\n // pull/push/saveFileProperty/deleteFileProperty should be called inside indirect change scope.\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect file property failures\");\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"Hello, World\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"This should fail 1\");\n })).to.be.rejectedWith(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.deleteFileProperty({ namespace: \"test\", name: \"test\" });\n })).to.be.rejectedWith(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"This should fail 2\");\n })).to.be.throws(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.deleteFileProperty({ namespace: \"test\", name: \"test\" });\n })).to.be.throws(\"Cannot save file property while in an indirect change scope\");\n\n b1Txn.saveChanges();\n });\n\n it(\"recursively calling withIndirectTxnModeAsync()\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n await chai.expect(\n b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n throw new Error(\"Test error\");\n })).rejectedWith(Error);\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n });\n it(\"should restore mutually exclusive stashes\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore mutually exclusive stashes\");\n\n // stash 1\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges(\"first\");\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash1).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 2\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(\"second\");\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash2).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 3\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(e3).to.exist;\n b1Txn.saveChanges(\"third\");\n const stash3 = await StashManager.stash({ db: b1, description: \"stash test 3\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash3).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n chai.expect(e1).not.equals(e2);\n chai.expect(e1).not.equals(e3);\n chai.expect(e2).not.equals(e3);\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(3);\n chai.expect(stashes[0].description).to.equals(\"stash test 3\");\n chai.expect(stashes[1].description).to.equals(\"stash test 2\");\n chai.expect(stashes[2].description).to.equals(\"stash test 1\");\n\n // restore stash 1\n await StashManager.restore({ db: b1, stash: stash1 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 2\n await StashManager.restore({ db: b1, stash: stash2 });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 3\n await StashManager.restore({ db: b1, stash: stash3 });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n });\n it(\"should restore stash in any order\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash any order\");\n\n // stash 1\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges(\"first\");\n // do not discard local changes\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\" });\n chai.expect(stash1).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 2\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(\"second\");\n // do not discard local changes\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\" });\n chai.expect(stash2).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 3\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(e3).to.exist;\n b1Txn.saveChanges(\"third\");\n // do not discard local changes\n const stash3 = await StashManager.stash({ db: b1, description: \"stash test 3\" });\n chai.expect(stash3).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(3);\n chai.expect(stashes[0].description).to.equals(\"stash test 3\");\n chai.expect(stashes[1].description).to.equals(\"stash test 2\");\n chai.expect(stashes[2].description).to.equals(\"stash test 1\");\n\n await b1.discardChanges({ retainLocks: true });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // restore stash 1\n await StashManager.restore({ db: b1, stash: stash1 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n\n // restore stash 2\n await StashManager.restore({ db: b1, stash: stash2 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 3\n await StashManager.restore({ db: b1, stash: stash3 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n\n });\n it(\"should restore stash when briefcase has advanced to latest changeset\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash latest changeset b1\");\n const b2Txn = startTestTxn(b2, \"restore stash latest changeset b2\");\n\n chai.expect(b1.changeset.index).to.equals(2);\n chai.expect(b2.changeset.index).to.equals(2);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n chai.expect(b1.changeset.index).to.equals(3);\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n b2Txn.saveChanges();\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n const b2Stash1 = await StashManager.stash({ db: b2, description: \"stash test 1\", discardLocalChanges: true });\n chai.expect(b2Stash1.parentChangeset.index).to.equals(2);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.undefined;\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.exist;\n chai.expect(b2.elements.tryGetElement(e2)).to.undefined;\n\n // stash restore should downgrade briefcase to older changeset as specified in stash\n await StashManager.restore({ db: b2, stash: b2Stash1 });\n chai.expect(b2.changeset.index).to.equals(2);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(b2.elements.tryGetElement(e1)).to.exist;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n await b2.pushChanges({ description: \"test\" });\n chai.expect(b2.changeset.index).to.equals(4);\n });\n it(\"restore stash that has element changed by another briefcase\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash changed element b1\");\n const b2Txn = startTestTxn(b2, \"restore stash changed element b2\");\n\n chai.expect(b1.changeset.index).to.equals(2);\n chai.expect(b2.changeset.index).to.equals(2);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n chai.expect(b1.changeset.index).to.equals(3);\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n await testIModel.updateElement(b2Txn, e1);\n b2Txn.saveChanges();\n\n chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.true;\n const b2Stash1 = await StashManager.stash({ db: b2, description: \"stash test 1\", discardLocalChanges: true });\n chai.expect(b2Stash1.parentChangeset.index).to.equals(3);\n chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.false;\n\n // stash release lock so b2 should have released lock and b1 should be able to update.\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges();\n\n // restore stash should fail because of lock not obtained on e1\n await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith(\"exclusive lock is already held\");\n\n // push b1 changes to release lock\n await b1.pushChanges({ description: `${e1} inserted` });\n\n // restore stash should fail because pull is required to obtain lock\n await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith(\"pull is required to obtain lock\");\n\n await b2.pullChanges();\n\n chai.expect(b2.changeset.index).to.equals(4);\n const elBefore = b2.elements.tryGetElementProps(e1);\n chai.expect((elBefore as any).prop1).to.equals(\"3\");\n // restore stash should succeed as now it can obtain lock\n await StashManager.restore({ db: b2, stash: b2Stash1 });\n\n const elAfter = b2.elements.tryGetElementProps(e1);\n chai.expect((elAfter as any).prop1).to.equals(\"2\");\n await b2.pushChanges({ description: `${e1} updated` });\n });\n it(\"schema change should not be stashed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"schema change should not be stashed\");\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" 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=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n <ECProperty propertyName=\"prop2\" typeName=\"string\" />\n </ECEntityClass>\n <ECEntityClass typeName=\"A1Recipe2d\">\n <BaseClass>bis:TemplateRecipe2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECRelationshipClass typeName=\"A1OwnsA1\" modifier=\"None\" strength=\"embedding\">\n <BaseClass>bis:ElementOwnsChildElements</BaseClass>\n <Source multiplicity=\"(0..1)\" roleLabel=\"owns\" polymorphic=\"true\">\n <Class class=\"a1\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is owned by\" polymorphic=\"false\">\n <Class class=\"a1\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`;\n await importSchemaStrings(b1Txn, [schema1]);\n\n await chai.expect(StashManager.stash({ db: b1, description: \"stash test 1\" })).to.not.rejectedWith(\"Bad Arg: Pending schema changeset stashing is not currently supported\");\n });\n it(\"abort rebase\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebase b1\");\n const b2Txn = startTestTxn(b2, \"abort rebase b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n let e3 = \"\";\n b2Txn.saveChanges();\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n e3 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist; // came from incoming changeset\n chai.expect(b2.elements.tryGetElementProps(e2)).to.undefined; // was local change and reversed during rebase.\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // was insert by reCompute() but due to exception the rebase attempt was abandoned.\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined; // reset briefcase should move tip back to where it was before pull\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist; // abort should put back e2 which was only change at the time of pull\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // add by rebase so should not exist either\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n });\n it(\"calling discardChanges() from inside indirect scope is not allowed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"discard changes inside indirect scope\");\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n const p1 = b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.discardChanges();\n });\n await chai.expect(p1).to.be.rejectedWith(\"Cannot discard changes when there are indirect changes\");\n b1Txn.saveChanges();\n });\n it(\"calling discardChanges() during rebasing is not allowed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"discard changes during rebasing b1\");\n const b2Txn = startTestTxn(b2, \"discard changes during rebasing b2\");\n await testIModel.insertElement(b1Txn);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"inserted element\" });\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(b2.txns.rebaser.isAborting).is.false;\n await b2.discardChanges();\n },\n });\n\n chai.expect(b2.txns.rebaser.isAborting).is.false;\n const p1 = b2.pullChanges();\n await chai.expect(p1).to.be.rejectedWith(\"Cannot discard changes while a rebase is in progress\");\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n await b2.txns.rebaser.abort();\n });\n it(\"getStash() should throw exception\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(() => StashManager.getStash({ db: b1, stash: \"invalid_stash\" })).to.throw(\"No stashes exist for this briefcase\");\n chai.expect(StashManager.tryGetStash({ db: b1, stash: \"invalid_stash\" })).to.be.undefined;\n });\n it(\"edge case: a indirect update can cause FK violation\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect update fk violation b1\");\n const b2Txn = startTestTxn(b2, \"indirect update fk violation b2\");\n\n const parentId = await testIModel.insertElement(b1Txn);\n const childId = await testIModel.insertElementEx(b1Txn, { parent: { id: parentId, relClassName: \"TestDomain:A1OwnsA1\" } });\n b1Txn.saveChanges(\"insert parent and child\");\n await b1.pushChanges({ description: `inserted parent ${parentId} and child ${childId}` });\n await b2.pullChanges();\n\n // b1 delete childId while b1 create a child of childId as indirect change\n await testIModel.deleteElement(b1Txn, childId);\n b1Txn.saveChanges(\"delete child\");\n // no exclusive lock required on child1\n const grandChildId = await testIModel.insertElementEx(b2Txn, { parent: { id: childId, relClassName: \"TestDomain:A1OwnsA1\" }, markAsIndirect: true });\n b2Txn.saveChanges(\"delete child and insert grandchild\");\n\n await b1.pushChanges({ description: `deleted child ${childId}` });\n\n // should fail to pull and rebase changes.\n await chai.expect(b2.pushChanges({ description: `deleted child ${childId} and inserted grandchild ${grandChildId}` }))\n .to.be.rejectedWith(\"Foreign key conflicts in ChangeSet. Aborting rebase.\");\n });\n\n it(\"ECSqlReader unable to read updates after saveChanges()\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"ecsql reader updates after saveChanges\");\n const findElement = async (id: Id64String) => {\n const reader = b1.createQueryReader(`SELECT ECInstanceId, ec_className(ECClassId), Prop1 FROM ts.A1 WHERE ECInstanceId = ${id}`, QueryBinder.from([id]));\n if (await reader.step())\n return { id: reader.current[0], className: reader.current[1], prop1: reader.current[2] };\n return undefined;\n }\n\n const runQuery = async (query: string) => {\n const reader = b1.createQueryReader(query);\n let rows = 0;\n while (await reader.step()) {\n rows++;\n }\n return rows;\n }\n const runQueryParallel = async (query: string, times: number = 1) => {\n return Promise.all(new Array(times).fill(query).map(runQuery));\n }\n\n // Following query have open cached statement against BisCore.Element that will prevent\n // updates from being visible until the statement is finalized.\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e1)).to.be.undefined;\n b1Txn.saveChanges(\"insert element\");\n\n const e1Props = await findElement(e1);\n chai.expect(e1Props).to.exist;\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e2)).to.be.undefined;\n b1Txn.saveChanges(\"insert second element\");\n\n const e2Props = await findElement(e2);\n chai.expect(e2Props).to.exist;\n\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e3)).to.be.undefined;\n b1Txn.saveChanges(\"insert third element\");\n\n const e3Props = await findElement(e3);\n chai.expect(e3Props).to.exist;\n });\n it(\"enum txn changes in recompute\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"enum txn changes in recompute b1\");\n const b2Txn = startTestTxn(b2, \"enum txn changes in recompute b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n let txnVerified = 0;\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (txn: TxnProps): Promise<void> => {\n const reader = SqliteChangesetReader.openTxn({ txnId: txn.id, db: b2, disableSchemaCheck: true });\n const adaptor = new ChangesetECAdaptor(reader);\n adaptor.acceptClass(\"TestDomain:a1\");\n const ids = new Set<Id64String>();\n while (adaptor.step()) {\n if (!adaptor.reader.isIndirect)\n ids.add(adaptor.inserted?.ECInstanceId || adaptor.deleted?.ECInstanceId as Id64String);\n }\n adaptor.close();\n\n if (txn.props.description === \"first change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000001\"]);\n txnVerified++;\n } else if (txn.props.description === \"second change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000003\"]);\n txnVerified++;\n } else if (txn.props.description === \"third change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000005\"]);\n txnVerified++;\n } else {\n txnVerified++;\n }\n },\n });\n await b2.pullChanges();\n chai.expect(txnVerified).to.equal(3);\n });\n\n it(\"before and after rebase events\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"before and after rebase events b1\");\n const b2Txn = startTestTxn(b2, \"before and after rebase events b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n const events = {\n onRebase: {\n beginCount: 0,\n endCount: 0,\n beginTxns: [] as TxnProps[],\n },\n onRebaseTxn: {\n beginTxns: [] as TxnProps[],\n endTxns: [] as TxnProps[],\n },\n rebaseHandler: {\n shouldReinstate: [] as TxnProps[],\n recompute: [] as TxnProps[],\n },\n pullMerge: {\n beginCount: 0,\n endCount: 0,\n beginChangeset: [] as ChangesetIdWithIndex[],\n endChangeset: [] as ChangesetIdWithIndex[],\n },\n applyIncomingChanges: {\n beginCount: 0,\n endCount: 0,\n beginChangesets: [] as ChangesetProps[],\n endChangesets: [] as ChangesetProps[],\n },\n reverseLocalChanges: {\n beginCount: 0,\n endCount: 0,\n txns: [] as TxnProps[],\n },\n downloadChangesets: {\n beginCount: 0,\n endCount: 0,\n },\n };\n\n const resetEvent = () => {\n events.onRebase.beginCount = 0;\n events.onRebase.endCount = 0;\n events.onRebase.beginTxns = [];\n events.onRebaseTxn.beginTxns = [];\n events.onRebaseTxn.endTxns = [];\n events.rebaseHandler.shouldReinstate = [];\n events.rebaseHandler.recompute = [];\n events.pullMerge.beginCount = 0;\n events.pullMerge.endCount = 0;\n events.pullMerge.beginChangeset = [];\n events.pullMerge.endChangeset = [];\n events.applyIncomingChanges.beginCount = 0;\n events.applyIncomingChanges.endCount = 0;\n events.applyIncomingChanges.beginChangesets = [];\n events.applyIncomingChanges.endChangesets = [];\n events.reverseLocalChanges.beginCount = 0;\n events.reverseLocalChanges.endCount = 0;\n events.reverseLocalChanges.txns = [];\n events.downloadChangesets.beginCount = 0;\n events.downloadChangesets.endCount = 0;\n };\n\n // onPullMergeXXXX\n b2.txns.rebaser.onPullMergeBegin.addListener((changeset: ChangesetIdWithIndex) => {\n events.pullMerge.beginCount++;\n events.pullMerge.beginChangeset.push(changeset);\n });\n\n b2.txns.rebaser.onPullMergeEnd.addListener((changeset: ChangesetIdWithIndex) => {\n events.pullMerge.endCount++;\n events.pullMerge.endChangeset.push(changeset);\n });\n\n // onApplyIncomingChangesXXXX\n b2.txns.rebaser.onApplyIncomingChangesBegin.addListener((changesets: ChangesetProps[]) => {\n events.applyIncomingChanges.beginCount++;\n events.applyIncomingChanges.beginChangesets.push(...changesets);\n });\n\n\n b2.txns.rebaser.onApplyIncomingChangesEnd.addListener((changesets: ChangesetProps[]) => {\n events.applyIncomingChanges.endCount++;\n events.applyIncomingChanges.endChangesets.push(...changesets);\n });\n\n // onReverseLocalChangesXXXX\n b2.txns.rebaser.onReverseLocalChangesBegin.addListener(() => {\n events.reverseLocalChanges.beginCount++;\n });\n\n b2.txns.rebaser.onReverseLocalChangesEnd.addListener((txns: TxnProps[]) => {\n events.reverseLocalChanges.endCount++;\n removePropertyRecursive(txns, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.reverseLocalChanges.txns.push(...txns);\n });\n\n // onDownloadChangesetsXXXX\n b2.txns.rebaser.onDownloadChangesetsBegin.addListener(() => {\n events.downloadChangesets.beginCount++;\n });\n\n b2.txns.rebaser.onDownloadChangesetsEnd.addListener(() => {\n events.downloadChangesets.endCount++;\n });\n\n // onRebaseXXXX\n b2.txns.rebaser.onRebaseBegin.addListener((txns: TxnProps[]) => {\n events.onRebase.beginCount++;\n removePropertyRecursive(txns, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebase.beginTxns.push(...txns);\n });\n\n b2.txns.rebaser.onRebaseEnd.addListener(() => {\n events.onRebase.endCount++;\n });\n\n // onRebaseTxnXXXX\n b2.txns.rebaser.onRebaseTxnBegin.addListener((txn: TxnProps) => {\n removePropertyRecursive(txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebaseTxn.beginTxns.push(txn);\n });\n\n b2.txns.rebaser.onRebaseTxnEnd.addListener((txn: TxnProps) => {\n removePropertyRecursive(txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebaseTxn.endTxns.push(txn);\n });\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n // shouldReinstate\n removePropertyRecursive(_txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.rebaseHandler.shouldReinstate.push(_txn);\n return true;\n },\n recompute: async (_txn: TxnProps): Promise<void> => {\n // recompute\n removePropertyRecursive(_txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.rebaseHandler.recompute.push(_txn);\n },\n });\n\n resetEvent();\n await b2.pullChanges();\n // pullMerge events\n chai.expect(events.pullMerge.beginCount).to.equal(1);\n chai.expect(events.pullMerge.endCount).to.equal(1);\n chai.expect((events.pullMerge.beginChangeset[0].index)).to.equal(3);\n chai.expect((events.pullMerge.endChangeset[0].index)).to.equal(4);\n\n // applyIncomingChanges events\n chai.expect(events.applyIncomingChanges.beginCount).to.equal(1);\n chai.expect(events.applyIncomingChanges.endCount).to.equal(1);\n chai.expect(events.applyIncomingChanges.beginChangesets.map((cs) => cs.index)).to.deep.equal([4]);\n chai.expect(events.applyIncomingChanges.endChangesets.map((cs) => cs.index)).to.deep.equal([4]);\n\n // downloadChangesets events\n chai.expect(events.downloadChangesets.beginCount).to.equal(1);\n chai.expect(events.downloadChangesets.endCount).to.equal(1);\n\n // reverseLocalChanges events\n chai.expect(events.reverseLocalChanges.beginCount).to.equal(1);\n chai.expect(events.reverseLocalChanges.endCount).to.equal(1);\n chai.expect(events.reverseLocalChanges.txns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n // rebase events\n chai.expect(events.onRebase.beginCount).to.equal(1);\n chai.expect(events.onRebase.endCount).to.equal(1);\n chai.expect(events.onRebase.beginTxns).to.deep.equal(\n [\n {\n grouped: false,\n id: \"0x100000000\",\n nextId: \"0x100000001\",\n props: {\n description: \"first change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000001\",\n nextId: \"0x100000002\",\n prevId: \"0x100000000\",\n props: {\n description: \"second change\",\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000002\",\n prevId: \"0x100000001\",\n props: {\n description: \"third change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n }\n ]\n );\n\n chai.expect(events.onRebaseTxn.beginTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n chai.expect(events.onRebaseTxn.endTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n chai.expect(events.rebaseHandler.shouldReinstate.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n chai.expect(events.rebaseHandler.recompute.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"fourth change\");\n\n resetEvent();\n await b2.pullChanges();\n\n chai.expect(events.onRebase.beginCount).to.equal(1);\n chai.expect(events.onRebase.endCount).to.equal(1);\n chai.expect(events.onRebase.beginTxns).to.deep.equal([\n {\n grouped: false,\n id: \"0x100000000\",\n nextId: \"0x100000001\",\n props: {\n description: \"first change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000001\",\n nextId: \"0x100000002\",\n prevId: \"0x100000000\",\n props: {\n description: \"second change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000002\",\n nextId: \"0x100000003\",\n prevId: \"0x100000001\",\n props: {\n description: \"third change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000003\",\n prevId: \"0x100000002\",\n props: {\n description: \"fourth change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n }\n ]);\n chai.expect(events.onRebaseTxn.beginTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n chai.expect(events.onRebaseTxn.endTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n\n chai.expect(events.rebaseHandler.shouldReinstate.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n chai.expect(events.rebaseHandler.recompute.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n });\n it(\"onModelGeometryChanged() not fired during rebase/pullMerge with no local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b2Txn = startTestTxn(b2, \"model geometry changed no local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).is.undefined;\n chai.expect(events.modelGeometryChanged.length).to.equal(0);\n });\n it(\"onModelGeometryChanged() fired during rebase with geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed geometric local change b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed geometric local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n onGeometryChanged: [] as ModelGeometryChangesProps[][],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n events.onGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n b1.txns.onGeometryChanged.addListener((changes: ModelGeometryChangesProps[]) => {\n events.onGeometryChanged.push(changes);\n });\n\n clearEvents();\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(`insert element ${e1} and ${e2}`);\n\n chai.expect(events.modelGeometryChanged.length).to.equal(1);\n chai.expect(events.modelGeometryChanged[0].length).to.equal(1);\n chai.expect(events.modelGeometryChanged[0][0].id).to.equal(\"0x20000000001\");\n chai.assert(Guid.isGuid(events.modelGeometryChanged[0][0].guid));\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2);\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).to.not.equal(geomGuidAfterPull);\n chai.expect(events.modelGeometryChanged.length).to.equal(4);\n });\n it(\"onModelGeometryChanged() fired during rebase with non-geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed non geometric local change b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed non geometric local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n },\n });\n\n await pushChangeFromB2();\n await testIModel.insertRecipe2d(b1Txn);\n b1Txn.saveChanges();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).to.exist;\n chai.expect(events.modelGeometryChanged.length).to.equal(1);\n });\n it(\"onModelGeometryChanged() fired during rebase with geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed geometric local recipe b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed geometric local recipe b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertRecipe2d(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n onGeometryChanged: [] as ModelGeometryChangesProps[][],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n events.onGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n b1.txns.onGeometryChanged.addListener((changes: ModelGeometryChangesProps[]) => {\n events.onGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n await testIModel.insertElement(b1Txn);\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).is.undefined;\n chai.expect(events.modelGeometryChanged.length).to.equal(0);\n });\n it(\"rebase multi txn\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"rebase multi txn b1\");\n const b2Txn = startTestTxn(b2, \"rebase multi txn b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n chai.expect(b2.txns.beginMultiTxnOperation()).to.be.equals(DbResult.BE_SQLITE_OK);\n let elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n chai.expect(b2.txns.endMultiTxnOperation()).to.be.equals(DbResult.BE_SQLITE_OK);\n b2Txn.saveChanges();\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n let txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(false);\n\n // reverse single txn 0x100000003\n chai.expect(b2.txns.reverseSingleTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reverse multi txn. should reverse 0x100000000, 0x100000001 & 0x100000002\n chai.expect(b2.txns.reverseSingleTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(true);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(true);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(true);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reinstate the transaction\n chai.expect(b2.txns.isRedoPossible).to.be.equals(true);\n chai.expect(b2.txns.reinstateTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reinstate the transaction\n chai.expect(b2.txns.isRedoPossible).to.be.equals(true);\n chai.expect(b2.txns.reinstateTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(false);\n\n chai.expect(b2.txns.isRedoPossible).to.be.equals(false);\n\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n const recomputeTxnIds = [] as TxnIdString[];\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (txn: TxnProps): Promise<void> => {\n recomputeTxnIds.push(txn.id);\n },\n });\n\n await b2.pullChanges();\n\n chai.expect(recomputeTxnIds).to.deep.equals([\n \"0x100000000\",\n \"0x100000001\",\n \"0x100000002\",\n \"0x100000003\",\n ]);\n });\n it(\"abort rebase should discard in-memory changes\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebase discard memory b1\");\n const b2Txn = startTestTxn(b2, \"abort rebase discard memory b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n let e3 = \"\";\n b2Txn.saveChanges();\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n e3 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist; // came from incoming changeset\n chai.expect(b2.elements.tryGetElementProps(e2)).to.undefined; // was local change and reversed during rebase.\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // was insert by reCompute() but due to exception the rebase attempt was abandoned.\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n // make temp change\n b2Txn.saveFileProperty({ name: \"test\", namespace: \"testNamespace\" }, \"testValue\");\n chai.expect(b2.txns.hasUnsavedChanges).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n // should abort with unsaved local changes\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined; // reset briefcase should move tip back to where it was before pull\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist; // abort should put back e2 which was only change at the time of pull\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // add by rebase so should not exist either\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n });\n it(\"two users insert same ElementGroupsMembers instance\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"same ElementGroupsMembers b1\");\n const b2Txn = startTestTxn(b2, \"same ElementGroupsMembers b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn);\n const e3 = await testIModel.insertElement(b1Txn);\n const e4 = await testIModel.insertElement(b1Txn);\n\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n chai.expect(e3).to.exist;\n chai.expect(e4).to.exist;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted elements` });\n await b2.pullChanges();\n\n const r1 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 10).toJSON());\n const r2 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e3, e4, 20).toJSON());\n chai.expect(r1).to.exist;\n chai.expect(r2).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted relationship` });\n\n const r3 = b2Txn.insertRelationship(ElementGroupsMembers.create(b2, e1, e2, 10).toJSON());\n const r4 = b2Txn.insertRelationship(ElementGroupsMembers.create(b2, e3, e4, 20).toJSON());\n chai.expect(r3).to.exist;\n chai.expect(r4).to.exist;\n b2Txn.saveChanges();\n await b2.pushChanges({ description: `inserted relationship` });\n await b2.pullChanges();\n\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.exist;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r3)).to.be.undefined;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r4)).to.be.undefined;\n\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.exist;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r3)).to.be.undefined;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r4)).to.be.undefined;\n });\n it(\"one user update and other delete the link table relationships\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"relationship update delete b1\");\n const b2Txn = startTestTxn(b2, \"relationship update delete b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn);\n\n const r1 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 10).toJSON());\n const r2 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 20).toJSON());\n\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n chai.expect(r1).to.exist;\n chai.expect(r2).to.exist;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted elements and relationship` });\n await b2.pullChanges();\n\n\n // intentionally change memberPriority to 10 for which there is another relationship already exists.\n chai.expect(() => b2Txn.updateRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2,\n memberPriority: 20\n } as RelationshipProps)).to.throws(\"error updating relationship\");\n\n\n b2Txn.updateRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2,\n memberPriority: 60\n } as RelationshipProps);\n\n b1Txn.deleteRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2\n } as RelationshipProps);\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `deleted relationship` });\n\n b2Txn.saveChanges();\n await b2.pushChanges({ description: `updated relationship` });\n\n await b2.pullChanges();\n await b1.pullChanges();\n\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.be.undefined;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n });\n it(\"aborting rebaser in middle of rebase session where at least one txn is successfully rebased (used to cause crash)\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebaser mid session b1\");\n const b2Txn = startTestTxn(b2, \"abort rebaser mid session b2\");\n\n const createTxn = async (txn: EditTxn) => {\n const id = await testIModel.insertElement(txn);\n chai.expect(id).is.exist;\n txn.saveChanges(`created element ${id}`);\n return id;\n };\n\n const e1 = await createTxn(b1Txn);\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await createTxn(b2Txn);\n const e3 = await createTxn(b2Txn);\n const e4 = await createTxn(b2Txn);\n\n let e5 = \"\";\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n if (txnProps.id === \"0x100000001\") {\n e5 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n }\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.be.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.be.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n await chai.expect(createTxn(b2Txn)).to.be.rejectedWith(`Could not save changes (created element 0x40000000004)`);\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.exist;\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n // make temp change\n b2Txn.saveFileProperty({ name: \"test\", namespace: \"testNamespace\" }, \"testValue\");\n chai.expect(b2.txns.hasUnsavedChanges).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n\n // should abort with unsaved local changes\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.be.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.be.undefined;\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => { },\n });\n\n const e6 = await createTxn(b2Txn);\n b2Txn.saveChanges(`created element ${e6}`);\n chai.expect(b2.txns.getCurrentTxnId()).to.equal(\"0x100000004\");\n chai.expect(b2.txns.getLastSavedTxnProps()?.id).to.equal(`0x100000003`);\n\n await b2.pullChanges();\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n const e7 = await createTxn(b2Txn);\n b2Txn.saveChanges(`created element ${e7}`);\n chai.expect(b2.txns.getCurrentTxnId()).to.equal(\"0x100000005\");\n chai.expect(b2.txns.getLastSavedTxnProps()?.id).to.equal(`0x100000004`);\n await b2.pushChanges({ description: \"pushed after rebase aborted\" });\n\n await b1.pullChanges();\n chai.expect(b1.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e7)).to.exist;\n });\n it(\"changeset DDL error are ignored and ec_* tables are used to reconstruct the sqlite tables\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"changeset ddl reconstruction b1\");\n const iModelId = testIModel.iModelId;\n const targetDir = path.join(KnownTestLocations.outputDir, iModelId, \"changesets\");\n let ver = 0;\n let props = 0;\n const tblGeom2d = \"bis_GeometricElement2d\";\n const geom2dBaseColumnList = [\n \"ElementId\",\n \"ECClassId\",\n \"CategoryId\",\n \"Origin_X\",\n \"Origin_Y\",\n \"Rotation\",\n \"BBoxLow_X\",\n \"BBoxLow_Y\",\n \"BBoxHigh_X\",\n \"BBoxHigh_Y\",\n \"GeometryStream\",\n \"TypeDefinitionId\",\n \"TypeDefinitionRelECClassId\",\n \"js1\",\n \"js2\",\n ];\n\n const generateSchema = (noOfNewPropsToAdd: number) => {\n props += noOfNewPropsToAdd;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain1\" alias=\"ts1\" version=\"01.00.${ver++}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"test\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n ${Array.from({ length: props - 1 }, (_, i) => `<ECProperty propertyName=\"prop${i + 2}\" typeName=\"string\" />`).join(\"\\n \")}\n </ECEntityClass>\n </ECSchema>`;\n };\n\n const getColumnNames = (b: BriefcaseDb, tableName: string) => {\n return b.withSqliteStatement(`PRAGMA table_info(${tableName})`, (stmt) => {\n const columnNames: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n columnNames.push(stmt.getValue(1).getString());\n }\n return columnNames;\n });\n };\n\n const withLatestChangeset = async (cb: (reader: SqliteChangesetReader) => Promise<void>) => {\n const csInfo = await HubMock.getLatestChangeset({ iModelId });\n const info = await HubMock.downloadChangeset({\n iModelId,\n changeset: { id: csInfo.id },\n targetDir,\n });\n\n const reader = SqliteChangesetReader.openFile({ db: b1, fileName: info.pathname });\n try {\n await cb(reader);\n } finally {\n reader.close();\n }\n };\n\n // Verify initial columns\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals(geom2dBaseColumnList);\n chai.expect(getColumnNames(b2, tblGeom2d)).deep.equals(geom2dBaseColumnList);\n\n // Import schema that add 5 new properties that should add 3 new shared columns\n await importSchemaStrings(b1Txn, [generateSchema(5)]);\n await b1.pushChanges({ description: `imported schema version 1.0.${ver - 1}` });\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\"]);\n\n //verify changeset has schema changes\n await withLatestChangeset(async (reader) => {\n const schemaChanges = reader.getDdlChanges()?.split(\";\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js3] BLOB\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js4] BLOB\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js5] BLOB\");\n });\n\n await b2.pullChanges();\n chai.expect(getColumnNames(b2, \"bis_GeometricElement2d\")).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\"]);\n\n\n // Import schema that add 5 new properties that should add 3 new shared columns\n await importSchemaStrings(b1Txn, [generateSchema(1)]);\n await b1.pushChanges({ description: `imported schema version 1.0.${ver - 1}` });\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\", \"js6\"]);\n //verify changeset has schema changes\n await withLatestChangeset(async (reader) => {\n const schemaChanges = reader.getDdlChanges()?.split(\";\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js6] BLOB\");\n });\n\n // delete the table so DDL apply should fail\n b2[_nativeDb].executeSql(`DROP TABLE ${tblGeom2d}`)\n\n // this would fail before this PR but should succeed as DDL error are ignored and table reconstruction is attempted using ec_* tables\n await b2.pullChanges();\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b2, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\", \"js6\"]);\n\n b1.close();\n b2.close();\n });\n });\n}\n"]}
1
+ {"version":3,"file":"Rebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/Rebase.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, Guid, Id64String } from \"@itwin/core-bentley\";\nimport { ChangesetIdWithIndex, ChangesetProps, Code, GeometricElement2dProps, GeometricModelProps, GeometryStreamBuilder, IModel, ModelGeometryChangesProps, ModelIdAndGeometryGuid, QueryBinder, RelatedElementProps, RelationshipProps, SubCategoryAppearance, TxnProps } from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { Suite } from \"mocha\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChangesetECAdaptor, ChannelControl, DrawingCategory, ElementGroupsMembers, SqliteChangesetReader, TxnIdString } from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { StashManager } from \"../../StashManager\";\nimport { EditTxn } from \"../../EditTxn\";\nimport { TestUtils } from \"../TestUtils\";\nimport { existsSync, unlinkSync, writeFileSync } from \"fs\";\nimport * as path from \"path\";\nimport { LineSegment3d, Point3d } from \"@itwin/core-geometry\";\nchai.use(chaiAsPromised);\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"rebase\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\n\nclass TestIModel {\n public iModelId: Id64String = \"\";\n public drawingModelId: Id64String = \"\";\n public drawingCategoryId: Id64String = \"\";\n public briefcases: BriefcaseDb[] = [];\n private _data = 0;\n private _nextAccessToken = 1;\n public constructor() { }\n\n private acquireAccessToken(): string {\n return `user${this._nextAccessToken++}`;\n }\n\n public async startup() {\n HubMock.startup(\"TestIModel\", KnownTestLocations.outputDir);\n const accessToken = this.acquireAccessToken();\n this.iModelId = await HubMock.createNewIModel({ accessToken, iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken, iTwinId: HubMock.iTwinId, iModelId: this.iModelId });\n const b1Txn = startTestTxn(b1, \"rebase startup\");\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" 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=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECEntityClass typeName=\"A1Recipe2d\">\n <BaseClass>bis:TemplateRecipe2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECRelationshipClass typeName=\"A1OwnsA1\" modifier=\"None\" strength=\"embedding\">\n <BaseClass>bis:ElementOwnsChildElements</BaseClass>\n <Source multiplicity=\"(0..1)\" roleLabel=\"owns\" polymorphic=\"true\">\n <Class class=\"a1\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is owned by\" polymorphic=\"false\">\n <Class class=\"a1\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`;\n\n await importSchemaStrings(b1Txn, [schema1]);\n chai.expect(b1.txns.hasPendingTxns).to.be.true\n await b1.pushChanges({ description: \"schema1\" });\n const codeProps = Code.createEmpty();\n codeProps.value = \"DrawingModel\";\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n this.drawingModelId = IModelTestUtils.createAndInsertDrawingPartitionAndModel(b1Txn, codeProps, true)[1];\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === drawingCategoryId)\n drawingCategoryId = DrawingCategory.insert(b1Txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n this.drawingCategoryId = drawingCategoryId;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"drawing category\" });\n b1.close();\n }\n public async openBriefcase(): Promise<BriefcaseDb> {\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: this.acquireAccessToken(), iTwinId: HubMock.iTwinId, iModelId: this.iModelId });\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n b[_nativeDb].saveChanges();\n this.briefcases.push(b);\n return b;\n }\n public async insertRecipe2d(txn: EditTxn, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [IModel.dictionaryId] });\n const baseProps = {\n classFullName: \"TestDomain:A1Recipe2d\",\n model: IModel.dictionaryId,\n code: Code.createEmpty(),\n };\n\n let id: Id64String = \"\";\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement({ ...baseProps, prop1: `${this._data++}` } as any);\n });\n return id;\n }\n return txn.insertElement({ ...baseProps, prop1: `${this._data++}` } as any);\n }\n public async updateRecipe2d(txn: EditTxn, id: Id64String, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [IModel.dictionaryId], exclusive: [id] });\n const elProps = b.elements.getElementProps(id);\n\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n });\n } else {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n }\n }\n public async insertElement(txn: EditTxn, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId] });\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 5.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n\n const baseProps = {\n classFullName: \"TestDomain:a1\",\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n geom: builder.geometryStream,\n prop1: `${this._data++}`,\n } as GeometricElement2dProps & { prop1: string };\n\n let id: Id64String = \"\";\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement(baseProps);\n });\n return id;\n }\n baseProps.prop1 = `${this._data++}`;\n return txn.insertElement(baseProps);\n }\n public async insertElementEx(txn: EditTxn, args?: { prop1?: string, markAsIndirect?: true, parent?: RelatedElementProps }) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId] });\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 5.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n\n const props: GeometricElement2dProps & { prop1: string } = {\n classFullName: \"TestDomain:a1\",\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n parent: args?.parent,\n geom: builder.geometryStream,\n prop1: args?.prop1 ?? `${this._data++}`\n };\n\n let id: Id64String = \"\";\n if (args?.markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n id = txn.insertElement(props);\n });\n return id;\n }\n return txn.insertElement(props);\n }\n public async updateElement(txn: EditTxn, id: Id64String, markAsIndirect?: true, updateGeom?: boolean) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });\n const elProps = b.elements.getElementProps<GeometricElement2dProps & { prop1: string }>(id);\n\n if (updateGeom) {\n const builder = new GeometryStreamBuilder();\n const p1 = Point3d.createZero();\n const p2 = Point3d.createFrom({ x: Math.random() * 10.0 + 10.0, y: 0.0, z: 0.0 });\n const circle = LineSegment3d.create(p1, p2);\n builder.appendGeometry(circle);\n elProps.geom = builder.geometryStream;\n }\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n });\n } else {\n txn.updateElement({ ...elProps, prop1: `${this._data++}` });\n }\n }\n public async deleteElement(txn: EditTxn, id: Id64String, markAsIndirect?: true) {\n const b = txn.iModel as BriefcaseDb;\n await b.locks.acquireLocks({ shared: [this.drawingModelId], exclusive: [id] });\n if (markAsIndirect) {\n b.txns.withIndirectTxnMode(() => {\n txn.deleteElement(id);\n });\n } else {\n txn.deleteElement(id);\n }\n }\n public async shutdown(): Promise<void> {\n this.briefcases.forEach(b => b.close());\n HubMock.shutdown();\n }\n}\n\nconst removePropertyRecursive = (obj: any, prop: string) => {\n if (obj && typeof obj === \"object\") {\n Object.keys(obj).forEach((key) => {\n if (key === prop) {\n delete obj[key];\n } else {\n removePropertyRecursive(obj[key], prop);\n }\n });\n }\n};\n\nfor (const enableSemanticRebase of [false, true]) {\n describe(`rebase changes & stashing api (useSemanticRebase=${enableSemanticRebase})`, function (this: Suite) {\n let testIModel: TestIModel;\n before(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ useSemanticRebase: enableSemanticRebase });\n });\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n this.beforeEach(async () => {\n testIModel = new TestIModel();\n await testIModel.startup();\n });\n this.afterEach(async () => {\n await testIModel.shutdown();\n });\n it(\"save changes args\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"save changes args\");\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges({\n source: \"test\",\n description: \"test description\",\n appData: {\n test: \"test\",\n foo: [1, 2, 3],\n bar: { baz: \"qux\" }\n }\n });\n\n let lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).to.be.equals(\"test\");\n chai.expect(lastTxn.props.description).to.be.equals(\"test description\");\n chai.expect(lastTxn.props.appData).to.not.be.undefined;\n chai.expect(lastTxn.props.appData?.test).to.be.eq(\"test\");\n chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([1, 2, 3]);\n chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: \"qux\" });\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.undefined;\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000000');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges({\n source: \"test2\",\n description: \"test description 2\",\n appData: {\n test: \"test 2\",\n foo: [11, 12, 13],\n bar: { baz: \"qux2\" }\n }\n });\n\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).to.be.equals(\"test2\");\n chai.expect(lastTxn.props.description).to.be.equals(\"test description 2\");\n chai.expect(lastTxn.props.appData).to.not.be.undefined;\n chai.expect(lastTxn.props.appData?.test).to.be.eq(\"test 2\");\n chai.expect(lastTxn.props.appData?.foo).to.be.deep.eq([11, 12, 13]);\n chai.expect(lastTxn.props.appData?.bar).to.be.deep.eq({ baz: \"qux2\" });\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.equal('0x100000000');\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000001');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(\"new element\");\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(lastTxn);\n if (lastTxn) {\n chai.expect(lastTxn.props.source).is.undefined;\n chai.expect(lastTxn.props.description).to.be.equals(\"new element\");\n chai.expect(lastTxn.props.appData).to.be.undefined;\n chai.expect(lastTxn.nextId).to.be.undefined;\n chai.expect(lastTxn.prevId).to.be.equal('0x100000001');\n chai.expect(lastTxn.type).to.be.eq(\"Data\");\n chai.expect(lastTxn.id).to.be.eq('0x100000002');\n chai.expect(lastTxn.reversed).to.be.false;\n chai.expect(lastTxn.grouped).to.be.false;\n }\n\n await b1.pushChanges({ description: \"new element\" });\n chai.expect(b1.txns.isUndoPossible).is.false;\n chai.expect(b1.txns.isRedoPossible).is.false;\n lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isUndefined(lastTxn);\n });\n\n it(\"direct / indirect\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"direct indirect\");\n const directElId = await testIModel.insertElement(b1Txn);\n const indirectElId = await testIModel.insertElement(b1Txn, true);\n chai.expect(directElId).to.not.be.undefined;\n chai.expect(indirectElId).to.not.be.undefined;\n b1Txn.saveChanges({ description: \"insert element 1 direct and 1 indirect\" });\n const txn = b1.txns.getLastSavedTxnProps();\n chai.assert.isDefined(txn);\n if (txn) {\n let checkCount = 0;\n const reader = SqliteChangesetReader.openTxn({ txnId: txn?.id, db: b1 });\n while (reader.step()) {\n if (reader.primaryKeyValues.length === 0) continue;\n if (reader.tableName !== \"bis_Element\") continue;\n const iid = reader.primaryKeyValues[0] as Id64String;\n if (iid === directElId) {\n chai.expect(reader.isIndirect).to.be.false;\n }\n if (iid === indirectElId) {\n chai.expect(reader.isIndirect).to.be.true;\n }\n checkCount++;\n }\n chai.expect(checkCount).to.be.equals(2);\n }\n\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n chai.expect(b1.txns.isUndoPossible).is.false;\n chai.expect(b1.txns.isRedoPossible).is.false;\n const lastTxn = b1.txns.getLastSavedTxnProps();\n chai.assert.isUndefined(lastTxn);\n });\n\n it(\"rebase handler\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"rebase handler b1\");\n const b2Txn = startTestTxn(b2, \"rebase handler b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps): Promise<void> => {\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n },\n });\n await b1.pullChanges();\n });\n it(\"stash & drop\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"stash drop\");\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n const e2 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`first`);\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges(`second`);\n await testIModel.deleteElement(b1Txn, e2);\n b1Txn.saveChanges(`third`);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`fourth`);\n\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\" });\n\n chai.expect(stash1).to.exist;\n chai.assert(Guid.isGuid(stash1.id));\n chai.expect(stash1.description).to.equals(\"stash test 1\");\n chai.expect(stash1.briefcaseId).equals(b1.briefcaseId);\n chai.expect(stash1.iModelId).to.equals(b1.iModelId);\n chai.expect(stash1.timestamp).to.exist;\n chai.expect(stash1.description).to.exist;\n chai.expect(stash1.hash).length(64);\n chai.expect(stash1.parentChangeset).to.exist;\n chai.expect(stash1.idSequences.element).to.equals(\"0x30000000004\");\n chai.expect(stash1.idSequences.instance).to.equals(\"0x30000000000\");\n chai.expect(stash1.acquiredLocks).equals(4);\n chai.expect(stash1.txns).to.exist;\n\n chai.expect(stash1.txns).to.have.lengthOf(4);\n chai.expect(stash1.txns[0].props.description).to.equal(\"first\");\n chai.expect(stash1.txns[1].props.description).to.equal(\"second\");\n chai.expect(stash1.txns[2].props.description).to.equal(\"third\");\n chai.expect(stash1.txns[3].props.description).to.equal(\"fourth\");\n\n chai.expect(stash1.txns[0].id).to.equals(\"0x100000000\");\n chai.expect(stash1.txns[1].id).to.equals(\"0x100000001\");\n chai.expect(stash1.txns[2].id).to.equals(\"0x100000002\");\n chai.expect(stash1.txns[3].id).to.equals(\"0x100000003\");\n\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`fifth`);\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges(`sixth`);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges(`seventh`);\n\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\" });\n chai.expect(stash2).to.exist;\n chai.expect(stash2.description).to.equals(\"stash test 2\");\n chai.expect(stash2.hash).length(64);\n chai.expect(stash2.parentChangeset).to.exist;\n chai.expect(stash2.idSequences.element).to.equals(\"0x30000000006\");\n chai.expect(stash2.idSequences.instance).to.equals(\"0x30000000000\");\n chai.expect(stash2.acquiredLocks).equals(4);\n chai.expect(stash2.txns).to.exist;\n\n chai.expect(stash2.txns).to.have.lengthOf(7);\n chai.expect(stash2.txns[0].props.description).to.equal(\"first\");\n chai.expect(stash2.txns[1].props.description).to.equal(\"second\");\n chai.expect(stash2.txns[2].props.description).to.equal(\"third\");\n chai.expect(stash2.txns[3].props.description).to.equal(\"fourth\");\n chai.expect(stash2.txns[4].props.description).to.equal(\"fifth\");\n chai.expect(stash2.txns[5].props.description).to.equal(\"sixth\");\n chai.expect(stash2.txns[6].props.description).to.equal(\"seventh\");\n\n chai.expect(stash2.txns[0].id).to.equals(\"0x100000000\");\n chai.expect(stash2.txns[1].id).to.equals(\"0x100000001\");\n chai.expect(stash2.txns[2].id).to.equals(\"0x100000002\");\n chai.expect(stash2.txns[3].id).to.equals(\"0x100000003\");\n chai.expect(stash2.txns[4].id).to.equals(\"0x100000004\");\n chai.expect(stash2.txns[5].id).to.equals(\"0x100000005\");\n chai.expect(stash2.txns[6].id).to.equals(\"0x100000006\");\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(2);\n chai.expect(stashes[0].description).to.equals(\"stash test 2\");\n chai.expect(stashes[1].description).to.equals(\"stash test 1\");\n chai.expect(stashes[0]).to.deep.equal(stash2);\n chai.expect(stashes[1]).to.deep.equal(stash1);\n\n StashManager.dropAllStashes(b1);\n chai.expect(StashManager.getStashes(b1)).to.have.lengthOf(0);\n });\n it(\"recursively calling withIndirectTxnMode()\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n chai.expect(() =>\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n throw new Error(\"Test error\");\n })).to.throw();\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n });\n it(\"should fail to importSchemas() & importSchemaStrings() in indirect scope\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect schema import failures\");\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"MySchema\" alias=\"ms1\" 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=\"my_class\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n </ECSchema>`;\n\n const schemaFile = path.join(KnownTestLocations.outputDir, \"MySchema.01.00.00.ecschema.xml\");\n if (existsSync(schemaFile)) {\n unlinkSync(schemaFile);\n }\n writeFileSync(schemaFile, schema, { encoding: \"utf8\" });\n\n b1Txn.end(\"abandon\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.importSchemas([schema]);\n })).to.be.rejectedWith(\"Cannot import schemas while in an indirect change scope\");\n\n b1Txn.start();\n b1Txn.end(\"abandon\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.importSchemaStrings([schema]);\n })).to.be.rejectedWith(\"Cannot import schemas while in an indirect change scope\");\n\n await b1.importSchemaStrings([schema]);\n await b1.pushChanges({ description: \"import schema\" });\n });\n\n it(\"should fail to saveChanges() & pushChanges() in indirect scope\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect save push failures\");\n\n await testIModel.insertElement(b1Txn);\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.saveChanges();\n })).to.be.rejectedWith(\"Cannot save changes while in an indirect change scope\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.saveChanges();\n })).to.be.throws(\"Cannot save changes while in an indirect change scope\");\n\n b1Txn.saveChanges();\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.pushChanges({ description: \"test\" });\n })).to.be.rejectedWith(\"Cannot pull and apply changeset while in an indirect change scope\");\n\n await b1.pushChanges({ description: \"test\" });\n });\n\n it(\"should fail to saveFileProperty/deleteFileProperty in indirect scope\", async () => {\n // pull/push/saveFileProperty/deleteFileProperty should be called inside indirect change scope.\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect file property failures\");\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"Hello, World\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"This should fail 1\");\n })).to.be.rejectedWith(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n await chai.expect(b1.txns.withIndirectTxnModeAsync(async () => {\n b1Txn.deleteFileProperty({ namespace: \"test\", name: \"test\" });\n })).to.be.rejectedWith(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"This should fail 2\");\n })).to.be.throws(\"Cannot save file property while in an indirect change scope\");\n\n chai.expect(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" })).to.equal(\"Hello, World\");\n\n chai.expect(() => b1.txns.withIndirectTxnMode(() => {\n b1Txn.deleteFileProperty({ namespace: \"test\", name: \"test\" });\n })).to.be.throws(\"Cannot save file property while in an indirect change scope\");\n\n b1Txn.saveChanges();\n });\n\n it(\"recursively calling withIndirectTxnModeAsync()\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n await b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n b1.txns.withIndirectTxnMode(() => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n });\n });\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n await chai.expect(\n b1.txns.withIndirectTxnModeAsync(async () => {\n chai.expect(b1.txns.getMode()).to.equal(\"indirect\");\n throw new Error(\"Test error\");\n })).rejectedWith(Error);\n\n chai.expect(b1.txns.getMode()).to.equal(\"direct\");\n });\n it(\"should restore mutually exclusive stashes\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore mutually exclusive stashes\");\n\n // stash 1\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges(\"first\");\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash1).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 2\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(\"second\");\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash2).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 3\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(e3).to.exist;\n b1Txn.saveChanges(\"third\");\n const stash3 = await StashManager.stash({ db: b1, description: \"stash test 3\", discardLocalChanges: true, retainLocks: true });\n chai.expect(stash3).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n chai.expect(e1).not.equals(e2);\n chai.expect(e1).not.equals(e3);\n chai.expect(e2).not.equals(e3);\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(3);\n chai.expect(stashes[0].description).to.equals(\"stash test 3\");\n chai.expect(stashes[1].description).to.equals(\"stash test 2\");\n chai.expect(stashes[2].description).to.equals(\"stash test 1\");\n\n // restore stash 1\n await StashManager.restore({ db: b1, stash: stash1 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 2\n await StashManager.restore({ db: b1, stash: stash2 });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 3\n await StashManager.restore({ db: b1, stash: stash3 });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n });\n it(\"should restore stash in any order\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash any order\");\n\n // stash 1\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges(\"first\");\n // do not discard local changes\n const stash1 = await StashManager.stash({ db: b1, description: \"stash test 1\" });\n chai.expect(stash1).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 2\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(\"second\");\n // do not discard local changes\n const stash2 = await StashManager.stash({ db: b1, description: \"stash test 2\" });\n chai.expect(stash2).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // stash 3\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(e3).to.exist;\n b1Txn.saveChanges(\"third\");\n // do not discard local changes\n const stash3 = await StashManager.stash({ db: b1, description: \"stash test 3\" });\n chai.expect(stash3).to.exist;\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n const stashes = StashManager.getStashes(b1);\n chai.expect(stashes).to.have.lengthOf(3);\n chai.expect(stashes[0].description).to.equals(\"stash test 3\");\n chai.expect(stashes[1].description).to.equals(\"stash test 2\");\n chai.expect(stashes[2].description).to.equals(\"stash test 1\");\n\n await b1.discardChanges({ retainLocks: true });\n chai.expect(b1.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // restore stash 1\n await StashManager.restore({ db: b1, stash: stash1 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.undefined;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n\n // restore stash 2\n await StashManager.restore({ db: b1, stash: stash2 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.undefined;\n\n // restore stash 3\n await StashManager.restore({ db: b1, stash: stash3 });\n chai.expect(b1.elements.tryGetElement(e1)).to.exist;\n chai.expect(b1.elements.tryGetElement(e2)).to.exist;\n chai.expect(b1.elements.tryGetElement(e3)).to.exist;\n\n });\n it(\"should restore stash when briefcase has advanced to latest changeset\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash latest changeset b1\");\n const b2Txn = startTestTxn(b2, \"restore stash latest changeset b2\");\n\n chai.expect(b1.changeset.index).to.equals(2);\n chai.expect(b2.changeset.index).to.equals(2);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n chai.expect(b1.changeset.index).to.equals(3);\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n b2Txn.saveChanges();\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n const b2Stash1 = await StashManager.stash({ db: b2, description: \"stash test 1\", discardLocalChanges: true });\n chai.expect(b2Stash1.parentChangeset.index).to.equals(2);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.undefined;\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.exist;\n chai.expect(b2.elements.tryGetElement(e2)).to.undefined;\n\n // stash restore should downgrade briefcase to older changeset as specified in stash\n await StashManager.restore({ db: b2, stash: b2Stash1 });\n chai.expect(b2.changeset.index).to.equals(2);\n\n chai.expect(b2.elements.tryGetElement(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(b2.elements.tryGetElement(e1)).to.exist;\n chai.expect(b2.elements.tryGetElement(e2)).to.exist;\n\n await b2.pushChanges({ description: \"test\" });\n chai.expect(b2.changeset.index).to.equals(4);\n });\n it(\"restore stash that has element changed by another briefcase\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"restore stash changed element b1\");\n const b2Txn = startTestTxn(b2, \"restore stash changed element b2\");\n\n chai.expect(b1.changeset.index).to.equals(2);\n chai.expect(b2.changeset.index).to.equals(2);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(e1).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n chai.expect(b1.changeset.index).to.equals(3);\n\n await b2.pullChanges();\n chai.expect(b2.changeset.index).to.equals(3);\n await testIModel.updateElement(b2Txn, e1);\n b2Txn.saveChanges();\n\n chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.true;\n const b2Stash1 = await StashManager.stash({ db: b2, description: \"stash test 1\", discardLocalChanges: true });\n chai.expect(b2Stash1.parentChangeset.index).to.equals(3);\n chai.expect(b2.locks.holdsExclusiveLock(e1)).to.be.false;\n\n // stash release lock so b2 should have released lock and b1 should be able to update.\n await testIModel.updateElement(b1Txn, e1);\n b1Txn.saveChanges();\n\n // restore stash should fail because of lock not obtained on e1\n await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith(\"exclusive lock is already held\");\n\n // push b1 changes to release lock\n await b1.pushChanges({ description: `${e1} inserted` });\n\n // restore stash should fail because pull is required to obtain lock\n await chai.expect(StashManager.restore({ db: b2, stash: b2Stash1 })).to.be.rejectedWith(\"pull is required to obtain lock\");\n\n await b2.pullChanges();\n\n chai.expect(b2.changeset.index).to.equals(4);\n const elBefore = b2.elements.tryGetElementProps(e1);\n chai.expect((elBefore as any).prop1).to.equals(\"3\");\n // restore stash should succeed as now it can obtain lock\n await StashManager.restore({ db: b2, stash: b2Stash1 });\n\n const elAfter = b2.elements.tryGetElementProps(e1);\n chai.expect((elAfter as any).prop1).to.equals(\"2\");\n await b2.pushChanges({ description: `${e1} updated` });\n });\n it(\"schema change should not be stashed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"schema change should not be stashed\");\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" 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=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n <ECProperty propertyName=\"prop2\" typeName=\"string\" />\n </ECEntityClass>\n <ECEntityClass typeName=\"A1Recipe2d\">\n <BaseClass>bis:TemplateRecipe2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n </ECEntityClass>\n <ECRelationshipClass typeName=\"A1OwnsA1\" modifier=\"None\" strength=\"embedding\">\n <BaseClass>bis:ElementOwnsChildElements</BaseClass>\n <Source multiplicity=\"(0..1)\" roleLabel=\"owns\" polymorphic=\"true\">\n <Class class=\"a1\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"is owned by\" polymorphic=\"false\">\n <Class class=\"a1\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`;\n await importSchemaStrings(b1Txn, [schema1]);\n\n await chai.expect(StashManager.stash({ db: b1, description: \"stash test 1\" })).to.not.rejectedWith(\"Bad Arg: Pending schema changeset stashing is not currently supported\");\n });\n it(\"abort rebase\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebase b1\");\n const b2Txn = startTestTxn(b2, \"abort rebase b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n let e3 = \"\";\n b2Txn.saveChanges();\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n e3 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist; // came from incoming changeset\n chai.expect(b2.elements.tryGetElementProps(e2)).to.undefined; // was local change and reversed during rebase.\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // was insert by reCompute() but due to exception the rebase attempt was abandoned.\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined; // reset briefcase should move tip back to where it was before pull\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist; // abort should put back e2 which was only change at the time of pull\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // add by rebase so should not exist either\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n });\n it(\"calling discardChanges() from inside indirect scope is not allowed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"discard changes inside indirect scope\");\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n const p1 = b1.txns.withIndirectTxnModeAsync(async () => {\n await b1.discardChanges();\n });\n await chai.expect(p1).to.be.rejectedWith(\"Cannot discard changes when there are indirect changes\");\n b1Txn.saveChanges();\n });\n it(\"calling discardChanges() during rebasing is not allowed\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"discard changes during rebasing b1\");\n const b2Txn = startTestTxn(b2, \"discard changes during rebasing b2\");\n await testIModel.insertElement(b1Txn);\n await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"inserted element\" });\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(b2.txns.rebaser.isAborting).is.false;\n await b2.discardChanges();\n },\n });\n\n chai.expect(b2.txns.rebaser.isAborting).is.false;\n const p1 = b2.pullChanges();\n await chai.expect(p1).to.be.rejectedWith(\"Cannot discard changes while a rebase is in progress\");\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n await b2.txns.rebaser.abort();\n });\n it(\"getStash() should throw exception\", async () => {\n const b1 = await testIModel.openBriefcase();\n chai.expect(() => StashManager.getStash({ db: b1, stash: \"invalid_stash\" })).to.throw(\"No stashes exist for this briefcase\");\n chai.expect(StashManager.tryGetStash({ db: b1, stash: \"invalid_stash\" })).to.be.undefined;\n });\n it(\"edge case: a indirect update can cause FK violation\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"indirect update fk violation b1\");\n const b2Txn = startTestTxn(b2, \"indirect update fk violation b2\");\n\n const parentId = await testIModel.insertElement(b1Txn);\n const childId = await testIModel.insertElementEx(b1Txn, { parent: { id: parentId, relClassName: \"TestDomain:A1OwnsA1\" } });\n b1Txn.saveChanges(\"insert parent and child\");\n await b1.pushChanges({ description: `inserted parent ${parentId} and child ${childId}` });\n await b2.pullChanges();\n\n // b1 delete childId while b1 create a child of childId as indirect change\n await testIModel.deleteElement(b1Txn, childId);\n b1Txn.saveChanges(\"delete child\");\n // no exclusive lock required on child1\n const grandChildId = await testIModel.insertElementEx(b2Txn, { parent: { id: childId, relClassName: \"TestDomain:A1OwnsA1\" }, markAsIndirect: true });\n b2Txn.saveChanges(\"delete child and insert grandchild\");\n\n await b1.pushChanges({ description: `deleted child ${childId}` });\n\n // should fail to pull and rebase changes.\n await chai.expect(b2.pushChanges({ description: `deleted child ${childId} and inserted grandchild ${grandChildId}` }))\n .to.be.rejectedWith(\"Foreign key conflicts in ChangeSet. Aborting rebase.\");\n });\n\n it(\"ECSqlReader unable to read updates after saveChanges()\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"ecsql reader updates after saveChanges\");\n const findElement = async (id: Id64String) => {\n const reader = b1.createQueryReader(`SELECT ECInstanceId, ec_className(ECClassId), Prop1 FROM ts.A1 WHERE ECInstanceId = ${id}`, QueryBinder.from([id]));\n if (await reader.step())\n return { id: reader.current[0], className: reader.current[1], prop1: reader.current[2] };\n return undefined;\n }\n\n const runQuery = async (query: string) => {\n const reader = b1.createQueryReader(query);\n let rows = 0;\n while (await reader.step()) {\n rows++;\n }\n return rows;\n }\n const runQueryParallel = async (query: string, times: number = 1) => {\n return Promise.all(new Array(times).fill(query).map(runQuery));\n }\n\n // Following query have open cached statement against BisCore.Element that will prevent\n // updates from being visible until the statement is finalized.\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n\n const e1 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e1)).to.be.undefined;\n b1Txn.saveChanges(\"insert element\");\n\n const e1Props = await findElement(e1);\n chai.expect(e1Props).to.exist;\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n const e2 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e2)).to.be.undefined;\n b1Txn.saveChanges(\"insert second element\");\n\n const e2Props = await findElement(e2);\n chai.expect(e2Props).to.exist;\n\n await runQueryParallel(`SELECT $ FROM BisCore.Element`, 10);\n const e3 = await testIModel.insertElement(b1Txn);\n chai.expect(await findElement(e3)).to.be.undefined;\n b1Txn.saveChanges(\"insert third element\");\n\n const e3Props = await findElement(e3);\n chai.expect(e3Props).to.exist;\n });\n it(\"enum txn changes in recompute\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"enum txn changes in recompute b1\");\n const b2Txn = startTestTxn(b2, \"enum txn changes in recompute b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n let txnVerified = 0;\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (txn: TxnProps): Promise<void> => {\n const reader = SqliteChangesetReader.openTxn({ txnId: txn.id, db: b2, disableSchemaCheck: true });\n const adaptor = new ChangesetECAdaptor(reader); // eslint-disable-line @typescript-eslint/no-deprecated\n adaptor.acceptClass(\"TestDomain:a1\");\n const ids = new Set<Id64String>();\n while (adaptor.step()) {\n if (!adaptor.reader.isIndirect)\n ids.add(adaptor.inserted?.ECInstanceId || adaptor.deleted?.ECInstanceId as Id64String);\n }\n adaptor.close();\n\n if (txn.props.description === \"first change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000001\"]);\n txnVerified++;\n } else if (txn.props.description === \"second change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000003\"]);\n txnVerified++;\n } else if (txn.props.description === \"third change\") {\n chai.expect(Array.from(ids.keys())).deep.equal([\"0x40000000005\"]);\n txnVerified++;\n } else {\n txnVerified++;\n }\n },\n });\n await b2.pullChanges();\n chai.expect(txnVerified).to.equal(3);\n });\n\n it(\"before and after rebase events\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"before and after rebase events b1\");\n const b2Txn = startTestTxn(b2, \"before and after rebase events b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"first change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"second change\");\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"third change\");\n\n const events = {\n onRebase: {\n beginCount: 0,\n endCount: 0,\n beginTxns: [] as TxnProps[],\n },\n onRebaseTxn: {\n beginTxns: [] as TxnProps[],\n endTxns: [] as TxnProps[],\n },\n rebaseHandler: {\n shouldReinstate: [] as TxnProps[],\n recompute: [] as TxnProps[],\n },\n pullMerge: {\n beginCount: 0,\n endCount: 0,\n beginChangeset: [] as ChangesetIdWithIndex[],\n endChangeset: [] as ChangesetIdWithIndex[],\n },\n applyIncomingChanges: {\n beginCount: 0,\n endCount: 0,\n beginChangesets: [] as ChangesetProps[],\n endChangesets: [] as ChangesetProps[],\n },\n reverseLocalChanges: {\n beginCount: 0,\n endCount: 0,\n txns: [] as TxnProps[],\n },\n downloadChangesets: {\n beginCount: 0,\n endCount: 0,\n },\n };\n\n const resetEvent = () => {\n events.onRebase.beginCount = 0;\n events.onRebase.endCount = 0;\n events.onRebase.beginTxns = [];\n events.onRebaseTxn.beginTxns = [];\n events.onRebaseTxn.endTxns = [];\n events.rebaseHandler.shouldReinstate = [];\n events.rebaseHandler.recompute = [];\n events.pullMerge.beginCount = 0;\n events.pullMerge.endCount = 0;\n events.pullMerge.beginChangeset = [];\n events.pullMerge.endChangeset = [];\n events.applyIncomingChanges.beginCount = 0;\n events.applyIncomingChanges.endCount = 0;\n events.applyIncomingChanges.beginChangesets = [];\n events.applyIncomingChanges.endChangesets = [];\n events.reverseLocalChanges.beginCount = 0;\n events.reverseLocalChanges.endCount = 0;\n events.reverseLocalChanges.txns = [];\n events.downloadChangesets.beginCount = 0;\n events.downloadChangesets.endCount = 0;\n };\n\n // onPullMergeXXXX\n b2.txns.rebaser.onPullMergeBegin.addListener((changeset: ChangesetIdWithIndex) => {\n events.pullMerge.beginCount++;\n events.pullMerge.beginChangeset.push(changeset);\n });\n\n b2.txns.rebaser.onPullMergeEnd.addListener((changeset: ChangesetIdWithIndex) => {\n events.pullMerge.endCount++;\n events.pullMerge.endChangeset.push(changeset);\n });\n\n // onApplyIncomingChangesXXXX\n b2.txns.rebaser.onApplyIncomingChangesBegin.addListener((changesets: ChangesetProps[]) => {\n events.applyIncomingChanges.beginCount++;\n events.applyIncomingChanges.beginChangesets.push(...changesets);\n });\n\n\n b2.txns.rebaser.onApplyIncomingChangesEnd.addListener((changesets: ChangesetProps[]) => {\n events.applyIncomingChanges.endCount++;\n events.applyIncomingChanges.endChangesets.push(...changesets);\n });\n\n // onReverseLocalChangesXXXX\n b2.txns.rebaser.onReverseLocalChangesBegin.addListener(() => {\n events.reverseLocalChanges.beginCount++;\n });\n\n b2.txns.rebaser.onReverseLocalChangesEnd.addListener((txns: TxnProps[]) => {\n events.reverseLocalChanges.endCount++;\n removePropertyRecursive(txns, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.reverseLocalChanges.txns.push(...txns);\n });\n\n // onDownloadChangesetsXXXX\n b2.txns.rebaser.onDownloadChangesetsBegin.addListener(() => {\n events.downloadChangesets.beginCount++;\n });\n\n b2.txns.rebaser.onDownloadChangesetsEnd.addListener(() => {\n events.downloadChangesets.endCount++;\n });\n\n // onRebaseXXXX\n b2.txns.rebaser.onRebaseBegin.addListener((txns: TxnProps[]) => {\n events.onRebase.beginCount++;\n removePropertyRecursive(txns, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebase.beginTxns.push(...txns);\n });\n\n b2.txns.rebaser.onRebaseEnd.addListener(() => {\n events.onRebase.endCount++;\n });\n\n // onRebaseTxnXXXX\n b2.txns.rebaser.onRebaseTxnBegin.addListener((txn: TxnProps) => {\n removePropertyRecursive(txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebaseTxn.beginTxns.push(txn);\n });\n\n b2.txns.rebaser.onRebaseTxnEnd.addListener((txn: TxnProps) => {\n removePropertyRecursive(txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.onRebaseTxn.endTxns.push(txn);\n });\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n // shouldReinstate\n removePropertyRecursive(_txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.rebaseHandler.shouldReinstate.push(_txn);\n return true;\n },\n recompute: async (_txn: TxnProps): Promise<void> => {\n // recompute\n removePropertyRecursive(_txn, \"timestamp\"); // it changes on each run, so remove it for comparison\n events.rebaseHandler.recompute.push(_txn);\n },\n });\n\n resetEvent();\n await b2.pullChanges();\n // pullMerge events\n chai.expect(events.pullMerge.beginCount).to.equal(1);\n chai.expect(events.pullMerge.endCount).to.equal(1);\n chai.expect((events.pullMerge.beginChangeset[0].index)).to.equal(3);\n chai.expect((events.pullMerge.endChangeset[0].index)).to.equal(4);\n\n // applyIncomingChanges events\n chai.expect(events.applyIncomingChanges.beginCount).to.equal(1);\n chai.expect(events.applyIncomingChanges.endCount).to.equal(1);\n chai.expect(events.applyIncomingChanges.beginChangesets.map((cs) => cs.index)).to.deep.equal([4]);\n chai.expect(events.applyIncomingChanges.endChangesets.map((cs) => cs.index)).to.deep.equal([4]);\n\n // downloadChangesets events\n chai.expect(events.downloadChangesets.beginCount).to.equal(1);\n chai.expect(events.downloadChangesets.endCount).to.equal(1);\n\n // reverseLocalChanges events\n chai.expect(events.reverseLocalChanges.beginCount).to.equal(1);\n chai.expect(events.reverseLocalChanges.endCount).to.equal(1);\n chai.expect(events.reverseLocalChanges.txns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n // rebase events\n chai.expect(events.onRebase.beginCount).to.equal(1);\n chai.expect(events.onRebase.endCount).to.equal(1);\n chai.expect(events.onRebase.beginTxns).to.deep.equal(\n [\n {\n grouped: false,\n id: \"0x100000000\",\n nextId: \"0x100000001\",\n props: {\n description: \"first change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000001\",\n nextId: \"0x100000002\",\n prevId: \"0x100000000\",\n props: {\n description: \"second change\",\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000002\",\n prevId: \"0x100000001\",\n props: {\n description: \"third change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n }\n ]\n );\n\n chai.expect(events.onRebaseTxn.beginTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n chai.expect(events.onRebaseTxn.endTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n chai.expect(events.rebaseHandler.shouldReinstate.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n chai.expect(events.rebaseHandler.recompute.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\"]);\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n await testIModel.insertElement(b2Txn);\n await testIModel.insertElement(b2Txn, true);\n b2Txn.saveChanges(\"fourth change\");\n\n resetEvent();\n await b2.pullChanges();\n\n chai.expect(events.onRebase.beginCount).to.equal(1);\n chai.expect(events.onRebase.endCount).to.equal(1);\n chai.expect(events.onRebase.beginTxns).to.deep.equal([\n {\n grouped: false,\n id: \"0x100000000\",\n nextId: \"0x100000001\",\n props: {\n description: \"first change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000001\",\n nextId: \"0x100000002\",\n prevId: \"0x100000000\",\n props: {\n description: \"second change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000002\",\n nextId: \"0x100000003\",\n prevId: \"0x100000001\",\n props: {\n description: \"third change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n },\n {\n grouped: false,\n id: \"0x100000003\",\n prevId: \"0x100000002\",\n props: {\n description: \"fourth change\"\n },\n reversed: true,\n sessionId: 1,\n type: \"Data\"\n }\n ]);\n chai.expect(events.onRebaseTxn.beginTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n chai.expect(events.onRebaseTxn.endTxns.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n\n chai.expect(events.rebaseHandler.shouldReinstate.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n chai.expect(events.rebaseHandler.recompute.map((txn) => txn.id)).to.deep.equal([\"0x100000000\", \"0x100000001\", \"0x100000002\", \"0x100000003\"]);\n });\n it(\"onModelGeometryChanged() not fired during rebase/pullMerge with no local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b2Txn = startTestTxn(b2, \"model geometry changed no local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).is.undefined;\n chai.expect(events.modelGeometryChanged.length).to.equal(0);\n });\n it(\"onModelGeometryChanged() fired during rebase with geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed geometric local change b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed geometric local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n onGeometryChanged: [] as ModelGeometryChangesProps[][],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n events.onGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n b1.txns.onGeometryChanged.addListener((changes: ModelGeometryChangesProps[]) => {\n events.onGeometryChanged.push(changes);\n });\n\n clearEvents();\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n b1Txn.saveChanges(`insert element ${e1} and ${e2}`);\n\n chai.expect(events.modelGeometryChanged.length).to.equal(1);\n chai.expect(events.modelGeometryChanged[0].length).to.equal(1);\n chai.expect(events.modelGeometryChanged[0][0].id).to.equal(\"0x20000000001\");\n chai.assert(Guid.isGuid(events.modelGeometryChanged[0][0].guid));\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2);\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).to.not.equal(geomGuidAfterPull);\n chai.expect(events.modelGeometryChanged.length).to.equal(4);\n });\n it(\"onModelGeometryChanged() fired during rebase with non-geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed non geometric local change b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed non geometric local change b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n },\n });\n\n await pushChangeFromB2();\n await testIModel.insertRecipe2d(b1Txn);\n b1Txn.saveChanges();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).to.exist;\n chai.expect(events.modelGeometryChanged.length).to.equal(1);\n });\n it(\"onModelGeometryChanged() fired during rebase with geometric local change\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"model geometry changed geometric local recipe b1\");\n const b2Txn = startTestTxn(b2, \"model geometry changed geometric local recipe b2\");\n\n const pushChangeFromB2 = async () => {\n await b2.pullChanges();\n await testIModel.insertRecipe2d(b2Txn);\n b2Txn.saveChanges();\n await b2.pushChanges({ description: \"insert element on b2\" });\n };\n\n const events = {\n modelGeometryChanged: [] as ReadonlyArray<ModelIdAndGeometryGuid>[],\n onGeometryChanged: [] as ModelGeometryChangesProps[][],\n };\n\n const getGeometryGuidFromB1 = (modelId: string) => {\n const modelProps = b1.models.tryGetModelProps<GeometricModelProps>(modelId);\n return modelProps?.geometryGuid;\n };\n\n const clearEvents = () => {\n events.modelGeometryChanged = [];\n events.onGeometryChanged = [];\n };\n\n b1.txns.onModelGeometryChanged.addListener((changes: ReadonlyArray<ModelIdAndGeometryGuid>) => {\n events.modelGeometryChanged.push(changes);\n });\n\n b1.txns.onGeometryChanged.addListener((changes: ModelGeometryChangesProps[]) => {\n events.onGeometryChanged.push(changes);\n });\n\n clearEvents();\n\n b1.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (_txn: TxnProps) => {\n await testIModel.insertElement(b1Txn);\n },\n });\n\n await pushChangeFromB2();\n\n clearEvents();\n const geomGuidBeforePull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidBeforePull).is.undefined;\n await b1.pushChanges({ description: \"push changes on b1\" });\n const geomGuidAfterPull = getGeometryGuidFromB1(\"0x20000000001\");\n chai.expect(geomGuidAfterPull).is.undefined;\n chai.expect(events.modelGeometryChanged.length).to.equal(0);\n });\n it(\"rebase multi txn\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"rebase multi txn b1\");\n const b2Txn = startTestTxn(b2, \"rebase multi txn b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"insert element 1 direct and 1 indirect\" });\n\n await b2.pullChanges();\n\n chai.expect(b2.txns.beginMultiTxnOperation()).to.be.equals(DbResult.BE_SQLITE_OK);\n let elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n chai.expect(b2.txns.endMultiTxnOperation()).to.be.equals(DbResult.BE_SQLITE_OK);\n b2Txn.saveChanges();\n elId = await testIModel.insertElement(b2Txn);\n b2Txn.saveChanges(`insert element ${elId}`);\n let txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(false);\n\n // reverse single txn 0x100000003\n chai.expect(b2.txns.reverseSingleTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reverse multi txn. should reverse 0x100000000, 0x100000001 & 0x100000002\n chai.expect(b2.txns.reverseSingleTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(true);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(true);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(true);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reinstate the transaction\n chai.expect(b2.txns.isRedoPossible).to.be.equals(true);\n chai.expect(b2.txns.reinstateTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(true);\n\n // reinstate the transaction\n chai.expect(b2.txns.isRedoPossible).to.be.equals(true);\n chai.expect(b2.txns.reinstateTxn()).to.be.equals(DbResult.BE_SQLITE_OK);\n\n txns = Array.from(b2.txns.queryTxns());\n\n chai.expect(txns[0].id).to.be.equals(\"0x100000000\"); // 1st after beginMultiTxnOperation()\n chai.expect(txns[0].props.description).to.be.equals(\"insert element 0x40000000001\");\n chai.expect(txns[0].sessionId).to.be.equals(1);\n chai.expect(txns[0].grouped).to.be.equals(false);\n chai.expect(txns[0].reversed).to.be.equals(false);\n\n chai.expect(txns[1].id).to.be.equals(\"0x100000001\"); // 2nd after beginMultiTxnOperation()\n chai.expect(txns[1].props.description).to.be.equals(\"insert element 0x40000000002\");\n chai.expect(txns[1].sessionId).to.be.equals(1);\n chai.expect(txns[1].grouped).to.be.equals(true);\n chai.expect(txns[1].reversed).to.be.equals(false);\n\n chai.expect(txns[2].id).to.be.equals(\"0x100000002\"); // 3rd after beginMultiTxnOperation() & before endMultiTxnOperation()\n chai.expect(txns[2].props.description).to.be.equals(\"insert element 0x40000000003\");\n chai.expect(txns[2].sessionId).to.be.equals(1);\n chai.expect(txns[2].grouped).to.be.equals(true);\n chai.expect(txns[2].reversed).to.be.equals(false);\n\n chai.expect(txns[3].id).to.be.equals(\"0x100000003\"); // 4th after endMultiTxnOperation()\n chai.expect(txns[3].props.description).to.be.equals(\"insert element 0x40000000004\");\n chai.expect(txns[3].type).to.be.equals(\"Data\");\n chai.expect(txns[3].grouped).to.be.equals(false);\n chai.expect(txns[3].reversed).to.be.equals(false);\n\n chai.expect(b2.txns.isRedoPossible).to.be.equals(false);\n\n\n await testIModel.updateElement(b1Txn, e1);\n await testIModel.updateElement(b1Txn, e2, true);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"update element 1 direct and 1 indirect\" });\n\n const recomputeTxnIds = [] as TxnIdString[];\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txn: TxnProps) => {\n return true;\n },\n recompute: async (txn: TxnProps): Promise<void> => {\n recomputeTxnIds.push(txn.id);\n },\n });\n\n await b2.pullChanges();\n\n chai.expect(recomputeTxnIds).to.deep.equals([\n \"0x100000000\",\n \"0x100000001\",\n \"0x100000002\",\n \"0x100000003\",\n ]);\n });\n it(\"abort rebase should discard in-memory changes\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebase discard memory b1\");\n const b2Txn = startTestTxn(b2, \"abort rebase discard memory b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await testIModel.insertElement(b2Txn);\n chai.expect(e2).to.exist;\n let e3 = \"\";\n b2Txn.saveChanges();\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n e3 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist; // came from incoming changeset\n chai.expect(b2.elements.tryGetElementProps(e2)).to.undefined; // was local change and reversed during rebase.\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // was insert by reCompute() but due to exception the rebase attempt was abandoned.\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n // make temp change\n b2Txn.saveFileProperty({ name: \"test\", namespace: \"testNamespace\" }, \"testValue\");\n chai.expect(b2.txns.hasUnsavedChanges).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n // should abort with unsaved local changes\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.undefined; // reset briefcase should move tip back to where it was before pull\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist; // abort should put back e2 which was only change at the time of pull\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined; // add by rebase so should not exist either\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n });\n it(\"two users insert same ElementGroupsMembers instance\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"same ElementGroupsMembers b1\");\n const b2Txn = startTestTxn(b2, \"same ElementGroupsMembers b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn);\n const e3 = await testIModel.insertElement(b1Txn);\n const e4 = await testIModel.insertElement(b1Txn);\n\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n chai.expect(e3).to.exist;\n chai.expect(e4).to.exist;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted elements` });\n await b2.pullChanges();\n\n const r1 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 10).toJSON());\n const r2 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e3, e4, 20).toJSON());\n chai.expect(r1).to.exist;\n chai.expect(r2).to.exist;\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted relationship` });\n\n const r3 = b2Txn.insertRelationship(ElementGroupsMembers.create(b2, e1, e2, 10).toJSON());\n const r4 = b2Txn.insertRelationship(ElementGroupsMembers.create(b2, e3, e4, 20).toJSON());\n chai.expect(r3).to.exist;\n chai.expect(r4).to.exist;\n b2Txn.saveChanges();\n await b2.pushChanges({ description: `inserted relationship` });\n await b2.pullChanges();\n\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.exist;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r3)).to.be.undefined;\n chai.expect(b2.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r4)).to.be.undefined;\n\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.exist;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r3)).to.be.undefined;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r4)).to.be.undefined;\n });\n it(\"one user update and other delete the link table relationships\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"relationship update delete b1\");\n const b2Txn = startTestTxn(b2, \"relationship update delete b2\");\n\n const e1 = await testIModel.insertElement(b1Txn);\n const e2 = await testIModel.insertElement(b1Txn);\n\n const r1 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 10).toJSON());\n const r2 = b1Txn.insertRelationship(ElementGroupsMembers.create(b1, e1, e2, 20).toJSON());\n\n chai.expect(e1).to.exist;\n chai.expect(e2).to.exist;\n chai.expect(r1).to.exist;\n chai.expect(r2).to.exist;\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted elements and relationship` });\n await b2.pullChanges();\n\n\n // intentionally change memberPriority to 10 for which there is another relationship already exists.\n chai.expect(() => b2Txn.updateRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2,\n memberPriority: 20\n } as RelationshipProps)).to.throws(\"error updating relationship\");\n\n\n b2Txn.updateRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2,\n memberPriority: 60\n } as RelationshipProps);\n\n b1Txn.deleteRelationship({\n id: r1,\n classFullName: ElementGroupsMembers.classFullName,\n sourceId: e1,\n targetId: e2\n });\n\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `deleted relationship` });\n\n b2Txn.saveChanges();\n await b2.pushChanges({ description: `updated relationship` });\n\n await b2.pullChanges();\n await b1.pullChanges();\n\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r1)).to.be.undefined;\n chai.expect(b1.relationships.tryGetInstanceProps(ElementGroupsMembers.classFullName, r2)).to.exist;\n });\n it(\"aborting rebaser in middle of rebase session where at least one txn is successfully rebased (used to cause crash)\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"abort rebaser mid session b1\");\n const b2Txn = startTestTxn(b2, \"abort rebaser mid session b2\");\n\n const createTxn = async (txn: EditTxn) => {\n const id = await testIModel.insertElement(txn);\n chai.expect(id).is.exist;\n txn.saveChanges(`created element ${id}`);\n return id;\n };\n\n const e1 = await createTxn(b1Txn);\n await b1.pushChanges({ description: `${e1} inserted` });\n\n const e2 = await createTxn(b2Txn);\n const e3 = await createTxn(b2Txn);\n const e4 = await createTxn(b2Txn);\n\n let e5 = \"\";\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (txnProps: TxnProps) => {\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n if (txnProps.id === \"0x100000001\") {\n e5 = await testIModel.insertElement(b2Txn);\n throw new Error(\"Rebase failed\");\n }\n },\n });\n\n chai.expect(b2.elements.tryGetElementProps(e1)).to.be.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.be.undefined;\n chai.expect(b2.changeset.index).to.equals(2);\n await chai.expect(b2.pullChanges()).to.be.rejectedWith(\"Rebase failed\");\n await chai.expect(createTxn(b2Txn)).to.be.rejectedWith(`Could not save changes (created element 0x40000000004)`);\n\n chai.expect(b2.changeset.index).to.equals(3);\n chai.expect(e3).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.undefined;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.exist;\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.true;\n\n // make temp change\n b2Txn.saveFileProperty({ name: \"test\", namespace: \"testNamespace\" }, \"testValue\");\n chai.expect(b2.txns.hasUnsavedChanges).is.true;\n\n chai.expect(b2.txns.rebaser.canAbort()).is.true;\n\n // should abort with unsaved local changes\n await b2.txns.rebaser.abort();\n\n chai.expect(b2.changeset.index).to.equals(2);\n chai.expect(b2.elements.tryGetElementProps(e1)).to.be.undefined;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e5)).to.be.undefined;\n\n chai.expect(BriefcaseManager.containsRestorePoint(b2, BriefcaseManager.PULL_MERGE_RESTORE_POINT_NAME)).is.false;\n\n b2.txns.rebaser.setCustomHandler({\n shouldReinstate: (_txnProps: TxnProps) => {\n return true;\n },\n recompute: async (_txnProps: TxnProps) => { },\n });\n\n const e6 = await createTxn(b2Txn);\n b2Txn.saveChanges(`created element ${e6}`);\n chai.expect(b2.txns.getCurrentTxnId()).to.equal(\"0x100000004\");\n chai.expect(b2.txns.getLastSavedTxnProps()?.id).to.equal(`0x100000003`);\n\n await b2.pullChanges();\n chai.expect(b2.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b2.elements.tryGetElementProps(e4)).to.exist;\n const e7 = await createTxn(b2Txn);\n b2Txn.saveChanges(`created element ${e7}`);\n chai.expect(b2.txns.getCurrentTxnId()).to.equal(\"0x100000005\");\n chai.expect(b2.txns.getLastSavedTxnProps()?.id).to.equal(`0x100000004`);\n await b2.pushChanges({ description: \"pushed after rebase aborted\" });\n\n await b1.pullChanges();\n chai.expect(b1.elements.tryGetElementProps(e1)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e2)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e3)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e4)).to.exist;\n chai.expect(b1.elements.tryGetElementProps(e7)).to.exist;\n });\n it(\"changeset DDL error are ignored and ec_* tables are used to reconstruct the sqlite tables\", async () => {\n const b1 = await testIModel.openBriefcase();\n const b2 = await testIModel.openBriefcase();\n const b1Txn = startTestTxn(b1, \"changeset ddl reconstruction b1\");\n const iModelId = testIModel.iModelId;\n const targetDir = path.join(KnownTestLocations.outputDir, iModelId, \"changesets\");\n let ver = 0;\n let props = 0;\n const tblGeom2d = \"bis_GeometricElement2d\";\n const geom2dBaseColumnList = [\n \"ElementId\",\n \"ECClassId\",\n \"CategoryId\",\n \"Origin_X\",\n \"Origin_Y\",\n \"Rotation\",\n \"BBoxLow_X\",\n \"BBoxLow_Y\",\n \"BBoxHigh_X\",\n \"BBoxHigh_Y\",\n \"GeometryStream\",\n \"TypeDefinitionId\",\n \"TypeDefinitionRelECClassId\",\n \"js1\",\n \"js2\",\n ];\n\n const generateSchema = (noOfNewPropsToAdd: number) => {\n props += noOfNewPropsToAdd;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain1\" alias=\"ts1\" version=\"01.00.${ver++}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"test\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"prop1\" typeName=\"string\" />\n ${Array.from({ length: props - 1 }, (_, i) => `<ECProperty propertyName=\"prop${i + 2}\" typeName=\"string\" />`).join(\"\\n \")}\n </ECEntityClass>\n </ECSchema>`;\n };\n\n const getColumnNames = (b: BriefcaseDb, tableName: string) => {\n return b.withSqliteStatement(`PRAGMA table_info(${tableName})`, (stmt) => {\n const columnNames: string[] = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n columnNames.push(stmt.getValue(1).getString());\n }\n return columnNames;\n });\n };\n\n const withLatestChangeset = async (cb: (reader: SqliteChangesetReader) => Promise<void>) => {\n const csInfo = await HubMock.getLatestChangeset({ iModelId });\n const info = await HubMock.downloadChangeset({\n iModelId,\n changeset: { id: csInfo.id },\n targetDir,\n });\n\n const reader = SqliteChangesetReader.openFile({ db: b1, fileName: info.pathname });\n try {\n await cb(reader);\n } finally {\n reader.close();\n }\n };\n\n // Verify initial columns\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals(geom2dBaseColumnList);\n chai.expect(getColumnNames(b2, tblGeom2d)).deep.equals(geom2dBaseColumnList);\n\n // Import schema that add 5 new properties that should add 3 new shared columns\n await importSchemaStrings(b1Txn, [generateSchema(5)]);\n await b1.pushChanges({ description: `imported schema version 1.0.${ver - 1}` });\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\"]);\n\n //verify changeset has schema changes\n await withLatestChangeset(async (reader) => {\n const schemaChanges = reader.getDdlChanges()?.split(\";\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js3] BLOB\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js4] BLOB\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js5] BLOB\");\n });\n\n await b2.pullChanges();\n chai.expect(getColumnNames(b2, \"bis_GeometricElement2d\")).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\"]);\n\n\n // Import schema that add 5 new properties that should add 3 new shared columns\n await importSchemaStrings(b1Txn, [generateSchema(1)]);\n await b1.pushChanges({ description: `imported schema version 1.0.${ver - 1}` });\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b1, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\", \"js6\"]);\n //verify changeset has schema changes\n await withLatestChangeset(async (reader) => {\n const schemaChanges = reader.getDdlChanges()?.split(\";\");\n chai.expect(schemaChanges).to.include(\"ALTER TABLE [bis_GeometricElement2d] ADD COLUMN [js6] BLOB\");\n });\n\n // delete the table so DDL apply should fail\n b2[_nativeDb].executeSql(`DROP TABLE ${tblGeom2d}`)\n\n // this would fail before this PR but should succeed as DDL error are ignored and table reconstruction is attempted using ec_* tables\n await b2.pullChanges();\n\n // Verify columns after schema import\n chai.expect(getColumnNames(b2, tblGeom2d)).deep.equals([...geom2dBaseColumnList, \"js3\", \"js4\", \"js5\", \"js6\"]);\n\n b1.close();\n b2.close();\n });\n });\n}\n"]}