@itwin/core-backend 5.12.0-dev.1 → 5.12.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.js.map +1 -1
  31. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  32. package/lib/cjs/EditTxn.js.map +1 -1
  33. package/lib/cjs/Element.js.map +1 -1
  34. package/lib/cjs/ElementAspect.js.map +1 -1
  35. package/lib/cjs/ElementGraphics.js.map +1 -1
  36. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  37. package/lib/cjs/Entity.js.map +1 -1
  38. package/lib/cjs/EntityReferences.js.map +1 -1
  39. package/lib/cjs/ExportGraphics.js.map +1 -1
  40. package/lib/cjs/ExternalSource.js.map +1 -1
  41. package/lib/cjs/FontFile.js.map +1 -1
  42. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  43. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  44. package/lib/cjs/GeometrySummary.js +47 -47
  45. package/lib/cjs/GeometrySummary.js.map +1 -1
  46. package/lib/cjs/IModelDb.js +8 -8
  47. package/lib/cjs/IModelDb.js.map +1 -1
  48. package/lib/cjs/IModelDbFonts.js.map +1 -1
  49. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  50. package/lib/cjs/IModelHost.js.map +1 -1
  51. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  52. package/lib/cjs/IModelJsFs.js.map +1 -1
  53. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  54. package/lib/cjs/IpcHost.js.map +1 -1
  55. package/lib/cjs/LineStyle.js.map +1 -1
  56. package/lib/cjs/LocalHub.js +1 -1
  57. package/lib/cjs/LocalHub.js.map +1 -1
  58. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  59. package/lib/cjs/LockControl.js.map +1 -1
  60. package/lib/cjs/Material.js.map +1 -1
  61. package/lib/cjs/Model.js.map +1 -1
  62. package/lib/cjs/NativeAppStorage.js.map +1 -1
  63. package/lib/cjs/NativeHost.js.map +1 -1
  64. package/lib/cjs/NavigationRelationship.js.map +1 -1
  65. package/lib/cjs/PartialChangeUnifier.js +7 -7
  66. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  67. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  68. package/lib/cjs/PropertyStore.js.map +1 -1
  69. package/lib/cjs/Relationship.js.map +1 -1
  70. package/lib/cjs/RpcBackend.js.map +1 -1
  71. package/lib/cjs/SQLiteDb.js.map +1 -1
  72. package/lib/cjs/Schema.js.map +1 -1
  73. package/lib/cjs/SchemaSync.js.map +1 -1
  74. package/lib/cjs/SchemaUtils.js.map +1 -1
  75. package/lib/cjs/SheetIndex.js.map +1 -1
  76. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  77. package/lib/cjs/SqliteStatement.js.map +1 -1
  78. package/lib/cjs/StashManager.js.map +1 -1
  79. package/lib/cjs/Texture.js.map +1 -1
  80. package/lib/cjs/TileStorage.js.map +1 -1
  81. package/lib/cjs/TxnManager.js.map +1 -1
  82. package/lib/cjs/ViewDefinition.js.map +1 -1
  83. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  84. package/lib/cjs/ViewStore.js.map +1 -1
  85. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  86. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  87. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  88. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  89. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  92. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  93. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  94. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  95. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  96. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  97. package/lib/cjs/core-backend.js.map +1 -1
  98. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  99. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  100. package/lib/cjs/domains/GenericElements.js.map +1 -1
  101. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  102. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  103. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  104. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  105. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  106. package/lib/cjs/internal/HubMock.js.map +1 -1
  107. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  108. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  109. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  110. package/lib/cjs/internal/NoLocks.js.map +1 -1
  111. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  112. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  113. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  114. package/lib/cjs/internal/Symbols.js.map +1 -1
  115. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  116. package/lib/cjs/internal/cross-package.js.map +1 -1
  117. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  118. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  119. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  120. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  122. package/lib/cjs/rpc/multipart.js.map +1 -1
  123. package/lib/cjs/rpc/tracing.js.map +1 -1
  124. package/lib/cjs/rpc/web/logging.js.map +1 -1
  125. package/lib/cjs/rpc/web/request.js.map +1 -1
  126. package/lib/cjs/rpc/web/response.js.map +1 -1
  127. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  128. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  129. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  130. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  131. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  132. package/lib/cjs/workspace/Settings.js.map +1 -1
  133. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  134. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  135. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  136. package/lib/cjs/workspace/Workspace.js.map +1 -1
  137. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  138. package/lib/esm/BackendHubAccess.js.map +1 -1
  139. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  140. package/lib/esm/BisCoreSchema.js.map +1 -1
  141. package/lib/esm/BlobContainerService.js.map +1 -1
  142. package/lib/esm/BriefcaseManager.js.map +1 -1
  143. package/lib/esm/CatalogDb.js.map +1 -1
  144. package/lib/esm/Category.js.map +1 -1
  145. package/lib/esm/ChangeSummaryManager.js +2 -2
  146. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  147. package/lib/esm/ChangedElementsDb.js.map +1 -1
  148. package/lib/esm/ChangesetECAdaptor.js +248 -248
  149. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  150. package/lib/esm/ChangesetReader.js +3 -3
  151. package/lib/esm/ChangesetReader.js.map +1 -1
  152. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  153. package/lib/esm/ChannelControl.js.map +1 -1
  154. package/lib/esm/CheckpointManager.js.map +1 -1
  155. package/lib/esm/ClassRegistry.js +5 -5
  156. package/lib/esm/ClassRegistry.js.map +1 -1
  157. package/lib/esm/CloudSqlite.js.map +1 -1
  158. package/lib/esm/CodeService.js.map +1 -1
  159. package/lib/esm/CodeSpecs.js.map +1 -1
  160. package/lib/esm/ConcurrentQuery.js.map +1 -1
  161. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  162. package/lib/esm/DevTools.js.map +1 -1
  163. package/lib/esm/DisplayStyle.js.map +1 -1
  164. package/lib/esm/ECDb.js.map +1 -1
  165. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  166. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  167. package/lib/esm/ECSqlStatement.js.map +1 -1
  168. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  169. package/lib/esm/EditTxn.js.map +1 -1
  170. package/lib/esm/Element.js.map +1 -1
  171. package/lib/esm/ElementAspect.js.map +1 -1
  172. package/lib/esm/ElementGraphics.js.map +1 -1
  173. package/lib/esm/ElementTreeWalker.js.map +1 -1
  174. package/lib/esm/Entity.js.map +1 -1
  175. package/lib/esm/EntityReferences.js.map +1 -1
  176. package/lib/esm/ExportGraphics.js.map +1 -1
  177. package/lib/esm/ExternalSource.js.map +1 -1
  178. package/lib/esm/FontFile.js.map +1 -1
  179. package/lib/esm/GeoCoordConfig.js.map +1 -1
  180. package/lib/esm/GeographicCRSServices.js.map +1 -1
  181. package/lib/esm/GeometrySummary.js +47 -47
  182. package/lib/esm/GeometrySummary.js.map +1 -1
  183. package/lib/esm/IModelDb.js +8 -8
  184. package/lib/esm/IModelDb.js.map +1 -1
  185. package/lib/esm/IModelDbFonts.js.map +1 -1
  186. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  187. package/lib/esm/IModelHost.js.map +1 -1
  188. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  189. package/lib/esm/IModelJsFs.js.map +1 -1
  190. package/lib/esm/ImageSourceConversion.js.map +1 -1
  191. package/lib/esm/IpcHost.js.map +1 -1
  192. package/lib/esm/LineStyle.js.map +1 -1
  193. package/lib/esm/LocalHub.js +1 -1
  194. package/lib/esm/LocalHub.js.map +1 -1
  195. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  196. package/lib/esm/LockControl.js.map +1 -1
  197. package/lib/esm/Material.js.map +1 -1
  198. package/lib/esm/Model.js.map +1 -1
  199. package/lib/esm/NativeAppStorage.js.map +1 -1
  200. package/lib/esm/NativeHost.js.map +1 -1
  201. package/lib/esm/NavigationRelationship.js.map +1 -1
  202. package/lib/esm/PartialChangeUnifier.js +7 -7
  203. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  204. package/lib/esm/PromiseMemoizer.js.map +1 -1
  205. package/lib/esm/PropertyStore.js.map +1 -1
  206. package/lib/esm/Relationship.js.map +1 -1
  207. package/lib/esm/RpcBackend.js.map +1 -1
  208. package/lib/esm/SQLiteDb.js.map +1 -1
  209. package/lib/esm/Schema.js.map +1 -1
  210. package/lib/esm/SchemaSync.js.map +1 -1
  211. package/lib/esm/SchemaUtils.js.map +1 -1
  212. package/lib/esm/SheetIndex.js.map +1 -1
  213. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  214. package/lib/esm/SqliteStatement.js.map +1 -1
  215. package/lib/esm/StashManager.js.map +1 -1
  216. package/lib/esm/Texture.js.map +1 -1
  217. package/lib/esm/TileStorage.js.map +1 -1
  218. package/lib/esm/TxnManager.js.map +1 -1
  219. package/lib/esm/ViewDefinition.js.map +1 -1
  220. package/lib/esm/ViewStateHydrator.js.map +1 -1
  221. package/lib/esm/ViewStore.js.map +1 -1
  222. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  223. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  224. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  225. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  226. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  227. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  228. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  229. package/lib/esm/core-backend.js.map +1 -1
  230. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  231. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  232. package/lib/esm/domains/GenericElements.js.map +1 -1
  233. package/lib/esm/domains/GenericSchema.js.map +1 -1
  234. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  235. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  236. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  237. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  238. package/lib/esm/internal/HubMock.js.map +1 -1
  239. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  240. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  241. package/lib/esm/internal/NativePlatform.js.map +1 -1
  242. package/lib/esm/internal/NoLocks.js.map +1 -1
  243. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  244. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  245. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  246. package/lib/esm/internal/Symbols.js.map +1 -1
  247. package/lib/esm/internal/annotations/fields.js.map +1 -1
  248. package/lib/esm/internal/cross-package.js.map +1 -1
  249. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  250. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  251. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  252. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  253. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  254. package/lib/esm/rpc/multipart.js.map +1 -1
  255. package/lib/esm/rpc/tracing.js.map +1 -1
  256. package/lib/esm/rpc/web/logging.js.map +1 -1
  257. package/lib/esm/rpc/web/request.js.map +1 -1
  258. package/lib/esm/rpc/web/response.js.map +1 -1
  259. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  260. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  261. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  262. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  263. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  264. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  265. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  266. package/lib/esm/test/AttachDb.test.js +11 -11
  267. package/lib/esm/test/AttachDb.test.js.map +1 -1
  268. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  269. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  270. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  271. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  272. package/lib/esm/test/IModelHost.test.js.map +1 -1
  273. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  274. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  275. package/lib/esm/test/IpcHost.test.js.map +1 -1
  276. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  277. package/lib/esm/test/PrintElementTree.js.map +1 -1
  278. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  279. package/lib/esm/test/RevisionUtility.js.map +1 -1
  280. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  281. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  282. package/lib/esm/test/SchemaUtils.test.js +25 -25
  283. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  284. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  285. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  286. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  287. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  288. package/lib/esm/test/TestEditTxn.js.map +1 -1
  289. package/lib/esm/test/TestUtils.js.map +1 -1
  290. package/lib/esm/test/annotations/Fields.test.js +53 -53
  291. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  292. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  293. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  294. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  295. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  296. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  297. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  298. package/lib/esm/test/categories/Category.test.js.map +1 -1
  299. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  300. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  301. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  303. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  304. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  305. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  307. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  309. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  311. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  313. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  315. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  317. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  318. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  319. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  320. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  321. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  322. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  323. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  324. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  325. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  326. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  327. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  328. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  329. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  330. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  331. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  332. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  333. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  334. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  335. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  336. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  337. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  338. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  339. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  340. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  341. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  342. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  343. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  344. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  345. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  346. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  347. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  348. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  349. package/lib/esm/test/imageData.js.map +1 -1
  350. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  351. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  352. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  353. package/lib/esm/test/imodel/IModel.test.js +44 -44
  354. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  355. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  356. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  357. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  358. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  359. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  360. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  361. package/lib/esm/test/index.js.map +1 -1
  362. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  363. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  364. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  365. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  366. package/lib/esm/test/rpc/response.test.js.map +1 -1
  367. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  368. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  369. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  370. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  371. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  372. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  373. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  374. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  375. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  376. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  377. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  378. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  379. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  380. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  381. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  382. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  383. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  384. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  385. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  386. package/lib/esm/test/standalone/ChangesetReader.test.js +296 -296
  387. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  388. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  389. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  390. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  391. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  392. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  393. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  394. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  395. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  396. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  397. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  398. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  399. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  400. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  401. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  402. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  403. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  404. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  405. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  406. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  407. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  408. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  409. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  410. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  411. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  412. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  413. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  414. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  415. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  416. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  417. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  418. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  419. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  420. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  421. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  422. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  423. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  424. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  425. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  426. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  427. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  428. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  429. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  430. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  431. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  432. package/lib/esm/workspace/Settings.js.map +1 -1
  433. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  434. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  435. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  436. package/lib/esm/workspace/Workspace.js.map +1 -1
  437. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  438. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeElementParentModel.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangeElementParentModel.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { LineSegment3d, Point3d } from \"@itwin/core-geometry\";\r\nimport { Code, CodeScopeSpec, DefinitionElementProps, GeometryStreamBuilder, IModel, PhysicalElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { ChannelControl, DefinitionModel, EditTxn, IModelJsFs, PhysicalModel, SnapshotDb, SpatialCategory, StandaloneDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { withEditTxn } from \"../TestEditTxn\";\r\nimport { _cache } from \"../../internal/Symbols\";\r\n\r\ndescribe(\"changeElementParent and changeElementModel\", () => {\r\n let seedDb: SnapshotDb;\r\n let iModelDb: SnapshotDb;\r\n let modelAId: Id64String;\r\n let modelBId: Id64String;\r\n let defModelAId: Id64String;\r\n let defModelBId: Id64String;\r\n let categoryId: Id64String;\r\n let relatedElementCodeSpecId: Id64String;\r\n let modelScopedCodeSpecId: Id64String;\r\n let parentElementCodeSpecId: Id64String;\r\n let repositoryCodeSpecId: Id64String;\r\n let txn: EditTxn;\r\n\r\n before(async () => {\r\n IModelJsFs.recursiveMkDirSync(KnownTestLocations.outputDir);\r\n const seedFile = IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"seed.bim\");\r\n seedDb = SnapshotDb.createEmpty(seedFile, { rootSubject: { name: \"ChangeElementParentModel\" } });\r\n\r\n await withEditTxn(seedDb, \"setup seed\", async (editTxn) => {\r\n modelAId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"ModelA\");\r\n modelBId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"ModelB\");\r\n defModelAId = DefinitionModel.insert(editTxn, IModel.rootSubjectId, \"DefinitionModelA\");\r\n defModelBId = DefinitionModel.insert(editTxn, IModel.rootSubjectId, \"DefinitionModelB\");\r\n categoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\r\n relatedElementCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"RelatedElementCodeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n modelScopedCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"ModelScopedCodeSpec\", CodeScopeSpec.Type.Model);\r\n parentElementCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"ParentElementCodeSpec\", CodeScopeSpec.Type.ParentElement);\r\n repositoryCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"RepositoryCodeSpec\", CodeScopeSpec.Type.Repository);\r\n assert.isNotEmpty(modelAId, \"Expected a valid PhysicalModel id for ModelA\");\r\n assert.isNotEmpty(modelBId, \"Expected a valid PhysicalModel id for ModelB\");\r\n assert.isNotEmpty(defModelAId, \"Expected a valid DefinitionModel id for DefinitionModelA\");\r\n assert.isNotEmpty(defModelBId, \"Expected a valid DefinitionModel id for DefinitionModelB\");\r\n assert.isNotEmpty(categoryId, \"Expected a valid SpatialCategory id\");\r\n assert.isNotEmpty(relatedElementCodeSpecId, \"Expected a valid RelatedElement CodeSpec id\");\r\n assert.isNotEmpty(modelScopedCodeSpecId, \"Expected a valid Model CodeSpec id\");\r\n assert.isNotEmpty(parentElementCodeSpecId, \"Expected a valid ParentElement CodeSpec id\");\r\n assert.isNotEmpty(repositoryCodeSpecId, \"Expected a valid Repository CodeSpec id\");\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n iModelDb = SnapshotDb.createFrom(seedDb, IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"ChangeElementParentModel.bim\"));\r\n assert.isTrue(iModelDb.isOpen);\r\n txn = new EditTxn(iModelDb, \"change element parent/model\");\r\n txn.start();\r\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n afterEach(() => {\r\n if (txn.isActive)\r\n txn.end(\"abandon\");\r\n if (iModelDb.isOpen)\r\n iModelDb.close();\r\n });\r\n\r\n after(() => {\r\n if (seedDb.isOpen)\r\n seedDb.close();\r\n });\r\n\r\n const insertElement = (modelId: Id64String, opts: { parentId?: Id64String; codeSpec?: Id64String; codeScope?: Id64String; codeValue?: string; withGeometry?: boolean } = {}): Id64String => {\r\n const { parentId, codeSpec, codeScope, codeValue, withGeometry } = opts;\r\n const builder = new GeometryStreamBuilder();\r\n if (withGeometry)\r\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(1, 0, 0)));\r\n\r\n const props: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: modelId,\r\n category: categoryId,\r\n code: codeSpec && codeScope && codeValue ? { spec: codeSpec, scope: codeScope, value: codeValue } : Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n ...(withGeometry ? { geom: builder.geometryStream } : {}),\r\n ...(parentId ? { parent: { id: parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\r\n };\r\n const id = txn.insertElement(props);\r\n assert.isNotEmpty(id, \"insertElement must return a valid ID\");\r\n txn.saveChanges();\r\n return id;\r\n };\r\n\r\n describe(\"changeElementParent\", () => {\r\n it(\"changes parent of a leaf element in the same model\", () => {\r\n const parentA = insertElement(modelAId);\r\n const leaf = insertElement(modelAId, { parentId: parentA });\r\n const parentB = insertElement(modelAId);\r\n\r\n txn.changeElementParent({ id: leaf, parentId: parentB });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(leaf);\r\n assert.equal(moved.model, modelAId, \"model should remain the same\");\r\n assert.equal(moved.parent?.id, parentB, \"parent should be updated to parentB\");\r\n });\r\n\r\n it(\"leaves children attached and in the same model when reparenting within the same model\", () => {\r\n const parent = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: parent });\r\n const newParent = insertElement(modelAId);\r\n\r\n txn.changeElementParent({ id: parent, parentId: newParent });\r\n txn.saveChanges();\r\n\r\n const movedParent = iModelDb.elements.getElementProps(parent);\r\n assert.equal(movedParent.model, modelAId, \"model stays the same\");\r\n assert.equal(movedParent.parent?.id, newParent, \"parent updated\");\r\n\r\n const movedChild = iModelDb.elements.getElementProps(child);\r\n assert.equal(movedChild.model, modelAId, \"child model stays the same\");\r\n assert.equal(movedChild.parent?.id, parent, \"child still parented to the moved element\");\r\n });\r\n\r\n it(\"allows an element with a RelatedElement-scoped code\", () => {\r\n const parentA = insertElement(modelAId);\r\n const leaf = insertElement(modelAId, {\r\n parentId: parentA,\r\n codeSpec: relatedElementCodeSpecId,\r\n codeScope: parentA,\r\n codeValue: \"RelatedCode\",\r\n });\r\n const parentB = insertElement(modelAId);\r\n\r\n txn.changeElementParent({ id: leaf, parentId: parentB });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(leaf);\r\n assert.equal(moved.parent?.id, parentB, \"parent should be updated\");\r\n });\r\n\r\n it(\"allows an element with a Model-scoped code (the model does not change)\", () => {\r\n const parentA = insertElement(modelAId);\r\n const leaf = insertElement(modelAId, {\r\n parentId: parentA,\r\n codeSpec: modelScopedCodeSpecId,\r\n codeScope: modelAId,\r\n codeValue: \"ModelScopedSameModel\",\r\n });\r\n const parentB = insertElement(modelAId);\r\n\r\n txn.changeElementParent({ id: leaf, parentId: parentB });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(leaf);\r\n assert.equal(moved.parent?.id, parentB, \"parent should be updated within same model\");\r\n });\r\n\r\n it(\"blocks an element with a ParentElement-scoped code\", () => {\r\n const parentA = insertElement(modelAId);\r\n const leaf = insertElement(modelAId, {\r\n parentId: parentA,\r\n codeSpec: parentElementCodeSpecId,\r\n codeScope: parentA,\r\n codeValue: \"ParentScopedCode\",\r\n });\r\n const parentB = insertElement(modelAId);\r\n\r\n expect(() => txn.changeElementParent({ id: leaf, parentId: parentB })).to.throw();\r\n });\r\n\r\n it(\"rejects self-parenting and leaves the element unchanged\", () => {\r\n const elem = insertElement(modelAId);\r\n\r\n expect(() => txn.changeElementParent({ id: elem, parentId: elem })).to.throw();\r\n\r\n const unchanged = iModelDb.elements.getElementProps(elem);\r\n assert.equal(unchanged.model, modelAId, \"model should remain unchanged\");\r\n assert.isUndefined(unchanged.parent, \"element should remain a root\");\r\n });\r\n\r\n it(\"rejects reparenting to a parent in a different model\", () => {\r\n const parentInA = insertElement(modelAId);\r\n const leaf = insertElement(modelAId, { parentId: parentInA });\r\n const targetInB = insertElement(modelBId);\r\n\r\n expect(() => txn.changeElementParent({ id: leaf, parentId: targetInB })).to.throw(\"different model\");\r\n\r\n // A rejected reparent must leave the element untouched.\r\n const unchanged = iModelDb.elements.getElementProps(leaf);\r\n assert.equal(unchanged.model, modelAId, \"model should remain ModelA\");\r\n assert.equal(unchanged.parent?.id, parentInA, \"parent should remain unchanged\");\r\n });\r\n });\r\n\r\n describe(\"changeElementModel\", () => {\r\n it(\"changes model of a leaf element (becomes root in new model)\", () => {\r\n const elem = insertElement(modelAId);\r\n\r\n txn.changeElementModel({ id: elem, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(elem);\r\n assert.equal(moved.model, modelBId, \"model should change to ModelB\");\r\n assert.isUndefined(moved.parent, \"element should have no parent (root in ModelB)\");\r\n });\r\n\r\n it(\"blocks moving an element that has a parent\", () => {\r\n const parent = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: parent });\r\n\r\n // Only root elements (no parent) can be moved between models.\r\n expect(() => txn.changeElementModel({ id: child, modelId: modelBId })).to.throw();\r\n });\r\n\r\n it(\"moves the whole subtree when changing the model of a root element with children\", () => {\r\n // A root element (no parent) may itself have children. BIS requires a parent and all of its\r\n // children to reside in the same model (see element-fundamentals: \"Both the parent and the\r\n // children must live in the same Model\"). Moving such a root must therefore move its entire\r\n // subtree, never leave the children orphaned in the source model.\r\n const root = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: root });\r\n const grandchild = insertElement(modelAId, { parentId: child });\r\n\r\n txn.changeElementModel({ id: root, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n const movedRoot = iModelDb.elements.getElementProps(root);\r\n const movedChild = iModelDb.elements.getElementProps(child);\r\n const movedGrandchild = iModelDb.elements.getElementProps(grandchild);\r\n\r\n // The root moves to the target model.\r\n assert.equal(movedRoot.model, modelBId, \"root should move to ModelB\");\r\n // The descendants must move with it - otherwise the assembly spans two models (BIS-invalid).\r\n assert.equal(movedChild.model, modelBId, \"child must move with its parent (same-model invariant)\");\r\n assert.equal(movedGrandchild.model, modelBId, \"grandchild must move with the subtree\");\r\n // The hierarchy itself must be preserved.\r\n assert.equal(movedChild.parent?.id, root, \"child still parented to root\");\r\n assert.equal(movedGrandchild.parent?.id, child, \"grandchild still parented to child\");\r\n });\r\n\r\n it(\"invalidates cached descendant props after the subtree move\", () => {\r\n // Reading descendant props before the move populates the element cache with the source model.\r\n // Since the entire subtree is relocated, those cached entries become stale and must be invalidated;\r\n // otherwise a subsequent read returns the old model. This regresses the bug where only the moved\r\n // root's cache was invalidated.\r\n const root = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: root });\r\n const grandchild = insertElement(modelAId, { parentId: child });\r\n\r\n // Prime the cache while the subtree is still in ModelA.\r\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child starts in ModelA\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild starts in ModelA\");\r\n\r\n txn.changeElementModel({ id: root, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n // Reads after the move must reflect the new model, not the stale cached value.\r\n assert.equal(iModelDb.elements.getElementProps(root).model, modelBId, \"root cache must reflect ModelB\");\r\n assert.equal(iModelDb.elements.getElementProps(child).model, modelBId, \"child cache must be invalidated and reflect ModelB\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelBId, \"grandchild cache must be invalidated and reflect ModelB\");\r\n });\r\n\r\n it(\"invalidates the source and target model cache entries after the move\", () => {\r\n // Moving an element between models changes the membership - and therefore the geometry-derived state\r\n // such as GeometricModel.geometryGuid - of both the source and target models. Element insert/update/\r\n // delete invalidate models[_cache] via Element.onInserted/onUpdated/onDeleted for the same reason, but\r\n // the native changeElementModel does not fire those element callbacks. The wrapper must therefore evict\r\n // both affected models so a subsequent getModelProps does not return stale, pre-move ModelProps.\r\n const elem = insertElement(modelAId);\r\n\r\n // Prime the model cache for both the source and target models.\r\n iModelDb.models.getModelProps(modelAId);\r\n iModelDb.models.getModelProps(modelBId);\r\n assert.isDefined(iModelDb.models[_cache].get(modelAId), \"source model should be cached before the move\");\r\n assert.isDefined(iModelDb.models[_cache].get(modelBId), \"target model should be cached before the move\");\r\n\r\n txn.changeElementModel({ id: elem, modelId: modelBId });\r\n\r\n // Both affected models must be evicted from the cache after the native move.\r\n assert.isUndefined(iModelDb.models[_cache].get(modelAId), \"source model cache must be invalidated after the move\");\r\n assert.isUndefined(iModelDb.models[_cache].get(modelBId), \"target model cache must be invalidated after the move\");\r\n });\r\n\r\n it(\"requires exclusive locks for every element in the moved subtree\", () => {\r\n const root = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: root });\r\n const grandchild = insertElement(modelAId, { parentId: child });\r\n const originalLocks = iModelDb.locks;\r\n const checkedIds: Id64String[] = [];\r\n\r\n (iModelDb as any)._locks = new Proxy(originalLocks, {\r\n get(target, prop, receiver) {\r\n if (prop === \"checkExclusiveLock\")\r\n return (id: Id64String) => {\r\n checkedIds.push(id);\r\n if (id === child)\r\n throw new Error(`missing child lock ${child}`);\r\n };\r\n\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n\r\n try {\r\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw(`missing child lock ${child}`);\r\n } finally {\r\n (iModelDb as any)._locks = originalLocks;\r\n }\r\n\r\n assert.includeMembers(checkedIds, [root, child], \"root and child locks must be checked before the native move\");\r\n assert.equal(iModelDb.elements.getElementProps(root).model, modelAId, \"root must remain in ModelA\");\r\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child must remain in ModelA\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild must remain in ModelA\");\r\n });\r\n\r\n it(\"updates source and target model geometry guids when moving geometric elements\", () => {\r\n const fileName = IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"GeometryGuidMove.bim\");\r\n const db = StandaloneDb.createEmpty(fileName, { rootSubject: { name: \"GeometryGuidMove\" }, enableTransactions: true });\r\n db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n try {\r\n const ids = withEditTxn(db, \"setup geometry guid move test\", (editTxn) => {\r\n const sourceModelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"SourceModel\");\r\n const targetModelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"TargetModel\");\r\n const localCategoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"GeometryGuidCategory\", new SubCategoryAppearance());\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(1, 0, 0)));\r\n const elementProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: sourceModelId,\r\n category: localCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n geom: builder.geometryStream,\r\n };\r\n const elementId = editTxn.insertElement(elementProps);\r\n return { elementId, sourceModelId, targetModelId };\r\n });\r\n\r\n const sourceGuidBefore = db.models.getModel<PhysicalModel>(ids.sourceModelId).geometryGuid;\r\n const targetGuidBefore = db.models.getModel<PhysicalModel>(ids.targetModelId).geometryGuid;\r\n\r\n withEditTxn(db, \"move geometry between models\", (editTxn) => {\r\n editTxn.changeElementModel({ id: ids.elementId, modelId: ids.targetModelId });\r\n });\r\n\r\n const sourceGuidAfter = db.models.getModel<PhysicalModel>(ids.sourceModelId).geometryGuid;\r\n const targetGuidAfter = db.models.getModel<PhysicalModel>(ids.targetModelId).geometryGuid;\r\n assert.isDefined(sourceGuidBefore, \"source model should have a geometry guid after inserting geometry\");\r\n assert.notEqual(sourceGuidAfter, sourceGuidBefore, \"source model geometry guid must change after losing geometry\");\r\n assert.isDefined(targetGuidAfter, \"target model should have a geometry guid after receiving geometry\");\r\n assert.notEqual(targetGuidAfter, targetGuidBefore, \"target model geometry guid must change after receiving geometry\");\r\n } finally {\r\n db.close();\r\n IModelJsFs.removeSync(fileName);\r\n }\r\n });\r\n\r\n it(\"recursively moves a multi-level subtree with multiple children at each level\", () => {\r\n // A subtree is more than a single chain: a node can have several children, each with their own\r\n // descendants. The recursive move must relocate every node in the tree, not just one branch.\r\n // root\r\n // ├── childA\r\n // │ ├── grandchildA1\r\n // │ └── grandchildA2\r\n // └── childB\r\n // └── grandchildB1\r\n const root = insertElement(modelAId);\r\n const childA = insertElement(modelAId, { parentId: root });\r\n const childB = insertElement(modelAId, { parentId: root });\r\n const grandchildA1 = insertElement(modelAId, { parentId: childA });\r\n const grandchildA2 = insertElement(modelAId, { parentId: childA });\r\n const grandchildB1 = insertElement(modelAId, { parentId: childB });\r\n\r\n txn.changeElementModel({ id: root, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n // Every node in the tree must be relocated to the target model.\r\n for (const id of [root, childA, childB, grandchildA1, grandchildA2, grandchildB1])\r\n assert.equal(iModelDb.elements.getElementProps(id).model, modelBId, `element ${id} must move to ModelB`);\r\n\r\n // The parent-child hierarchy must be preserved across the move.\r\n assert.isUndefined(iModelDb.elements.getElementProps(root).parent, \"root stays a root in ModelB\");\r\n assert.equal(iModelDb.elements.getElementProps(childA).parent?.id, root, \"childA still parented to root\");\r\n assert.equal(iModelDb.elements.getElementProps(childB).parent?.id, root, \"childB still parented to root\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchildA1).parent?.id, childA, \"grandchildA1 still parented to childA\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchildA2).parent?.id, childA, \"grandchildA2 still parented to childA\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchildB1).parent?.id, childB, \"grandchildB1 still parented to childB\");\r\n });\r\n\r\n it(\"blocks an element with a Model-scoped code\", () => {\r\n const elem = insertElement(modelAId, {\r\n codeSpec: modelScopedCodeSpecId,\r\n codeScope: modelAId,\r\n codeValue: \"ModelScopedCode\",\r\n });\r\n\r\n expect(() => txn.changeElementModel({ id: elem, modelId: modelBId })).to.throw();\r\n });\r\n\r\n it(\"blocks the subtree move when a descendant has a Model-scoped code, leaving the whole subtree untouched\", () => {\r\n // A Model-scoped code cannot survive a model change. Because the entire subtree is validated before\r\n // anything moves, a Model-scoped code anywhere in the subtree (here on a grandchild) rejects the whole\r\n // operation — and nothing is moved. This exercises the validate-first atomicity of the recursive move.\r\n const root = insertElement(modelAId);\r\n const child = insertElement(modelAId, { parentId: root });\r\n const grandchild = insertElement(modelAId, {\r\n parentId: child,\r\n codeSpec: modelScopedCodeSpecId,\r\n codeScope: modelAId,\r\n codeValue: \"DescendantModelScoped\",\r\n });\r\n\r\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw();\r\n\r\n // Atomicity: the rejected move must leave the entire subtree in the source model.\r\n assert.equal(iModelDb.elements.getElementProps(root).model, modelAId, \"root must stay in ModelA\");\r\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child must stay in ModelA\");\r\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild must stay in ModelA\");\r\n });\r\n\r\n it(\"allows the subtree move when a descendant has a ParentElement-scoped code (its parent moves with it)\", () => {\r\n // A ParentElement-scoped code is anchored to the element's parent. When the subtree moves, a descendant\r\n // keeps its parent (the parent moves too), so the code stays valid and the move is allowed. This is the\r\n // descendant counterpart to the blocked root case below, exercising the isRoot distinction in the addon.\r\n const root = insertElement(modelAId);\r\n const child = insertElement(modelAId, {\r\n parentId: root,\r\n codeSpec: parentElementCodeSpecId,\r\n codeScope: root,\r\n codeValue: \"DescendantParentScoped\",\r\n });\r\n const grandchild = insertElement(modelAId, {\r\n parentId: child,\r\n codeSpec: parentElementCodeSpecId,\r\n codeScope: child,\r\n codeValue: \"DeeperParentScoped\",\r\n });\r\n\r\n txn.changeElementModel({ id: root, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n assert.equal(iModelDb.elements.getElementProps(root).model, modelBId, \"root moves to ModelB\");\r\n const movedChild = iModelDb.elements.getElementProps(child);\r\n assert.equal(movedChild.model, modelBId, \"child with parent-scoped code moves with the subtree\");\r\n assert.equal(movedChild.parent?.id, root, \"child remains parented to root\");\r\n const movedGrandchild = iModelDb.elements.getElementProps(grandchild);\r\n assert.equal(movedGrandchild.model, modelBId, \"grandchild with parent-scoped code moves with the subtree\");\r\n assert.equal(movedGrandchild.parent?.id, child, \"grandchild remains parented to child\");\r\n });\r\n\r\n it(\"blocks moving a root element that has a ParentElement-scoped code\", () => {\r\n // The moved root has no parent to anchor a ParentElement-scoped code, so the move is blocked\r\n // (use delete+insert instead). Contrast with the descendant case above, which is allowed.\r\n const scopeElem = insertElement(modelAId);\r\n const root = insertElement(modelAId, {\r\n codeSpec: parentElementCodeSpecId,\r\n codeScope: scopeElem,\r\n codeValue: \"RootParentScoped\",\r\n });\r\n\r\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw();\r\n });\r\n\r\n it(\"allows an element with a RelatedElement-scoped code\", () => {\r\n const scopeElem = insertElement(modelAId);\r\n const elem = insertElement(modelAId, {\r\n codeSpec: relatedElementCodeSpecId,\r\n codeScope: scopeElem,\r\n codeValue: \"RelatedCode\",\r\n });\r\n\r\n txn.changeElementModel({ id: elem, modelId: modelBId });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(elem);\r\n assert.equal(moved.model, modelBId, \"model should change to ModelB\");\r\n });\r\n\r\n it(\"rejects a model change when the model types differ\", () => {\r\n const physElem = insertElement(modelAId);\r\n\r\n expect(() => txn.changeElementModel({ id: physElem, modelId: defModelAId })).to.throw(\"cannot move element from model of type\");\r\n });\r\n\r\n it(\"throws when attempting to change the model of a partition element\", () => {\r\n expect(() => txn.changeElementModel({ id: modelAId, modelId: modelBId })).to.throw();\r\n });\r\n });\r\n\r\n describe(\"definition models\", () => {\r\n const insertDefinitionElement = (modelId: Id64String, name: string, opts: { parentId?: Id64String } = {}): Id64String => {\r\n const props: DefinitionElementProps = {\r\n classFullName: \"Generic:PhysicalType\",\r\n model: modelId,\r\n code: { spec: relatedElementCodeSpecId, scope: modelId, value: name },\r\n ...(opts.parentId ? { parent: { id: opts.parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\r\n };\r\n const id = txn.insertElement(props);\r\n assert.isNotEmpty(id, \"insertDefinitionElement must return a valid ID\");\r\n txn.saveChanges();\r\n return id;\r\n };\r\n\r\n it(\"moves a definition element to another definition model via changeElementModel\", () => {\r\n const defElem = insertDefinitionElement(defModelAId, \"MovableCategoryA\");\r\n\r\n txn.changeElementModel({ id: defElem, modelId: defModelBId });\r\n txn.saveChanges();\r\n\r\n const moved = iModelDb.elements.getElementProps(defElem);\r\n assert.equal(moved.model, defModelBId, \"model should change to DefinitionModelB\");\r\n assert.isUndefined(moved.parent, \"element should be a root in DefinitionModelB\");\r\n });\r\n\r\n it(\"rejects reparenting a definition element across definition models\", () => {\r\n const defElem = insertDefinitionElement(defModelAId, \"MovableCategoryB\");\r\n const targetElem = insertDefinitionElement(defModelBId, \"TargetInDefB\");\r\n\r\n expect(() => txn.changeElementParent({ id: defElem, parentId: targetElem })).to.throw(\"different model\");\r\n });\r\n\r\n it(\"rejects changing the parent of a physical element to a parent in a definition model\", () => {\r\n const physElem = insertElement(modelAId);\r\n const defTarget = insertDefinitionElement(defModelAId, \"DefTargetForPhys\");\r\n\r\n expect(() => txn.changeElementParent({ id: physElem, parentId: defTarget })).to.throw(\"different model\");\r\n });\r\n\r\n it(\"rejects changing a physical element to a definition model\", () => {\r\n const physElem = insertElement(modelAId);\r\n\r\n expect(() => txn.changeElementModel({ id: physElem, modelId: defModelAId })).to.throw(\"cannot move element from model of type\");\r\n });\r\n\r\n it(\"rejects changing a definition element into a physical model\", () => {\r\n const defElem = insertDefinitionElement(defModelAId, \"DefElemToMoveToPhys\");\r\n\r\n expect(() => txn.changeElementModel({ id: defElem, modelId: modelAId })).to.throw(\"cannot move element from model of type\");\r\n });\r\n });\r\n\r\n});\r\n"]}
1
+ {"version":3,"file":"ChangeElementParentModel.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangeElementParentModel.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 { assert, expect } from \"chai\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { LineSegment3d, Point3d } from \"@itwin/core-geometry\";\nimport { Code, CodeScopeSpec, DefinitionElementProps, GeometryStreamBuilder, IModel, PhysicalElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { ChannelControl, DefinitionModel, EditTxn, IModelJsFs, PhysicalModel, SnapshotDb, SpatialCategory, StandaloneDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { withEditTxn } from \"../TestEditTxn\";\nimport { _cache } from \"../../internal/Symbols\";\n\ndescribe(\"changeElementParent and changeElementModel\", () => {\n let seedDb: SnapshotDb;\n let iModelDb: SnapshotDb;\n let modelAId: Id64String;\n let modelBId: Id64String;\n let defModelAId: Id64String;\n let defModelBId: Id64String;\n let categoryId: Id64String;\n let relatedElementCodeSpecId: Id64String;\n let modelScopedCodeSpecId: Id64String;\n let parentElementCodeSpecId: Id64String;\n let repositoryCodeSpecId: Id64String;\n let txn: EditTxn;\n\n before(async () => {\n IModelJsFs.recursiveMkDirSync(KnownTestLocations.outputDir);\n const seedFile = IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"seed.bim\");\n seedDb = SnapshotDb.createEmpty(seedFile, { rootSubject: { name: \"ChangeElementParentModel\" } });\n\n await withEditTxn(seedDb, \"setup seed\", async (editTxn) => {\n modelAId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"ModelA\");\n modelBId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"ModelB\");\n defModelAId = DefinitionModel.insert(editTxn, IModel.rootSubjectId, \"DefinitionModelA\");\n defModelBId = DefinitionModel.insert(editTxn, IModel.rootSubjectId, \"DefinitionModelB\");\n categoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\n relatedElementCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"RelatedElementCodeSpec\", CodeScopeSpec.Type.RelatedElement);\n modelScopedCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"ModelScopedCodeSpec\", CodeScopeSpec.Type.Model);\n parentElementCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"ParentElementCodeSpec\", CodeScopeSpec.Type.ParentElement);\n repositoryCodeSpecId = seedDb.codeSpecs.insert(editTxn, \"RepositoryCodeSpec\", CodeScopeSpec.Type.Repository);\n assert.isNotEmpty(modelAId, \"Expected a valid PhysicalModel id for ModelA\");\n assert.isNotEmpty(modelBId, \"Expected a valid PhysicalModel id for ModelB\");\n assert.isNotEmpty(defModelAId, \"Expected a valid DefinitionModel id for DefinitionModelA\");\n assert.isNotEmpty(defModelBId, \"Expected a valid DefinitionModel id for DefinitionModelB\");\n assert.isNotEmpty(categoryId, \"Expected a valid SpatialCategory id\");\n assert.isNotEmpty(relatedElementCodeSpecId, \"Expected a valid RelatedElement CodeSpec id\");\n assert.isNotEmpty(modelScopedCodeSpecId, \"Expected a valid Model CodeSpec id\");\n assert.isNotEmpty(parentElementCodeSpecId, \"Expected a valid ParentElement CodeSpec id\");\n assert.isNotEmpty(repositoryCodeSpecId, \"Expected a valid Repository CodeSpec id\");\n });\n });\n\n beforeEach(() => {\n iModelDb = SnapshotDb.createFrom(seedDb, IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"ChangeElementParentModel.bim\"));\n assert.isTrue(iModelDb.isOpen);\n txn = new EditTxn(iModelDb, \"change element parent/model\");\n txn.start();\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n afterEach(() => {\n if (txn.isActive)\n txn.end(\"abandon\");\n if (iModelDb.isOpen)\n iModelDb.close();\n });\n\n after(() => {\n if (seedDb.isOpen)\n seedDb.close();\n });\n\n const insertElement = (modelId: Id64String, opts: { parentId?: Id64String; codeSpec?: Id64String; codeScope?: Id64String; codeValue?: string; withGeometry?: boolean } = {}): Id64String => {\n const { parentId, codeSpec, codeScope, codeValue, withGeometry } = opts;\n const builder = new GeometryStreamBuilder();\n if (withGeometry)\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(1, 0, 0)));\n\n const props: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: modelId,\n category: categoryId,\n code: codeSpec && codeScope && codeValue ? { spec: codeSpec, scope: codeScope, value: codeValue } : Code.createEmpty(),\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\n ...(withGeometry ? { geom: builder.geometryStream } : {}),\n ...(parentId ? { parent: { id: parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\n };\n const id = txn.insertElement(props);\n assert.isNotEmpty(id, \"insertElement must return a valid ID\");\n txn.saveChanges();\n return id;\n };\n\n describe(\"changeElementParent\", () => {\n it(\"changes parent of a leaf element in the same model\", () => {\n const parentA = insertElement(modelAId);\n const leaf = insertElement(modelAId, { parentId: parentA });\n const parentB = insertElement(modelAId);\n\n txn.changeElementParent({ id: leaf, parentId: parentB });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(leaf);\n assert.equal(moved.model, modelAId, \"model should remain the same\");\n assert.equal(moved.parent?.id, parentB, \"parent should be updated to parentB\");\n });\n\n it(\"leaves children attached and in the same model when reparenting within the same model\", () => {\n const parent = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: parent });\n const newParent = insertElement(modelAId);\n\n txn.changeElementParent({ id: parent, parentId: newParent });\n txn.saveChanges();\n\n const movedParent = iModelDb.elements.getElementProps(parent);\n assert.equal(movedParent.model, modelAId, \"model stays the same\");\n assert.equal(movedParent.parent?.id, newParent, \"parent updated\");\n\n const movedChild = iModelDb.elements.getElementProps(child);\n assert.equal(movedChild.model, modelAId, \"child model stays the same\");\n assert.equal(movedChild.parent?.id, parent, \"child still parented to the moved element\");\n });\n\n it(\"allows an element with a RelatedElement-scoped code\", () => {\n const parentA = insertElement(modelAId);\n const leaf = insertElement(modelAId, {\n parentId: parentA,\n codeSpec: relatedElementCodeSpecId,\n codeScope: parentA,\n codeValue: \"RelatedCode\",\n });\n const parentB = insertElement(modelAId);\n\n txn.changeElementParent({ id: leaf, parentId: parentB });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(leaf);\n assert.equal(moved.parent?.id, parentB, \"parent should be updated\");\n });\n\n it(\"allows an element with a Model-scoped code (the model does not change)\", () => {\n const parentA = insertElement(modelAId);\n const leaf = insertElement(modelAId, {\n parentId: parentA,\n codeSpec: modelScopedCodeSpecId,\n codeScope: modelAId,\n codeValue: \"ModelScopedSameModel\",\n });\n const parentB = insertElement(modelAId);\n\n txn.changeElementParent({ id: leaf, parentId: parentB });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(leaf);\n assert.equal(moved.parent?.id, parentB, \"parent should be updated within same model\");\n });\n\n it(\"blocks an element with a ParentElement-scoped code\", () => {\n const parentA = insertElement(modelAId);\n const leaf = insertElement(modelAId, {\n parentId: parentA,\n codeSpec: parentElementCodeSpecId,\n codeScope: parentA,\n codeValue: \"ParentScopedCode\",\n });\n const parentB = insertElement(modelAId);\n\n expect(() => txn.changeElementParent({ id: leaf, parentId: parentB })).to.throw();\n });\n\n it(\"rejects self-parenting and leaves the element unchanged\", () => {\n const elem = insertElement(modelAId);\n\n expect(() => txn.changeElementParent({ id: elem, parentId: elem })).to.throw();\n\n const unchanged = iModelDb.elements.getElementProps(elem);\n assert.equal(unchanged.model, modelAId, \"model should remain unchanged\");\n assert.isUndefined(unchanged.parent, \"element should remain a root\");\n });\n\n it(\"rejects reparenting to a parent in a different model\", () => {\n const parentInA = insertElement(modelAId);\n const leaf = insertElement(modelAId, { parentId: parentInA });\n const targetInB = insertElement(modelBId);\n\n expect(() => txn.changeElementParent({ id: leaf, parentId: targetInB })).to.throw(\"different model\");\n\n // A rejected reparent must leave the element untouched.\n const unchanged = iModelDb.elements.getElementProps(leaf);\n assert.equal(unchanged.model, modelAId, \"model should remain ModelA\");\n assert.equal(unchanged.parent?.id, parentInA, \"parent should remain unchanged\");\n });\n });\n\n describe(\"changeElementModel\", () => {\n it(\"changes model of a leaf element (becomes root in new model)\", () => {\n const elem = insertElement(modelAId);\n\n txn.changeElementModel({ id: elem, modelId: modelBId });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(elem);\n assert.equal(moved.model, modelBId, \"model should change to ModelB\");\n assert.isUndefined(moved.parent, \"element should have no parent (root in ModelB)\");\n });\n\n it(\"blocks moving an element that has a parent\", () => {\n const parent = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: parent });\n\n // Only root elements (no parent) can be moved between models.\n expect(() => txn.changeElementModel({ id: child, modelId: modelBId })).to.throw();\n });\n\n it(\"moves the whole subtree when changing the model of a root element with children\", () => {\n // A root element (no parent) may itself have children. BIS requires a parent and all of its\n // children to reside in the same model (see element-fundamentals: \"Both the parent and the\n // children must live in the same Model\"). Moving such a root must therefore move its entire\n // subtree, never leave the children orphaned in the source model.\n const root = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: root });\n const grandchild = insertElement(modelAId, { parentId: child });\n\n txn.changeElementModel({ id: root, modelId: modelBId });\n txn.saveChanges();\n\n const movedRoot = iModelDb.elements.getElementProps(root);\n const movedChild = iModelDb.elements.getElementProps(child);\n const movedGrandchild = iModelDb.elements.getElementProps(grandchild);\n\n // The root moves to the target model.\n assert.equal(movedRoot.model, modelBId, \"root should move to ModelB\");\n // The descendants must move with it - otherwise the assembly spans two models (BIS-invalid).\n assert.equal(movedChild.model, modelBId, \"child must move with its parent (same-model invariant)\");\n assert.equal(movedGrandchild.model, modelBId, \"grandchild must move with the subtree\");\n // The hierarchy itself must be preserved.\n assert.equal(movedChild.parent?.id, root, \"child still parented to root\");\n assert.equal(movedGrandchild.parent?.id, child, \"grandchild still parented to child\");\n });\n\n it(\"invalidates cached descendant props after the subtree move\", () => {\n // Reading descendant props before the move populates the element cache with the source model.\n // Since the entire subtree is relocated, those cached entries become stale and must be invalidated;\n // otherwise a subsequent read returns the old model. This regresses the bug where only the moved\n // root's cache was invalidated.\n const root = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: root });\n const grandchild = insertElement(modelAId, { parentId: child });\n\n // Prime the cache while the subtree is still in ModelA.\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child starts in ModelA\");\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild starts in ModelA\");\n\n txn.changeElementModel({ id: root, modelId: modelBId });\n txn.saveChanges();\n\n // Reads after the move must reflect the new model, not the stale cached value.\n assert.equal(iModelDb.elements.getElementProps(root).model, modelBId, \"root cache must reflect ModelB\");\n assert.equal(iModelDb.elements.getElementProps(child).model, modelBId, \"child cache must be invalidated and reflect ModelB\");\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelBId, \"grandchild cache must be invalidated and reflect ModelB\");\n });\n\n it(\"invalidates the source and target model cache entries after the move\", () => {\n // Moving an element between models changes the membership - and therefore the geometry-derived state\n // such as GeometricModel.geometryGuid - of both the source and target models. Element insert/update/\n // delete invalidate models[_cache] via Element.onInserted/onUpdated/onDeleted for the same reason, but\n // the native changeElementModel does not fire those element callbacks. The wrapper must therefore evict\n // both affected models so a subsequent getModelProps does not return stale, pre-move ModelProps.\n const elem = insertElement(modelAId);\n\n // Prime the model cache for both the source and target models.\n iModelDb.models.getModelProps(modelAId);\n iModelDb.models.getModelProps(modelBId);\n assert.isDefined(iModelDb.models[_cache].get(modelAId), \"source model should be cached before the move\");\n assert.isDefined(iModelDb.models[_cache].get(modelBId), \"target model should be cached before the move\");\n\n txn.changeElementModel({ id: elem, modelId: modelBId });\n\n // Both affected models must be evicted from the cache after the native move.\n assert.isUndefined(iModelDb.models[_cache].get(modelAId), \"source model cache must be invalidated after the move\");\n assert.isUndefined(iModelDb.models[_cache].get(modelBId), \"target model cache must be invalidated after the move\");\n });\n\n it(\"requires exclusive locks for every element in the moved subtree\", () => {\n const root = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: root });\n const grandchild = insertElement(modelAId, { parentId: child });\n const originalLocks = iModelDb.locks;\n const checkedIds: Id64String[] = [];\n\n (iModelDb as any)._locks = new Proxy(originalLocks, {\n get(target, prop, receiver) {\n if (prop === \"checkExclusiveLock\")\n return (id: Id64String) => {\n checkedIds.push(id);\n if (id === child)\n throw new Error(`missing child lock ${child}`);\n };\n\n return Reflect.get(target, prop, receiver);\n },\n });\n\n try {\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw(`missing child lock ${child}`);\n } finally {\n (iModelDb as any)._locks = originalLocks;\n }\n\n assert.includeMembers(checkedIds, [root, child], \"root and child locks must be checked before the native move\");\n assert.equal(iModelDb.elements.getElementProps(root).model, modelAId, \"root must remain in ModelA\");\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child must remain in ModelA\");\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild must remain in ModelA\");\n });\n\n it(\"updates source and target model geometry guids when moving geometric elements\", () => {\n const fileName = IModelTestUtils.prepareOutputFile(\"ChangeElementParentModel\", \"GeometryGuidMove.bim\");\n const db = StandaloneDb.createEmpty(fileName, { rootSubject: { name: \"GeometryGuidMove\" }, enableTransactions: true });\n db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n try {\n const ids = withEditTxn(db, \"setup geometry guid move test\", (editTxn) => {\n const sourceModelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"SourceModel\");\n const targetModelId = PhysicalModel.insert(editTxn, IModel.rootSubjectId, \"TargetModel\");\n const localCategoryId = SpatialCategory.insert(editTxn, IModel.dictionaryId, \"GeometryGuidCategory\", new SubCategoryAppearance());\n const builder = new GeometryStreamBuilder();\n builder.appendGeometry(LineSegment3d.create(Point3d.createZero(), Point3d.create(1, 0, 0)));\n const elementProps: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: sourceModelId,\n category: localCategoryId,\n code: Code.createEmpty(),\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\n geom: builder.geometryStream,\n };\n const elementId = editTxn.insertElement(elementProps);\n return { elementId, sourceModelId, targetModelId };\n });\n\n const sourceGuidBefore = db.models.getModel<PhysicalModel>(ids.sourceModelId).geometryGuid;\n const targetGuidBefore = db.models.getModel<PhysicalModel>(ids.targetModelId).geometryGuid;\n\n withEditTxn(db, \"move geometry between models\", (editTxn) => {\n editTxn.changeElementModel({ id: ids.elementId, modelId: ids.targetModelId });\n });\n\n const sourceGuidAfter = db.models.getModel<PhysicalModel>(ids.sourceModelId).geometryGuid;\n const targetGuidAfter = db.models.getModel<PhysicalModel>(ids.targetModelId).geometryGuid;\n assert.isDefined(sourceGuidBefore, \"source model should have a geometry guid after inserting geometry\");\n assert.notEqual(sourceGuidAfter, sourceGuidBefore, \"source model geometry guid must change after losing geometry\");\n assert.isDefined(targetGuidAfter, \"target model should have a geometry guid after receiving geometry\");\n assert.notEqual(targetGuidAfter, targetGuidBefore, \"target model geometry guid must change after receiving geometry\");\n } finally {\n db.close();\n IModelJsFs.removeSync(fileName);\n }\n });\n\n it(\"recursively moves a multi-level subtree with multiple children at each level\", () => {\n // A subtree is more than a single chain: a node can have several children, each with their own\n // descendants. The recursive move must relocate every node in the tree, not just one branch.\n // root\n // ├── childA\n // │ ├── grandchildA1\n // │ └── grandchildA2\n // └── childB\n // └── grandchildB1\n const root = insertElement(modelAId);\n const childA = insertElement(modelAId, { parentId: root });\n const childB = insertElement(modelAId, { parentId: root });\n const grandchildA1 = insertElement(modelAId, { parentId: childA });\n const grandchildA2 = insertElement(modelAId, { parentId: childA });\n const grandchildB1 = insertElement(modelAId, { parentId: childB });\n\n txn.changeElementModel({ id: root, modelId: modelBId });\n txn.saveChanges();\n\n // Every node in the tree must be relocated to the target model.\n for (const id of [root, childA, childB, grandchildA1, grandchildA2, grandchildB1])\n assert.equal(iModelDb.elements.getElementProps(id).model, modelBId, `element ${id} must move to ModelB`);\n\n // The parent-child hierarchy must be preserved across the move.\n assert.isUndefined(iModelDb.elements.getElementProps(root).parent, \"root stays a root in ModelB\");\n assert.equal(iModelDb.elements.getElementProps(childA).parent?.id, root, \"childA still parented to root\");\n assert.equal(iModelDb.elements.getElementProps(childB).parent?.id, root, \"childB still parented to root\");\n assert.equal(iModelDb.elements.getElementProps(grandchildA1).parent?.id, childA, \"grandchildA1 still parented to childA\");\n assert.equal(iModelDb.elements.getElementProps(grandchildA2).parent?.id, childA, \"grandchildA2 still parented to childA\");\n assert.equal(iModelDb.elements.getElementProps(grandchildB1).parent?.id, childB, \"grandchildB1 still parented to childB\");\n });\n\n it(\"blocks an element with a Model-scoped code\", () => {\n const elem = insertElement(modelAId, {\n codeSpec: modelScopedCodeSpecId,\n codeScope: modelAId,\n codeValue: \"ModelScopedCode\",\n });\n\n expect(() => txn.changeElementModel({ id: elem, modelId: modelBId })).to.throw();\n });\n\n it(\"blocks the subtree move when a descendant has a Model-scoped code, leaving the whole subtree untouched\", () => {\n // A Model-scoped code cannot survive a model change. Because the entire subtree is validated before\n // anything moves, a Model-scoped code anywhere in the subtree (here on a grandchild) rejects the whole\n // operation — and nothing is moved. This exercises the validate-first atomicity of the recursive move.\n const root = insertElement(modelAId);\n const child = insertElement(modelAId, { parentId: root });\n const grandchild = insertElement(modelAId, {\n parentId: child,\n codeSpec: modelScopedCodeSpecId,\n codeScope: modelAId,\n codeValue: \"DescendantModelScoped\",\n });\n\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw();\n\n // Atomicity: the rejected move must leave the entire subtree in the source model.\n assert.equal(iModelDb.elements.getElementProps(root).model, modelAId, \"root must stay in ModelA\");\n assert.equal(iModelDb.elements.getElementProps(child).model, modelAId, \"child must stay in ModelA\");\n assert.equal(iModelDb.elements.getElementProps(grandchild).model, modelAId, \"grandchild must stay in ModelA\");\n });\n\n it(\"allows the subtree move when a descendant has a ParentElement-scoped code (its parent moves with it)\", () => {\n // A ParentElement-scoped code is anchored to the element's parent. When the subtree moves, a descendant\n // keeps its parent (the parent moves too), so the code stays valid and the move is allowed. This is the\n // descendant counterpart to the blocked root case below, exercising the isRoot distinction in the addon.\n const root = insertElement(modelAId);\n const child = insertElement(modelAId, {\n parentId: root,\n codeSpec: parentElementCodeSpecId,\n codeScope: root,\n codeValue: \"DescendantParentScoped\",\n });\n const grandchild = insertElement(modelAId, {\n parentId: child,\n codeSpec: parentElementCodeSpecId,\n codeScope: child,\n codeValue: \"DeeperParentScoped\",\n });\n\n txn.changeElementModel({ id: root, modelId: modelBId });\n txn.saveChanges();\n\n assert.equal(iModelDb.elements.getElementProps(root).model, modelBId, \"root moves to ModelB\");\n const movedChild = iModelDb.elements.getElementProps(child);\n assert.equal(movedChild.model, modelBId, \"child with parent-scoped code moves with the subtree\");\n assert.equal(movedChild.parent?.id, root, \"child remains parented to root\");\n const movedGrandchild = iModelDb.elements.getElementProps(grandchild);\n assert.equal(movedGrandchild.model, modelBId, \"grandchild with parent-scoped code moves with the subtree\");\n assert.equal(movedGrandchild.parent?.id, child, \"grandchild remains parented to child\");\n });\n\n it(\"blocks moving a root element that has a ParentElement-scoped code\", () => {\n // The moved root has no parent to anchor a ParentElement-scoped code, so the move is blocked\n // (use delete+insert instead). Contrast with the descendant case above, which is allowed.\n const scopeElem = insertElement(modelAId);\n const root = insertElement(modelAId, {\n codeSpec: parentElementCodeSpecId,\n codeScope: scopeElem,\n codeValue: \"RootParentScoped\",\n });\n\n expect(() => txn.changeElementModel({ id: root, modelId: modelBId })).to.throw();\n });\n\n it(\"allows an element with a RelatedElement-scoped code\", () => {\n const scopeElem = insertElement(modelAId);\n const elem = insertElement(modelAId, {\n codeSpec: relatedElementCodeSpecId,\n codeScope: scopeElem,\n codeValue: \"RelatedCode\",\n });\n\n txn.changeElementModel({ id: elem, modelId: modelBId });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(elem);\n assert.equal(moved.model, modelBId, \"model should change to ModelB\");\n });\n\n it(\"rejects a model change when the model types differ\", () => {\n const physElem = insertElement(modelAId);\n\n expect(() => txn.changeElementModel({ id: physElem, modelId: defModelAId })).to.throw(\"cannot move element from model of type\");\n });\n\n it(\"throws when attempting to change the model of a partition element\", () => {\n expect(() => txn.changeElementModel({ id: modelAId, modelId: modelBId })).to.throw();\n });\n });\n\n describe(\"definition models\", () => {\n const insertDefinitionElement = (modelId: Id64String, name: string, opts: { parentId?: Id64String } = {}): Id64String => {\n const props: DefinitionElementProps = {\n classFullName: \"Generic:PhysicalType\",\n model: modelId,\n code: { spec: relatedElementCodeSpecId, scope: modelId, value: name },\n ...(opts.parentId ? { parent: { id: opts.parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\n };\n const id = txn.insertElement(props);\n assert.isNotEmpty(id, \"insertDefinitionElement must return a valid ID\");\n txn.saveChanges();\n return id;\n };\n\n it(\"moves a definition element to another definition model via changeElementModel\", () => {\n const defElem = insertDefinitionElement(defModelAId, \"MovableCategoryA\");\n\n txn.changeElementModel({ id: defElem, modelId: defModelBId });\n txn.saveChanges();\n\n const moved = iModelDb.elements.getElementProps(defElem);\n assert.equal(moved.model, defModelBId, \"model should change to DefinitionModelB\");\n assert.isUndefined(moved.parent, \"element should be a root in DefinitionModelB\");\n });\n\n it(\"rejects reparenting a definition element across definition models\", () => {\n const defElem = insertDefinitionElement(defModelAId, \"MovableCategoryB\");\n const targetElem = insertDefinitionElement(defModelBId, \"TargetInDefB\");\n\n expect(() => txn.changeElementParent({ id: defElem, parentId: targetElem })).to.throw(\"different model\");\n });\n\n it(\"rejects changing the parent of a physical element to a parent in a definition model\", () => {\n const physElem = insertElement(modelAId);\n const defTarget = insertDefinitionElement(defModelAId, \"DefTargetForPhys\");\n\n expect(() => txn.changeElementParent({ id: physElem, parentId: defTarget })).to.throw(\"different model\");\n });\n\n it(\"rejects changing a physical element to a definition model\", () => {\n const physElem = insertElement(modelAId);\n\n expect(() => txn.changeElementModel({ id: physElem, modelId: defModelAId })).to.throw(\"cannot move element from model of type\");\n });\n\n it(\"rejects changing a definition element into a physical model\", () => {\n const defElem = insertDefinitionElement(defModelAId, \"DefElemToMoveToPhys\");\n\n expect(() => txn.changeElementModel({ id: defElem, modelId: modelAId })).to.throw(\"cannot move element from model of type\");\n });\n });\n\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeMerge.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangeMerge.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { DbConflictResolution, Guid } from \"@itwin/core-bentley\";\r\nimport { EditTxn } from \"../../EditTxn\";\r\nimport {\r\n IModel,\r\n PhysicalElementProps,\r\n SubCategoryAppearance,\r\n TxnProps\r\n} from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport { assert } from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { HubWrappers, KnownTestLocations } from \"..\";\r\nimport {\r\n BriefcaseDb,\r\n ChannelControl,\r\n DictionaryModel,\r\n SpatialCategory,\r\n SqliteChangesetReader,\r\n} from \"../../core-backend\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { RebaseChangesetConflictArgs } from \"../../internal/ChangesetConflictArgs\";\r\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\n\r\nfunction startTestTxn(briefcase: BriefcaseDb): EditTxn {\r\n const txn = new EditTxn(briefcase, \"change merge\");\r\n txn.start();\r\n return txn;\r\n}\r\n\r\nchai.use(chaiAsPromised);\r\n\r\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\r\n try {\r\n await test();\r\n } catch (e) {\r\n if (e instanceof Error && msg) {\r\n assert.equal(e.message, msg);\r\n }\r\n return;\r\n }\r\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\r\n}\r\n\r\nasync function updatePhysicalObject(txn: EditTxn, el1: string, federationGuid: string) {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n await briefcase.locks.acquireLocks({ exclusive: el1 });\r\n const props = briefcase.elements.getElement(el1);\r\n props.federationGuid = federationGuid;\r\n txn.updateElement(props.toJSON());\r\n}\r\n\r\ndescribe(\"Change merge method\", () => {\r\n const ctx = {\r\n accessTokens: {\r\n user1: \"\",\r\n user2: \"\",\r\n user3: \"\",\r\n },\r\n iModelId: \"\",\r\n iTwinId: \"\",\r\n modelId: \"\",\r\n spatialCategoryId: \"\",\r\n iModelName: \"TestIModel\",\r\n rootSubject: \"TestSubject\",\r\n openBriefcase: async (user: \"user1\" | \"user2\" | \"user3\", noLock?: true) => {\r\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });\r\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n return b;\r\n },\r\n openB1: async (noLock?: true) => { return ctx.openBriefcase(\"user1\", noLock); },\r\n openB2: async (noLock?: true) => { return ctx.openBriefcase(\"user2\", noLock); },\r\n openB3: async (noLock?: true) => { return ctx.openBriefcase(\"user3\", noLock); },\r\n }\r\n\r\n async function insertPhysicalObject(txn: EditTxn) {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n await briefcase.locks.acquireLocks({ shared: ctx.modelId });\r\n return txn.insertElement(IModelTestUtils.createPhysicalObject(briefcase, ctx.modelId, ctx.spatialCategoryId).toJSON());\r\n }\r\n\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown()\r\n });\r\n\r\n beforeEach(async () => {\r\n ctx.iTwinId = HubMock.iTwinId;\r\n ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n ctx.accessTokens.user3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });\r\n assert.isNotEmpty(ctx.iModelId);\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n [, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1Txn,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n ctx.spatialCategoryId = SpatialCategory.insert(\r\n b1Txn,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ description: \"\" });\r\n b1.close();\r\n });\r\n\r\n it(\"rebase events (noFastForward:true)\", async () => {\r\n /**\r\n * Fastforward will not trigger rebase events as rebase was not required to merge changes.\r\n * In this test we will test rebase events when noFastForward is set to true. Which mean rebase is required to merge changes.\r\n */\r\n const events = new Map<number, { args: TxnProps, event: \"onRebaseTxnBegin\" | \"onRebaseTxnEnd\" }[]>();\r\n\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n events.set(b1.briefcaseId, []);\r\n b1.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\r\n\r\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\r\n });\r\n b1.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\r\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\r\n });\r\n\r\n const b2 = await ctx.openB2();\r\n const b2Txn = startTestTxn(b2);\r\n events.set(b2.briefcaseId, []);\r\n b2.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\r\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\r\n });\r\n b2.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\r\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\r\n });\r\n\r\n\r\n const e1 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e1}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\r\n assert.isDefined(b1.elements.getElement(e1));\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n const e2 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges();\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e2}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n assert.isDefined(b1.elements.getElement(e2));\r\n\r\n const e3 = await insertPhysicalObject(b2Txn);\r\n b2Txn.saveChanges(`inserted physical object [id=${e3}]`);\r\n const e4 = await insertPhysicalObject(b2Txn);\r\n b2Txn.saveChanges(`inserted physical object [id=${e4}]`);\r\n\r\n events.set(b2.briefcaseId, []);\r\n // fast-forward has no effect its a deprecated flag\r\n await b2.pushChanges({ description: `inserted physical object [id=${e3},${e4}]`, noFastForward: true });\r\n assert.equal(events.get(b2.briefcaseId)?.length, 4);\r\n assert.equal(events.get(b2.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.id, \"0x100000000\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.props?.description, \"inserted physical object [id=0x40000000001]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.type, \"Data\");\r\n\r\n assert.equal(events.get(b2.briefcaseId)?.[3].event, \"onRebaseTxnEnd\");\r\n assert.equal(events.get(b2.briefcaseId)?.[3].args.id, \"0x100000001\");\r\n assert.equal(events.get(b2.briefcaseId)?.[3].args.props?.description, \"inserted physical object [id=0x40000000002]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[3].args.type, \"Data\");\r\n\r\n\r\n assert.isDefined(b2.elements.getElement(e1));\r\n assert.isDefined(b2.elements.getElement(e2));\r\n assert.isDefined(b2.elements.getElement(e3));\r\n assert.isDefined(b2.elements.getElement(e4));\r\n\r\n const e5 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e5}]`);\r\n const e6 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e6}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e5}, ${e6}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 4);\r\n assert.equal(events.get(b1.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b1.briefcaseId)?.[0].args.id, \"0x100000000\");\r\n assert.equal(events.get(b1.briefcaseId)?.[0].args.props?.description, \"inserted physical object [id=0x30000000003]\");\r\n assert.equal(events.get(b1.briefcaseId)?.[0].args.type, \"Data\");\r\n\r\n assert.equal(events.get(b1.briefcaseId)?.[3].event, \"onRebaseTxnEnd\");\r\n assert.equal(events.get(b1.briefcaseId)?.[3].args.id, \"0x100000001\");\r\n assert.equal(events.get(b1.briefcaseId)?.[3].args.props?.description, \"inserted physical object [id=0x30000000004]\");\r\n assert.equal(events.get(b1.briefcaseId)?.[3].args.type, \"Data\");\r\n\r\n\r\n assert.isDefined(b1.elements.getElement(e1));\r\n assert.isDefined(b1.elements.getElement(e2));\r\n assert.isDefined(b1.elements.getElement(e3)); // Not found\r\n assert.isDefined(b1.elements.getElement(e4));\r\n assert.isDefined(b1.elements.getElement(e5));\r\n assert.isDefined(b1.elements.getElement(e6));\r\n\r\n events.set(b2.briefcaseId, []);\r\n await b2.pullChanges();\r\n assert.equal(events.get(b2.briefcaseId)?.length, 0);\r\n assert.isDefined(b2.elements.getElement(e1));\r\n assert.isDefined(b2.elements.getElement(e2));\r\n assert.isDefined(b2.elements.getElement(e3));\r\n assert.isDefined(b2.elements.getElement(e4));\r\n assert.isDefined(b2.elements.getElement(e5));\r\n assert.isDefined(b2.elements.getElement(e6));\r\n\r\n await updatePhysicalObject(b1Txn, e3, Guid.createValue());\r\n b1Txn.saveChanges(`update physical object [id=${e3}]`);\r\n await updatePhysicalObject(b1Txn, e4, Guid.createValue());\r\n b1Txn.saveChanges(`update physical object [id=${e4}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `update physical object [id=${e3},${e4}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n await updatePhysicalObject(b2Txn, e1, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e1}]`);\r\n await updatePhysicalObject(b2Txn, e2, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e2}]`);\r\n await updatePhysicalObject(b2Txn, e5, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e5}]`);\r\n await updatePhysicalObject(b2Txn, e6, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e6}]`);\r\n events.set(b2.briefcaseId, []);\r\n await b2.pushChanges({ description: `update physical object [id=${e1},${e2},${e5}]`, noFastForward: true });\r\n assert.equal(events.get(b2.briefcaseId)?.length, 8);\r\n assert.equal(events.get(b2.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.id, \"0x100000000\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.props?.description, \"update physical object [id=0x30000000001]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[0].args.type, \"Data\");\r\n\r\n assert.equal(events.get(b2.briefcaseId)?.[2].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b2.briefcaseId)?.[2].args.id, \"0x100000001\");\r\n assert.equal(events.get(b2.briefcaseId)?.[2].args.props?.description, \"update physical object [id=0x30000000002]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[2].args.type, \"Data\");\r\n\r\n assert.equal(events.get(b2.briefcaseId)?.[4].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b2.briefcaseId)?.[4].args.id, \"0x100000002\");\r\n assert.equal(events.get(b2.briefcaseId)?.[4].args.props?.description, \"update physical object [id=0x30000000003]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[4].args.type, \"Data\");\r\n\r\n assert.equal(events.get(b2.briefcaseId)?.[6].event, \"onRebaseTxnBegin\");\r\n assert.equal(events.get(b2.briefcaseId)?.[6].args.id, \"0x100000003\");\r\n assert.equal(events.get(b2.briefcaseId)?.[6].args.props?.description, \"update physical object [id=0x30000000004]\");\r\n assert.equal(events.get(b2.briefcaseId)?.[6].args.type, \"Data\");\r\n\r\n assert.isDefined(b1.elements.getElement(e1).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e2).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e3).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e4).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e5).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e6).federationGuid);\r\n\r\n assert.isDefined(b2.elements.getElement(e1).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e2).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e3).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e4).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e5).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e6).federationGuid);\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n it(\"rebase events (noFastForward:false/default)\", async () => {\r\n const events = new Map<number, { args: TxnProps, event: \"onRebaseTxnBegin\" | \"onRebaseTxnEnd\" }[]>();\r\n\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n events.set(b1.briefcaseId, []);\r\n b1.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\r\n\r\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\r\n });\r\n b1.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\r\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\r\n });\r\n\r\n const b2 = await ctx.openB2();\r\n const b2Txn = startTestTxn(b2);\r\n events.set(b2.briefcaseId, []);\r\n b2.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\r\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\r\n });\r\n b2.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\r\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\r\n });\r\n\r\n\r\n const e1 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e1}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\r\n assert.isDefined(b1.elements.getElement(e1));\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n const e2 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges();\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e2}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n assert.isDefined(b1.elements.getElement(e2));\r\n\r\n const e3 = await insertPhysicalObject(b2Txn);\r\n b2Txn.saveChanges(`inserted physical object [id=${e3}]`);\r\n const e4 = await insertPhysicalObject(b2Txn);\r\n b2Txn.saveChanges(`inserted physical object [id=${e4}]`);\r\n\r\n events.set(b2.briefcaseId, []);\r\n // fast-forward\r\n await b2.pushChanges({ description: `inserted physical object [id=${e3},${e4}]` });\r\n assert.equal(events.get(b2.briefcaseId)?.length, 4);\r\n\r\n assert.isDefined(b2.elements.getElement(e1));\r\n assert.isDefined(b2.elements.getElement(e2));\r\n assert.isDefined(b2.elements.getElement(e3));\r\n assert.isDefined(b2.elements.getElement(e4));\r\n\r\n const e5 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e5}]`);\r\n const e6 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges(`inserted physical object [id=${e6}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `inserted physical object [id=${e5}, ${e6}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 4);\r\n\r\n assert.isDefined(b1.elements.getElement(e1));\r\n assert.isDefined(b1.elements.getElement(e2));\r\n assert.isDefined(b1.elements.getElement(e3)); // Not found\r\n assert.isDefined(b1.elements.getElement(e4));\r\n assert.isDefined(b1.elements.getElement(e5));\r\n assert.isDefined(b1.elements.getElement(e6));\r\n\r\n events.set(b2.briefcaseId, []);\r\n await b2.pullChanges();\r\n assert.equal(events.get(b2.briefcaseId)?.length, 0);\r\n assert.isDefined(b2.elements.getElement(e1));\r\n assert.isDefined(b2.elements.getElement(e2));\r\n assert.isDefined(b2.elements.getElement(e3));\r\n assert.isDefined(b2.elements.getElement(e4));\r\n assert.isDefined(b2.elements.getElement(e5));\r\n assert.isDefined(b2.elements.getElement(e6));\r\n\r\n await updatePhysicalObject(b1Txn, e3, Guid.createValue());\r\n b1Txn.saveChanges(`update physical object [id=${e3}]`);\r\n await updatePhysicalObject(b1Txn, e4, Guid.createValue());\r\n b1Txn.saveChanges(`update physical object [id=${e4}]`);\r\n events.set(b1.briefcaseId, []);\r\n await b1.pushChanges({ description: `update physical object [id=${e3},${e4}]` });\r\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\r\n\r\n await updatePhysicalObject(b2Txn, e1, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e1}]`);\r\n await updatePhysicalObject(b2Txn, e2, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e2}]`);\r\n await updatePhysicalObject(b2Txn, e5, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e5}]`);\r\n await updatePhysicalObject(b2Txn, e6, Guid.createValue());\r\n b2Txn.saveChanges(`update physical object [id=${e6}]`);\r\n events.set(b2.briefcaseId, []);\r\n await b2.pushChanges({ description: `update physical object [id=${e1},${e2},${e5}]` });\r\n\r\n assert.isDefined(b1.elements.getElement(e1).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e2).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e3).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e4).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e5).federationGuid);\r\n assert.isDefined(b1.elements.getElement(e6).federationGuid);\r\n\r\n assert.isDefined(b2.elements.getElement(e1).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e2).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e3).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e4).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e5).federationGuid);\r\n assert.isDefined(b2.elements.getElement(e6).federationGuid);\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n it(\"rebase with be_props (insert conflict)\", async () => {\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n const b2 = await ctx.openB2();\r\n const b2Txn = startTestTxn(b2);\r\n\r\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test1\");\r\n b1Txn.saveChanges(\"test\");\r\n await b1.pushChanges({ description: \"test\" });\r\n\r\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test2\");\r\n b2Txn.saveChanges(\"test2\");\r\n\r\n await assertThrowsAsync(\r\n async () => b2.pushChanges({ description: \"test2\" }),\r\n \"PRIMARY KEY insert conflict. Aborting rebase.\");\r\n\r\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1\");\r\n\r\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test3\");\r\n\r\n chai.expect(() => b2Txn.saveChanges(\"test1\")).throws(\"Could not save changes (test1)\");\r\n b2Txn.abandonChanges();\r\n\r\n // set handler to resolve conflict\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"my\", handler: (args: RebaseChangesetConflictArgs) => {\r\n if (args.cause === \"Conflict\") {\r\n if (args.tableName === \"be_Prop\") {\r\n if (args.opcode === \"Inserted\") {\r\n chai.expect(args.getColumnNames()).to.be.deep.equal([\"Namespace\", \"Name\", \"Id\", \"SubId\", \"TxnMode\", \"StrData\", \"RawSize\", \"Data\"]);\r\n chai.expect(args.txn.id).to.be.equal(\"0x100000000\");\r\n chai.expect(args.txn.descr).to.be.equal(\"test2\");\r\n chai.expect(args.txn.type).to.be.equal(\"Data\");\r\n const localChangedVal = args.getValueText(5, \"New\");\r\n const tipValue = b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" });\r\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, `${tipValue} + ${localChangedVal}`);\r\n return DbConflictResolution.Skip; // skip incoming value and continue\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n });\r\n\r\n // resume rebase see if it resolve the conflict\r\n await b2.txns.rebaser.resume();\r\n\r\n // use changeset api to read txn directly\r\n const reader = SqliteChangesetReader.openTxn({ db: b2, txnId: \"0x100000000\" });\r\n chai.expect(reader.step()).to.be.true;\r\n chai.expect(reader.tableName).to.be.equal(\"be_Prop\");\r\n chai.expect(reader.getColumnNames(reader.tableName)[5]).to.be.equal(\"StrData\");\r\n // note the operation changed from insert to update\r\n chai.expect(reader.op).to.be.equal(\"Updated\");\r\n // note this old value is from master branch after changeset was recomputed\r\n chai.expect(reader.getChangeValueText(5, \"Old\")).to.be.equal(\"test1\");\r\n // note this new value is from local branch after merger.\r\n chai.expect(reader.getChangeValueText(5, \"New\")).to.be.equal(\"test1 + test2\");\r\n reader.close();\r\n\r\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\r\n\r\n\r\n\r\n await b2.pushChanges({ description: \"test2\" });\r\n await b1.pullChanges();\r\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\r\n assert.equal(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n\r\n it(\"rebase with be_props (data conflict) \", async () => {\r\n const b1 = await ctx.openB1();\r\n const b1Txn = startTestTxn(b1);\r\n const b2 = await ctx.openB2();\r\n const b2Txn = startTestTxn(b2);\r\n\r\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test1\");\r\n b1Txn.saveChanges(\"test\");\r\n await b1.pushChanges({ description: \"test\" });\r\n\r\n await b2.pullChanges();\r\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test2\");\r\n b2Txn.saveChanges(\"test2\");\r\n\r\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test3\");\r\n b1Txn.saveChanges(\"test\");\r\n await b1.pushChanges({ description: \"test\" });\r\n\r\n // set handler to resolve conflict\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"my\", handler: (args: RebaseChangesetConflictArgs) => {\r\n if (args.cause === \"Data\") {\r\n if (args.tableName === \"be_Prop\") {\r\n if (args.opcode === \"Updated\") {\r\n const localChangedVal = args.getValueText(5, \"New\");\r\n const tipValue = b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" });\r\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, `${tipValue} + ${localChangedVal}`);\r\n return DbConflictResolution.Skip; // skip incomming value and continue\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n });\r\n\r\n await b2.pushChanges({ description: \"test\" });\r\n await b2.pullChanges();\r\n await b1.pullChanges();\r\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test3 + test2\");\r\n assert.equal(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test3 + test2\");\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n it(\"should keep element deleted when local delete conflicts with remote update\", async () => {\r\n const b1 = await ctx.openB1(true /* = noLock */);\r\n const b1Txn = startTestTxn(b1);\r\n const b2 = await ctx.openB2(true /* = noLock */);\r\n const b2Txn = startTestTxn(b2);\r\n\r\n const e1 = await insertPhysicalObject(b1Txn);\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\r\n await b2.pullChanges();\r\n\r\n const eb1 = b1.elements.getElementProps<PhysicalElementProps>(e1);\r\n eb1.userLabel = \"test1\";\r\n eb1.placement = { origin: { x: 1, y: 1, z: 1 }, angles: { yaw: 1, pitch: 1, roll: 1 } };\r\n eb1.geom = IModelTestUtils.createBox(Point3d.create(3, 3, 3));\r\n\r\n b1Txn.updateElement(eb1);\r\n b1Txn.saveChanges();\r\n await b1.pushChanges({ description: `update physical object [id=${e1}]` });\r\n\r\n b2Txn.deleteElement(e1);\r\n b2Txn.saveChanges();\r\n await b2.pullChanges();\r\n\r\n const eb2 = b2.elements.tryGetElementProps<PhysicalElementProps>(e1);\r\n\r\n // when placement is changed the element is not deleted after pullChanges();\r\n assert.isUndefined(eb2);\r\n\r\n b1.close();\r\n b2.close();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ChangeMerge.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangeMerge.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 { DbConflictResolution, Guid } from \"@itwin/core-bentley\";\nimport { EditTxn } from \"../../EditTxn\";\nimport {\n IModel,\n PhysicalElementProps,\n SubCategoryAppearance,\n TxnProps\n} from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { assert } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, KnownTestLocations } from \"..\";\nimport {\n BriefcaseDb,\n ChannelControl,\n DictionaryModel,\n SpatialCategory,\n SqliteChangesetReader,\n} from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { RebaseChangesetConflictArgs } from \"../../internal/ChangesetConflictArgs\";\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { Point3d } from \"@itwin/core-geometry\";\n\nfunction startTestTxn(briefcase: BriefcaseDb): EditTxn {\n const txn = new EditTxn(briefcase, \"change merge\");\n txn.start();\n return txn;\n}\n\nchai.use(chaiAsPromised);\n\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\n try {\n await test();\n } catch (e) {\n if (e instanceof Error && msg) {\n assert.equal(e.message, msg);\n }\n return;\n }\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\n}\n\nasync function updatePhysicalObject(txn: EditTxn, el1: string, federationGuid: string) {\n const briefcase = txn.iModel as BriefcaseDb;\n await briefcase.locks.acquireLocks({ exclusive: el1 });\n const props = briefcase.elements.getElement(el1);\n props.federationGuid = federationGuid;\n txn.updateElement(props.toJSON());\n}\n\ndescribe(\"Change merge method\", () => {\n const ctx = {\n accessTokens: {\n user1: \"\",\n user2: \"\",\n user3: \"\",\n },\n iModelId: \"\",\n iTwinId: \"\",\n modelId: \"\",\n spatialCategoryId: \"\",\n iModelName: \"TestIModel\",\n rootSubject: \"TestSubject\",\n openBriefcase: async (user: \"user1\" | \"user2\" | \"user3\", noLock?: true) => {\n const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });\n b.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n return b;\n },\n openB1: async (noLock?: true) => { return ctx.openBriefcase(\"user1\", noLock); },\n openB2: async (noLock?: true) => { return ctx.openBriefcase(\"user2\", noLock); },\n openB3: async (noLock?: true) => { return ctx.openBriefcase(\"user3\", noLock); },\n }\n\n async function insertPhysicalObject(txn: EditTxn) {\n const briefcase = txn.iModel as BriefcaseDb;\n await briefcase.locks.acquireLocks({ shared: ctx.modelId });\n return txn.insertElement(IModelTestUtils.createPhysicalObject(briefcase, ctx.modelId, ctx.spatialCategoryId).toJSON());\n }\n\n before(async () => {\n await TestUtils.startBackend();\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\n });\n\n after(async () => {\n HubMock.shutdown()\n });\n\n beforeEach(async () => {\n ctx.iTwinId = HubMock.iTwinId;\n ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n ctx.accessTokens.user3 = await HubWrappers.getAccessToken(TestUserType.Super);\n ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });\n assert.isNotEmpty(ctx.iModelId);\n const b1 = await ctx.openB1();\n const b1Txn = startTestTxn(b1);\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n [, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1Txn,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n ctx.spatialCategoryId = SpatialCategory.insert(\n b1Txn,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n b1Txn.saveChanges();\n await b1.pushChanges({ description: \"\" });\n b1.close();\n });\n\n it(\"rebase events (noFastForward:true)\", async () => {\n /**\n * Fastforward will not trigger rebase events as rebase was not required to merge changes.\n * In this test we will test rebase events when noFastForward is set to true. Which mean rebase is required to merge changes.\n */\n const events = new Map<number, { args: TxnProps, event: \"onRebaseTxnBegin\" | \"onRebaseTxnEnd\" }[]>();\n\n const b1 = await ctx.openB1();\n const b1Txn = startTestTxn(b1);\n events.set(b1.briefcaseId, []);\n b1.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\n\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\n });\n b1.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\n });\n\n const b2 = await ctx.openB2();\n const b2Txn = startTestTxn(b2);\n events.set(b2.briefcaseId, []);\n b2.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\n });\n b2.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\n });\n\n\n const e1 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e1}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\n assert.isDefined(b1.elements.getElement(e1));\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n const e2 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges();\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e2}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n assert.isDefined(b1.elements.getElement(e2));\n\n const e3 = await insertPhysicalObject(b2Txn);\n b2Txn.saveChanges(`inserted physical object [id=${e3}]`);\n const e4 = await insertPhysicalObject(b2Txn);\n b2Txn.saveChanges(`inserted physical object [id=${e4}]`);\n\n events.set(b2.briefcaseId, []);\n // fast-forward has no effect its a deprecated flag\n await b2.pushChanges({ description: `inserted physical object [id=${e3},${e4}]`, noFastForward: true });\n assert.equal(events.get(b2.briefcaseId)?.length, 4);\n assert.equal(events.get(b2.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.id, \"0x100000000\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.props?.description, \"inserted physical object [id=0x40000000001]\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.type, \"Data\");\n\n assert.equal(events.get(b2.briefcaseId)?.[3].event, \"onRebaseTxnEnd\");\n assert.equal(events.get(b2.briefcaseId)?.[3].args.id, \"0x100000001\");\n assert.equal(events.get(b2.briefcaseId)?.[3].args.props?.description, \"inserted physical object [id=0x40000000002]\");\n assert.equal(events.get(b2.briefcaseId)?.[3].args.type, \"Data\");\n\n\n assert.isDefined(b2.elements.getElement(e1));\n assert.isDefined(b2.elements.getElement(e2));\n assert.isDefined(b2.elements.getElement(e3));\n assert.isDefined(b2.elements.getElement(e4));\n\n const e5 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e5}]`);\n const e6 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e6}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e5}, ${e6}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 4);\n assert.equal(events.get(b1.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b1.briefcaseId)?.[0].args.id, \"0x100000000\");\n assert.equal(events.get(b1.briefcaseId)?.[0].args.props?.description, \"inserted physical object [id=0x30000000003]\");\n assert.equal(events.get(b1.briefcaseId)?.[0].args.type, \"Data\");\n\n assert.equal(events.get(b1.briefcaseId)?.[3].event, \"onRebaseTxnEnd\");\n assert.equal(events.get(b1.briefcaseId)?.[3].args.id, \"0x100000001\");\n assert.equal(events.get(b1.briefcaseId)?.[3].args.props?.description, \"inserted physical object [id=0x30000000004]\");\n assert.equal(events.get(b1.briefcaseId)?.[3].args.type, \"Data\");\n\n\n assert.isDefined(b1.elements.getElement(e1));\n assert.isDefined(b1.elements.getElement(e2));\n assert.isDefined(b1.elements.getElement(e3)); // Not found\n assert.isDefined(b1.elements.getElement(e4));\n assert.isDefined(b1.elements.getElement(e5));\n assert.isDefined(b1.elements.getElement(e6));\n\n events.set(b2.briefcaseId, []);\n await b2.pullChanges();\n assert.equal(events.get(b2.briefcaseId)?.length, 0);\n assert.isDefined(b2.elements.getElement(e1));\n assert.isDefined(b2.elements.getElement(e2));\n assert.isDefined(b2.elements.getElement(e3));\n assert.isDefined(b2.elements.getElement(e4));\n assert.isDefined(b2.elements.getElement(e5));\n assert.isDefined(b2.elements.getElement(e6));\n\n await updatePhysicalObject(b1Txn, e3, Guid.createValue());\n b1Txn.saveChanges(`update physical object [id=${e3}]`);\n await updatePhysicalObject(b1Txn, e4, Guid.createValue());\n b1Txn.saveChanges(`update physical object [id=${e4}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `update physical object [id=${e3},${e4}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n await updatePhysicalObject(b2Txn, e1, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e1}]`);\n await updatePhysicalObject(b2Txn, e2, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e2}]`);\n await updatePhysicalObject(b2Txn, e5, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e5}]`);\n await updatePhysicalObject(b2Txn, e6, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e6}]`);\n events.set(b2.briefcaseId, []);\n await b2.pushChanges({ description: `update physical object [id=${e1},${e2},${e5}]`, noFastForward: true });\n assert.equal(events.get(b2.briefcaseId)?.length, 8);\n assert.equal(events.get(b2.briefcaseId)?.[0].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.id, \"0x100000000\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.props?.description, \"update physical object [id=0x30000000001]\");\n assert.equal(events.get(b2.briefcaseId)?.[0].args.type, \"Data\");\n\n assert.equal(events.get(b2.briefcaseId)?.[2].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b2.briefcaseId)?.[2].args.id, \"0x100000001\");\n assert.equal(events.get(b2.briefcaseId)?.[2].args.props?.description, \"update physical object [id=0x30000000002]\");\n assert.equal(events.get(b2.briefcaseId)?.[2].args.type, \"Data\");\n\n assert.equal(events.get(b2.briefcaseId)?.[4].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b2.briefcaseId)?.[4].args.id, \"0x100000002\");\n assert.equal(events.get(b2.briefcaseId)?.[4].args.props?.description, \"update physical object [id=0x30000000003]\");\n assert.equal(events.get(b2.briefcaseId)?.[4].args.type, \"Data\");\n\n assert.equal(events.get(b2.briefcaseId)?.[6].event, \"onRebaseTxnBegin\");\n assert.equal(events.get(b2.briefcaseId)?.[6].args.id, \"0x100000003\");\n assert.equal(events.get(b2.briefcaseId)?.[6].args.props?.description, \"update physical object [id=0x30000000004]\");\n assert.equal(events.get(b2.briefcaseId)?.[6].args.type, \"Data\");\n\n assert.isDefined(b1.elements.getElement(e1).federationGuid);\n assert.isDefined(b1.elements.getElement(e2).federationGuid);\n assert.isDefined(b1.elements.getElement(e3).federationGuid);\n assert.isDefined(b1.elements.getElement(e4).federationGuid);\n assert.isDefined(b1.elements.getElement(e5).federationGuid);\n assert.isDefined(b1.elements.getElement(e6).federationGuid);\n\n assert.isDefined(b2.elements.getElement(e1).federationGuid);\n assert.isDefined(b2.elements.getElement(e2).federationGuid);\n assert.isDefined(b2.elements.getElement(e3).federationGuid);\n assert.isDefined(b2.elements.getElement(e4).federationGuid);\n assert.isDefined(b2.elements.getElement(e5).federationGuid);\n assert.isDefined(b2.elements.getElement(e6).federationGuid);\n\n b1.close();\n b2.close();\n });\n it(\"rebase events (noFastForward:false/default)\", async () => {\n const events = new Map<number, { args: TxnProps, event: \"onRebaseTxnBegin\" | \"onRebaseTxnEnd\" }[]>();\n\n const b1 = await ctx.openB1();\n const b1Txn = startTestTxn(b1);\n events.set(b1.briefcaseId, []);\n b1.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\n\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\n });\n b1.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\n events.get(b1.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\n });\n\n const b2 = await ctx.openB2();\n const b2Txn = startTestTxn(b2);\n events.set(b2.briefcaseId, []);\n b2.txns.rebaser.onRebaseTxnBegin.addListener((args) => {\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnBegin\" });\n });\n b2.txns.rebaser.onRebaseTxnEnd.addListener((args) => {\n events.get(b2.briefcaseId)?.push({ args, event: \"onRebaseTxnEnd\" });\n });\n\n\n const e1 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e1}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\n assert.isDefined(b1.elements.getElement(e1));\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n const e2 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges();\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e2}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n assert.isDefined(b1.elements.getElement(e2));\n\n const e3 = await insertPhysicalObject(b2Txn);\n b2Txn.saveChanges(`inserted physical object [id=${e3}]`);\n const e4 = await insertPhysicalObject(b2Txn);\n b2Txn.saveChanges(`inserted physical object [id=${e4}]`);\n\n events.set(b2.briefcaseId, []);\n // fast-forward\n await b2.pushChanges({ description: `inserted physical object [id=${e3},${e4}]` });\n assert.equal(events.get(b2.briefcaseId)?.length, 4);\n\n assert.isDefined(b2.elements.getElement(e1));\n assert.isDefined(b2.elements.getElement(e2));\n assert.isDefined(b2.elements.getElement(e3));\n assert.isDefined(b2.elements.getElement(e4));\n\n const e5 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e5}]`);\n const e6 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges(`inserted physical object [id=${e6}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `inserted physical object [id=${e5}, ${e6}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 4);\n\n assert.isDefined(b1.elements.getElement(e1));\n assert.isDefined(b1.elements.getElement(e2));\n assert.isDefined(b1.elements.getElement(e3)); // Not found\n assert.isDefined(b1.elements.getElement(e4));\n assert.isDefined(b1.elements.getElement(e5));\n assert.isDefined(b1.elements.getElement(e6));\n\n events.set(b2.briefcaseId, []);\n await b2.pullChanges();\n assert.equal(events.get(b2.briefcaseId)?.length, 0);\n assert.isDefined(b2.elements.getElement(e1));\n assert.isDefined(b2.elements.getElement(e2));\n assert.isDefined(b2.elements.getElement(e3));\n assert.isDefined(b2.elements.getElement(e4));\n assert.isDefined(b2.elements.getElement(e5));\n assert.isDefined(b2.elements.getElement(e6));\n\n await updatePhysicalObject(b1Txn, e3, Guid.createValue());\n b1Txn.saveChanges(`update physical object [id=${e3}]`);\n await updatePhysicalObject(b1Txn, e4, Guid.createValue());\n b1Txn.saveChanges(`update physical object [id=${e4}]`);\n events.set(b1.briefcaseId, []);\n await b1.pushChanges({ description: `update physical object [id=${e3},${e4}]` });\n assert.equal(events.get(b1.briefcaseId)?.length, 0);\n\n await updatePhysicalObject(b2Txn, e1, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e1}]`);\n await updatePhysicalObject(b2Txn, e2, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e2}]`);\n await updatePhysicalObject(b2Txn, e5, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e5}]`);\n await updatePhysicalObject(b2Txn, e6, Guid.createValue());\n b2Txn.saveChanges(`update physical object [id=${e6}]`);\n events.set(b2.briefcaseId, []);\n await b2.pushChanges({ description: `update physical object [id=${e1},${e2},${e5}]` });\n\n assert.isDefined(b1.elements.getElement(e1).federationGuid);\n assert.isDefined(b1.elements.getElement(e2).federationGuid);\n assert.isDefined(b1.elements.getElement(e3).federationGuid);\n assert.isDefined(b1.elements.getElement(e4).federationGuid);\n assert.isDefined(b1.elements.getElement(e5).federationGuid);\n assert.isDefined(b1.elements.getElement(e6).federationGuid);\n\n assert.isDefined(b2.elements.getElement(e1).federationGuid);\n assert.isDefined(b2.elements.getElement(e2).federationGuid);\n assert.isDefined(b2.elements.getElement(e3).federationGuid);\n assert.isDefined(b2.elements.getElement(e4).federationGuid);\n assert.isDefined(b2.elements.getElement(e5).federationGuid);\n assert.isDefined(b2.elements.getElement(e6).federationGuid);\n\n b1.close();\n b2.close();\n });\n it(\"rebase with be_props (insert conflict)\", async () => {\n const b1 = await ctx.openB1();\n const b1Txn = startTestTxn(b1);\n const b2 = await ctx.openB2();\n const b2Txn = startTestTxn(b2);\n\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test1\");\n b1Txn.saveChanges(\"test\");\n await b1.pushChanges({ description: \"test\" });\n\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test2\");\n b2Txn.saveChanges(\"test2\");\n\n await assertThrowsAsync(\n async () => b2.pushChanges({ description: \"test2\" }),\n \"PRIMARY KEY insert conflict. Aborting rebase.\");\n\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1\");\n\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test3\");\n\n chai.expect(() => b2Txn.saveChanges(\"test1\")).throws(\"Could not save changes (test1)\");\n b2Txn.abandonChanges();\n\n // set handler to resolve conflict\n b2.txns.rebaser.addConflictHandler({\n id: \"my\", handler: (args: RebaseChangesetConflictArgs) => {\n if (args.cause === \"Conflict\") {\n if (args.tableName === \"be_Prop\") {\n if (args.opcode === \"Inserted\") {\n chai.expect(args.getColumnNames()).to.be.deep.equal([\"Namespace\", \"Name\", \"Id\", \"SubId\", \"TxnMode\", \"StrData\", \"RawSize\", \"Data\"]);\n chai.expect(args.txn.id).to.be.equal(\"0x100000000\");\n chai.expect(args.txn.descr).to.be.equal(\"test2\");\n chai.expect(args.txn.type).to.be.equal(\"Data\");\n const localChangedVal = args.getValueText(5, \"New\");\n const tipValue = b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" });\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, `${tipValue} + ${localChangedVal}`);\n return DbConflictResolution.Skip; // skip incoming value and continue\n }\n }\n }\n return undefined;\n }\n });\n\n // resume rebase see if it resolve the conflict\n await b2.txns.rebaser.resume();\n\n // use changeset api to read txn directly\n const reader = SqliteChangesetReader.openTxn({ db: b2, txnId: \"0x100000000\" });\n chai.expect(reader.step()).to.be.true;\n chai.expect(reader.tableName).to.be.equal(\"be_Prop\");\n chai.expect(reader.getColumnNames(reader.tableName)[5]).to.be.equal(\"StrData\");\n // note the operation changed from insert to update\n chai.expect(reader.op).to.be.equal(\"Updated\");\n // note this old value is from master branch after changeset was recomputed\n chai.expect(reader.getChangeValueText(5, \"Old\")).to.be.equal(\"test1\");\n // note this new value is from local branch after merger.\n chai.expect(reader.getChangeValueText(5, \"New\")).to.be.equal(\"test1 + test2\");\n reader.close();\n\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\n\n\n\n await b2.pushChanges({ description: \"test2\" });\n await b1.pullChanges();\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\n assert.equal(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test1 + test2\");\n\n b1.close();\n b2.close();\n });\n\n it(\"rebase with be_props (data conflict) \", async () => {\n const b1 = await ctx.openB1();\n const b1Txn = startTestTxn(b1);\n const b2 = await ctx.openB2();\n const b2Txn = startTestTxn(b2);\n\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test1\");\n b1Txn.saveChanges(\"test\");\n await b1.pushChanges({ description: \"test\" });\n\n await b2.pullChanges();\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test2\");\n b2Txn.saveChanges(\"test2\");\n\n b1Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, \"test3\");\n b1Txn.saveChanges(\"test\");\n await b1.pushChanges({ description: \"test\" });\n\n // set handler to resolve conflict\n b2.txns.rebaser.addConflictHandler({\n id: \"my\", handler: (args: RebaseChangesetConflictArgs) => {\n if (args.cause === \"Data\") {\n if (args.tableName === \"be_Prop\") {\n if (args.opcode === \"Updated\") {\n const localChangedVal = args.getValueText(5, \"New\");\n const tipValue = b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" });\n b2Txn.saveFileProperty({ namespace: \"test\", name: \"test\" }, `${tipValue} + ${localChangedVal}`);\n return DbConflictResolution.Skip; // skip incomming value and continue\n }\n }\n }\n return undefined;\n }\n });\n\n await b2.pushChanges({ description: \"test\" });\n await b2.pullChanges();\n await b1.pullChanges();\n assert.equal(b2.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test3 + test2\");\n assert.equal(b1.queryFilePropertyString({ namespace: \"test\", name: \"test\" }), \"test3 + test2\");\n\n b1.close();\n b2.close();\n });\n it(\"should keep element deleted when local delete conflicts with remote update\", async () => {\n const b1 = await ctx.openB1(true /* = noLock */);\n const b1Txn = startTestTxn(b1);\n const b2 = await ctx.openB2(true /* = noLock */);\n const b2Txn = startTestTxn(b2);\n\n const e1 = await insertPhysicalObject(b1Txn);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `inserted physical object [id=${e1}]` });\n await b2.pullChanges();\n\n const eb1 = b1.elements.getElementProps<PhysicalElementProps>(e1);\n eb1.userLabel = \"test1\";\n eb1.placement = { origin: { x: 1, y: 1, z: 1 }, angles: { yaw: 1, pitch: 1, roll: 1 } };\n eb1.geom = IModelTestUtils.createBox(Point3d.create(3, 3, 3));\n\n b1Txn.updateElement(eb1);\n b1Txn.saveChanges();\n await b1.pushChanges({ description: `update physical object [id=${e1}]` });\n\n b2Txn.deleteElement(e1);\n b2Txn.saveChanges();\n await b2.pullChanges();\n\n const eb2 = b2.elements.tryGetElementProps<PhysicalElementProps>(e1);\n\n // when placement is changed the element is not deleted after pullChanges();\n assert.isUndefined(eb2);\n\n b1.close();\n b2.close();\n });\n});\n"]}