@itwin/core-backend 5.9.0-dev.9 → 5.9.1

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 (286) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/lib/cjs/BriefcaseManager.d.ts +14 -62
  3. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseManager.js +29 -159
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/Category.d.ts +4 -4
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  9. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  10. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  11. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  12. package/lib/cjs/ChangesetReader.d.ts +186 -0
  13. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReader.js +372 -0
  15. package/lib/cjs/ChangesetReader.js.map +1 -0
  16. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  17. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  18. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  19. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  20. package/lib/cjs/CloudSqlite.d.ts +1 -1
  21. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  22. package/lib/cjs/CloudSqlite.js +68 -13
  23. package/lib/cjs/CloudSqlite.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.d.ts +3 -3
  25. package/lib/cjs/CodeSpecs.js.map +1 -1
  26. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.d.ts +2 -2
  29. package/lib/cjs/DisplayStyle.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  31. package/lib/cjs/ECSqlStatement.js.map +1 -1
  32. package/lib/cjs/EditTxn.d.ts +55 -1
  33. package/lib/cjs/EditTxn.d.ts.map +1 -1
  34. package/lib/cjs/EditTxn.js +43 -1
  35. package/lib/cjs/EditTxn.js.map +1 -1
  36. package/lib/cjs/Element.d.ts +79 -10
  37. package/lib/cjs/Element.d.ts.map +1 -1
  38. package/lib/cjs/Element.js +38 -2
  39. package/lib/cjs/Element.js.map +1 -1
  40. package/lib/cjs/ElementAspect.d.ts +1 -1
  41. package/lib/cjs/ElementAspect.js.map +1 -1
  42. package/lib/cjs/ElementGraphics.js.map +1 -1
  43. package/lib/cjs/ElementTreeWalker.d.ts +5 -5
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/ExternalSource.d.ts +2 -2
  46. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  47. package/lib/cjs/ExternalSource.js.map +1 -1
  48. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  49. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  50. package/lib/cjs/GeographicCRSServices.js +13 -4
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/IModelDb.d.ts +31 -23
  53. package/lib/cjs/IModelDb.d.ts.map +1 -1
  54. package/lib/cjs/IModelDb.js +44 -25
  55. package/lib/cjs/IModelDb.js.map +1 -1
  56. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  57. package/lib/cjs/IModelJsFs.d.ts +2 -0
  58. package/lib/cjs/IModelJsFs.d.ts.map +1 -1
  59. package/lib/cjs/IModelJsFs.js +14 -0
  60. package/lib/cjs/IModelJsFs.js.map +1 -1
  61. package/lib/cjs/IpcHost.d.ts.map +1 -1
  62. package/lib/cjs/IpcHost.js +20 -9
  63. package/lib/cjs/IpcHost.js.map +1 -1
  64. package/lib/cjs/LineStyle.d.ts +6 -6
  65. package/lib/cjs/LineStyle.js.map +1 -1
  66. package/lib/cjs/Material.d.ts +1 -1
  67. package/lib/cjs/Material.js.map +1 -1
  68. package/lib/cjs/Model.d.ts +40 -6
  69. package/lib/cjs/Model.d.ts.map +1 -1
  70. package/lib/cjs/Model.js +24 -0
  71. package/lib/cjs/Model.js.map +1 -1
  72. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  73. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  74. package/lib/cjs/PartialChangeUnifier.js +234 -0
  75. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  76. package/lib/cjs/Relationship.d.ts +10 -10
  77. package/lib/cjs/Relationship.js +6 -6
  78. package/lib/cjs/Relationship.js.map +1 -1
  79. package/lib/cjs/SheetIndex.d.ts +4 -4
  80. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  81. package/lib/cjs/SheetIndex.js.map +1 -1
  82. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  83. package/lib/cjs/SqliteChangesetReader.js +1 -1
  84. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  85. package/lib/cjs/Texture.d.ts +1 -1
  86. package/lib/cjs/Texture.js.map +1 -1
  87. package/lib/cjs/TxnManager.d.ts +17 -0
  88. package/lib/cjs/TxnManager.d.ts.map +1 -1
  89. package/lib/cjs/TxnManager.js +120 -13
  90. package/lib/cjs/TxnManager.js.map +1 -1
  91. package/lib/cjs/ViewDefinition.d.ts +25 -13
  92. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  93. package/lib/cjs/ViewDefinition.js +77 -25
  94. package/lib/cjs/ViewDefinition.js.map +1 -1
  95. package/lib/cjs/ViewStore.d.ts.map +1 -1
  96. package/lib/cjs/ViewStore.js +63 -21
  97. package/lib/cjs/ViewStore.js.map +1 -1
  98. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  99. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  100. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  101. package/lib/cjs/core-backend.d.ts +3 -0
  102. package/lib/cjs/core-backend.d.ts.map +1 -1
  103. package/lib/cjs/core-backend.js +3 -0
  104. package/lib/cjs/core-backend.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
  106. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  107. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  108. package/lib/cjs/domains/GenericElements.d.ts +2 -2
  109. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  110. package/lib/cjs/domains/GenericElements.js.map +1 -1
  111. package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
  112. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  113. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  114. package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
  115. package/lib/cjs/internal/IntegrityCheck.js +22 -22
  116. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  117. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  118. package/lib/cjs/workspace/Settings.d.ts +6 -4
  119. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  120. package/lib/cjs/workspace/Settings.js.map +1 -1
  121. package/lib/esm/BriefcaseManager.d.ts +14 -62
  122. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  123. package/lib/esm/BriefcaseManager.js +30 -160
  124. package/lib/esm/BriefcaseManager.js.map +1 -1
  125. package/lib/esm/Category.d.ts +4 -4
  126. package/lib/esm/Category.js.map +1 -1
  127. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  128. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  129. package/lib/esm/ChangesetECAdaptor.js +7 -1
  130. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  131. package/lib/esm/ChangesetReader.d.ts +186 -0
  132. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  133. package/lib/esm/ChangesetReader.js +368 -0
  134. package/lib/esm/ChangesetReader.js.map +1 -0
  135. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  136. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  137. package/lib/esm/ChangesetReaderTypes.js +20 -0
  138. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  139. package/lib/esm/CloudSqlite.d.ts +1 -1
  140. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  141. package/lib/esm/CloudSqlite.js +69 -14
  142. package/lib/esm/CloudSqlite.js.map +1 -1
  143. package/lib/esm/CodeSpecs.d.ts +3 -3
  144. package/lib/esm/CodeSpecs.js.map +1 -1
  145. package/lib/esm/ConcurrentQuery.js.map +1 -1
  146. package/lib/esm/DevTools.js.map +1 -1
  147. package/lib/esm/DisplayStyle.d.ts +2 -2
  148. package/lib/esm/DisplayStyle.js.map +1 -1
  149. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  150. package/lib/esm/ECSqlStatement.js.map +1 -1
  151. package/lib/esm/EditTxn.d.ts +55 -1
  152. package/lib/esm/EditTxn.d.ts.map +1 -1
  153. package/lib/esm/EditTxn.js +43 -1
  154. package/lib/esm/EditTxn.js.map +1 -1
  155. package/lib/esm/Element.d.ts +79 -10
  156. package/lib/esm/Element.d.ts.map +1 -1
  157. package/lib/esm/Element.js +38 -2
  158. package/lib/esm/Element.js.map +1 -1
  159. package/lib/esm/ElementAspect.d.ts +1 -1
  160. package/lib/esm/ElementAspect.js.map +1 -1
  161. package/lib/esm/ElementGraphics.js.map +1 -1
  162. package/lib/esm/ElementTreeWalker.d.ts +5 -5
  163. package/lib/esm/ElementTreeWalker.js.map +1 -1
  164. package/lib/esm/ExternalSource.d.ts +2 -2
  165. package/lib/esm/ExternalSource.d.ts.map +1 -1
  166. package/lib/esm/ExternalSource.js.map +1 -1
  167. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  168. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  169. package/lib/esm/GeographicCRSServices.js +12 -4
  170. package/lib/esm/GeographicCRSServices.js.map +1 -1
  171. package/lib/esm/IModelDb.d.ts +31 -23
  172. package/lib/esm/IModelDb.d.ts.map +1 -1
  173. package/lib/esm/IModelDb.js +45 -26
  174. package/lib/esm/IModelDb.js.map +1 -1
  175. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  176. package/lib/esm/IModelJsFs.d.ts +2 -0
  177. package/lib/esm/IModelJsFs.d.ts.map +1 -1
  178. package/lib/esm/IModelJsFs.js +14 -0
  179. package/lib/esm/IModelJsFs.js.map +1 -1
  180. package/lib/esm/IpcHost.d.ts.map +1 -1
  181. package/lib/esm/IpcHost.js +20 -9
  182. package/lib/esm/IpcHost.js.map +1 -1
  183. package/lib/esm/LineStyle.d.ts +6 -6
  184. package/lib/esm/LineStyle.js.map +1 -1
  185. package/lib/esm/Material.d.ts +1 -1
  186. package/lib/esm/Material.js.map +1 -1
  187. package/lib/esm/Model.d.ts +40 -6
  188. package/lib/esm/Model.d.ts.map +1 -1
  189. package/lib/esm/Model.js +24 -0
  190. package/lib/esm/Model.js.map +1 -1
  191. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  192. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  193. package/lib/esm/PartialChangeUnifier.js +230 -0
  194. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  195. package/lib/esm/Relationship.d.ts +10 -10
  196. package/lib/esm/Relationship.js +6 -6
  197. package/lib/esm/Relationship.js.map +1 -1
  198. package/lib/esm/SheetIndex.d.ts +4 -4
  199. package/lib/esm/SheetIndex.d.ts.map +1 -1
  200. package/lib/esm/SheetIndex.js.map +1 -1
  201. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  202. package/lib/esm/SqliteChangesetReader.js +1 -1
  203. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  204. package/lib/esm/Texture.d.ts +1 -1
  205. package/lib/esm/Texture.js.map +1 -1
  206. package/lib/esm/TxnManager.d.ts +17 -0
  207. package/lib/esm/TxnManager.d.ts.map +1 -1
  208. package/lib/esm/TxnManager.js +121 -14
  209. package/lib/esm/TxnManager.js.map +1 -1
  210. package/lib/esm/ViewDefinition.d.ts +25 -13
  211. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  212. package/lib/esm/ViewDefinition.js +78 -26
  213. package/lib/esm/ViewDefinition.js.map +1 -1
  214. package/lib/esm/ViewStore.d.ts.map +1 -1
  215. package/lib/esm/ViewStore.js +64 -22
  216. package/lib/esm/ViewStore.js.map +1 -1
  217. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  218. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  219. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  220. package/lib/esm/core-backend.d.ts +3 -0
  221. package/lib/esm/core-backend.d.ts.map +1 -1
  222. package/lib/esm/core-backend.js +3 -0
  223. package/lib/esm/core-backend.js.map +1 -1
  224. package/lib/esm/domains/FunctionalElements.d.ts +1 -1
  225. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  226. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  227. package/lib/esm/domains/GenericElements.d.ts +2 -2
  228. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  229. package/lib/esm/domains/GenericElements.js.map +1 -1
  230. package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
  231. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  232. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  233. package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
  234. package/lib/esm/internal/IntegrityCheck.js +22 -22
  235. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  236. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  237. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  238. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  239. package/lib/esm/test/IModelTestUtils.d.ts +1 -0
  240. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  241. package/lib/esm/test/IModelTestUtils.js +5 -0
  242. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  243. package/lib/esm/test/IpcHost.test.js +112 -0
  244. package/lib/esm/test/IpcHost.test.js.map +1 -1
  245. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  246. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  247. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  248. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  249. package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
  250. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  251. package/lib/esm/test/element/ElementRoundTrip.test.js +144 -3
  252. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  253. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  254. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  255. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  256. package/lib/esm/test/hubaccess/SemanticRebase.test.js +2242 -68
  257. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  258. package/lib/esm/test/imodel/IModel.test.js +1 -1
  259. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  260. package/lib/esm/test/imodel/SchemaXmlImport.test.js +64 -0
  261. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  262. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  263. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  264. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  265. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  266. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  267. package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
  268. package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
  269. package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
  270. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
  271. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  272. package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
  273. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  274. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  275. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  276. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  277. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  278. package/lib/esm/test/standalone/TxnManager.test.js +90 -0
  279. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  280. package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
  281. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  282. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  283. package/lib/esm/workspace/Settings.d.ts +6 -4
  284. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  285. package/lib/esm/workspace/Settings.js.map +1 -1
  286. package/package.json +15 -15
@@ -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"]}