@itwin/core-backend 5.9.0-dev.5 → 5.9.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) 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/ChannelControl.js.map +1 -1
  14. package/lib/cjs/CheckpointManager.js.map +1 -1
  15. package/lib/cjs/ClassRegistry.js +5 -5
  16. package/lib/cjs/ClassRegistry.js.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/CodeService.js.map +1 -1
  19. package/lib/cjs/CodeSpecs.js.map +1 -1
  20. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  21. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  22. package/lib/cjs/DevTools.js.map +1 -1
  23. package/lib/cjs/DisplayStyle.js.map +1 -1
  24. package/lib/cjs/ECDb.js.map +1 -1
  25. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  26. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  27. package/lib/cjs/ECSqlStatement.js.map +1 -1
  28. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  29. package/lib/cjs/EditTxn.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/FontFile.js.map +1 -1
  39. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  40. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  41. package/lib/cjs/GeometrySummary.js +47 -47
  42. package/lib/cjs/GeometrySummary.js.map +1 -1
  43. package/lib/cjs/IModelDb.js +8 -8
  44. package/lib/cjs/IModelDb.js.map +1 -1
  45. package/lib/cjs/IModelDbFonts.js.map +1 -1
  46. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  47. package/lib/cjs/IModelHost.js.map +1 -1
  48. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  49. package/lib/cjs/IModelJsFs.js.map +1 -1
  50. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  51. package/lib/cjs/IpcHost.js.map +1 -1
  52. package/lib/cjs/LineStyle.js.map +1 -1
  53. package/lib/cjs/LocalHub.js +1 -1
  54. package/lib/cjs/LocalHub.js.map +1 -1
  55. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  56. package/lib/cjs/LockControl.js.map +1 -1
  57. package/lib/cjs/Material.js.map +1 -1
  58. package/lib/cjs/Model.js.map +1 -1
  59. package/lib/cjs/NativeAppStorage.js.map +1 -1
  60. package/lib/cjs/NativeHost.js.map +1 -1
  61. package/lib/cjs/NavigationRelationship.js.map +1 -1
  62. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  63. package/lib/cjs/PropertyStore.js.map +1 -1
  64. package/lib/cjs/Relationship.js.map +1 -1
  65. package/lib/cjs/RpcBackend.js.map +1 -1
  66. package/lib/cjs/SQLiteDb.js.map +1 -1
  67. package/lib/cjs/Schema.js.map +1 -1
  68. package/lib/cjs/SchemaSync.js.map +1 -1
  69. package/lib/cjs/SchemaUtils.js.map +1 -1
  70. package/lib/cjs/SheetIndex.js.map +1 -1
  71. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  72. package/lib/cjs/SqliteStatement.js.map +1 -1
  73. package/lib/cjs/StashManager.js.map +1 -1
  74. package/lib/cjs/Texture.js.map +1 -1
  75. package/lib/cjs/TileStorage.js.map +1 -1
  76. package/lib/cjs/TxnManager.js.map +1 -1
  77. package/lib/cjs/ViewDefinition.js.map +1 -1
  78. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  79. package/lib/cjs/ViewStore.js.map +1 -1
  80. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  81. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  82. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  83. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  84. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  85. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  86. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  87. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  88. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  89. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  90. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  91. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  92. package/lib/cjs/core-backend.js.map +1 -1
  93. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  94. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  95. package/lib/cjs/domains/GenericElements.js.map +1 -1
  96. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  97. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  98. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  99. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  100. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  101. package/lib/cjs/internal/HubMock.js.map +1 -1
  102. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  103. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  104. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  105. package/lib/cjs/internal/NoLocks.js.map +1 -1
  106. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  107. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  108. package/lib/cjs/internal/Symbols.js.map +1 -1
  109. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  110. package/lib/cjs/internal/cross-package.js.map +1 -1
  111. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  112. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  113. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  114. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  115. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  116. package/lib/cjs/rpc/multipart.js.map +1 -1
  117. package/lib/cjs/rpc/tracing.js.map +1 -1
  118. package/lib/cjs/rpc/web/logging.js.map +1 -1
  119. package/lib/cjs/rpc/web/request.js.map +1 -1
  120. package/lib/cjs/rpc/web/response.js.map +1 -1
  121. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  122. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  123. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  124. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  125. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  126. package/lib/cjs/workspace/Settings.js.map +1 -1
  127. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  128. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  129. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  130. package/lib/cjs/workspace/Workspace.js.map +1 -1
  131. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  132. package/lib/esm/BackendHubAccess.js.map +1 -1
  133. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  134. package/lib/esm/BisCoreSchema.js.map +1 -1
  135. package/lib/esm/BlobContainerService.js.map +1 -1
  136. package/lib/esm/BriefcaseManager.js.map +1 -1
  137. package/lib/esm/CatalogDb.js.map +1 -1
  138. package/lib/esm/Category.js.map +1 -1
  139. package/lib/esm/ChangeSummaryManager.js +2 -2
  140. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  141. package/lib/esm/ChangedElementsDb.js.map +1 -1
  142. package/lib/esm/ChangesetECAdaptor.js +248 -248
  143. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  144. package/lib/esm/ChannelControl.js.map +1 -1
  145. package/lib/esm/CheckpointManager.js.map +1 -1
  146. package/lib/esm/ClassRegistry.js +5 -5
  147. package/lib/esm/ClassRegistry.js.map +1 -1
  148. package/lib/esm/CloudSqlite.js.map +1 -1
  149. package/lib/esm/CodeService.js.map +1 -1
  150. package/lib/esm/CodeSpecs.js.map +1 -1
  151. package/lib/esm/ConcurrentQuery.js.map +1 -1
  152. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  153. package/lib/esm/DevTools.js.map +1 -1
  154. package/lib/esm/DisplayStyle.js.map +1 -1
  155. package/lib/esm/ECDb.js.map +1 -1
  156. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  157. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  158. package/lib/esm/ECSqlStatement.js.map +1 -1
  159. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  160. package/lib/esm/EditTxn.js.map +1 -1
  161. package/lib/esm/Element.js.map +1 -1
  162. package/lib/esm/ElementAspect.js.map +1 -1
  163. package/lib/esm/ElementGraphics.js.map +1 -1
  164. package/lib/esm/ElementTreeWalker.js.map +1 -1
  165. package/lib/esm/Entity.js.map +1 -1
  166. package/lib/esm/EntityReferences.js.map +1 -1
  167. package/lib/esm/ExportGraphics.js.map +1 -1
  168. package/lib/esm/ExternalSource.js.map +1 -1
  169. package/lib/esm/FontFile.js.map +1 -1
  170. package/lib/esm/GeoCoordConfig.js.map +1 -1
  171. package/lib/esm/GeographicCRSServices.js.map +1 -1
  172. package/lib/esm/GeometrySummary.js +47 -47
  173. package/lib/esm/GeometrySummary.js.map +1 -1
  174. package/lib/esm/IModelDb.js +8 -8
  175. package/lib/esm/IModelDb.js.map +1 -1
  176. package/lib/esm/IModelDbFonts.js.map +1 -1
  177. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  178. package/lib/esm/IModelHost.js.map +1 -1
  179. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  180. package/lib/esm/IModelJsFs.js.map +1 -1
  181. package/lib/esm/ImageSourceConversion.js.map +1 -1
  182. package/lib/esm/IpcHost.js.map +1 -1
  183. package/lib/esm/LineStyle.js.map +1 -1
  184. package/lib/esm/LocalHub.js +1 -1
  185. package/lib/esm/LocalHub.js.map +1 -1
  186. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  187. package/lib/esm/LockControl.js.map +1 -1
  188. package/lib/esm/Material.js.map +1 -1
  189. package/lib/esm/Model.js.map +1 -1
  190. package/lib/esm/NativeAppStorage.js.map +1 -1
  191. package/lib/esm/NativeHost.js.map +1 -1
  192. package/lib/esm/NavigationRelationship.js.map +1 -1
  193. package/lib/esm/PromiseMemoizer.js.map +1 -1
  194. package/lib/esm/PropertyStore.js.map +1 -1
  195. package/lib/esm/Relationship.js.map +1 -1
  196. package/lib/esm/RpcBackend.js.map +1 -1
  197. package/lib/esm/SQLiteDb.js.map +1 -1
  198. package/lib/esm/Schema.js.map +1 -1
  199. package/lib/esm/SchemaSync.js.map +1 -1
  200. package/lib/esm/SchemaUtils.js.map +1 -1
  201. package/lib/esm/SheetIndex.js.map +1 -1
  202. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  203. package/lib/esm/SqliteStatement.js.map +1 -1
  204. package/lib/esm/StashManager.js.map +1 -1
  205. package/lib/esm/Texture.js.map +1 -1
  206. package/lib/esm/TileStorage.js.map +1 -1
  207. package/lib/esm/TxnManager.js.map +1 -1
  208. package/lib/esm/ViewDefinition.js.map +1 -1
  209. package/lib/esm/ViewStateHydrator.js.map +1 -1
  210. package/lib/esm/ViewStore.js.map +1 -1
  211. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  212. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  213. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  214. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  215. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  216. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  217. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  218. package/lib/esm/core-backend.js.map +1 -1
  219. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  220. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  221. package/lib/esm/domains/GenericElements.js.map +1 -1
  222. package/lib/esm/domains/GenericSchema.js.map +1 -1
  223. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  224. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  225. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  226. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  227. package/lib/esm/internal/HubMock.js.map +1 -1
  228. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  229. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  230. package/lib/esm/internal/NativePlatform.js.map +1 -1
  231. package/lib/esm/internal/NoLocks.js.map +1 -1
  232. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  233. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  234. package/lib/esm/internal/Symbols.js.map +1 -1
  235. package/lib/esm/internal/annotations/fields.js.map +1 -1
  236. package/lib/esm/internal/cross-package.js.map +1 -1
  237. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  238. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  239. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  240. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  241. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  242. package/lib/esm/rpc/multipart.js.map +1 -1
  243. package/lib/esm/rpc/tracing.js.map +1 -1
  244. package/lib/esm/rpc/web/logging.js.map +1 -1
  245. package/lib/esm/rpc/web/request.js.map +1 -1
  246. package/lib/esm/rpc/web/response.js.map +1 -1
  247. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  248. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  249. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  250. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  251. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  252. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  253. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  254. package/lib/esm/test/AttachDb.test.js +11 -11
  255. package/lib/esm/test/AttachDb.test.js.map +1 -1
  256. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  257. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  258. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  259. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  260. package/lib/esm/test/IModelHost.test.js.map +1 -1
  261. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  262. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  263. package/lib/esm/test/IpcHost.test.js.map +1 -1
  264. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  265. package/lib/esm/test/PrintElementTree.js.map +1 -1
  266. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  267. package/lib/esm/test/RevisionUtility.js.map +1 -1
  268. package/lib/esm/test/SchemaUtils.test.js +25 -25
  269. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  270. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  271. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  272. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  273. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  274. package/lib/esm/test/TestEditTxn.js.map +1 -1
  275. package/lib/esm/test/TestUtils.js.map +1 -1
  276. package/lib/esm/test/annotations/Fields.test.js +53 -53
  277. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  278. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  279. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  280. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  281. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  282. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  283. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  284. package/lib/esm/test/categories/Category.test.js.map +1 -1
  285. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  286. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  287. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  288. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  289. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  290. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  291. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  292. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  293. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  294. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  295. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  296. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  297. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  298. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  299. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  300. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  301. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  303. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  304. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  305. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  306. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  307. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  308. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  309. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  310. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  311. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  312. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  313. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  314. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  315. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  316. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  317. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  318. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  319. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  320. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  321. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  322. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  323. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  324. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  325. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  326. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  327. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  328. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  329. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  330. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  331. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  332. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  333. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  334. package/lib/esm/test/imageData.js.map +1 -1
  335. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  336. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  337. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  338. package/lib/esm/test/imodel/IModel.test.js +44 -44
  339. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  340. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  341. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  342. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  343. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  344. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  345. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  346. package/lib/esm/test/index.js.map +1 -1
  347. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  348. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  349. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  350. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  351. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  352. package/lib/esm/test/rpc/response.test.js.map +1 -1
  353. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  354. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  355. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  356. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  357. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  358. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  359. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  360. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  361. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  362. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  363. package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
  364. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  365. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  366. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  367. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  368. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  369. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  370. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  371. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  372. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  373. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  374. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  375. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  376. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  377. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  378. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  379. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  380. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  381. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  382. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  383. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  384. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  385. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  386. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  387. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  388. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  389. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  390. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  391. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  392. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  393. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  394. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  395. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  396. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  397. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  398. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  399. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  400. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  401. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  402. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  403. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  404. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  405. package/lib/esm/workspace/Settings.js.map +1 -1
  406. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  407. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  408. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  409. package/lib/esm/workspace/Workspace.js.map +1 -1
  410. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  411. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"SemanticRebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/SemanticRebase.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Code, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { Suite } from \"mocha\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { BriefcaseDb, BriefcaseManager, ChannelControl, DrawingCategory, IModelJsFs } from \"../../core-backend\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\nimport { TestUtils } from \"../TestUtils\";\n\nfunction startTestTxn(iModel: BriefcaseDb, description = \"semantic rebase\"): EditTxn {\n const txn = new EditTxn(iModel, description);\n txn.start();\n return txn;\n}\n\nfunction endTestTxn(txn: EditTxn): void {\n if (txn.isActive)\n txn.end(\"abandon\");\n}\n\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\n if (txn.isActive)\n txn.saveChanges();\n await txn.iModel.importSchemaStrings(schemas);\n}\n\nasync function pushChanges(txn: EditTxn, description: string): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pushChanges({ description });\n}\n\nasync function pullChanges(txn: EditTxn): Promise<void> {\n const briefcase = txn.iModel as BriefcaseDb;\n endTestTxn(txn);\n await briefcase.pullChanges();\n}\n\n/**\n * Test infrastructure for rebase tests in this file.\n * Manages two briefcases (far and local)\n */\nclass TestIModel {\n public iModelId: Id64String = \"\";\n public drawingModelId: Id64String = \"\";\n public drawingCategoryId: Id64String = \"\";\n public far: BriefcaseDb;\n public local: BriefcaseDb;\n\n private constructor(iModelId: Id64String, drawingModelId: Id64String, drawingCategoryId: Id64String, far: BriefcaseDb, local: BriefcaseDb) {\n this.iModelId = iModelId;\n this.drawingModelId = drawingModelId;\n this.drawingCategoryId = drawingCategoryId;\n this.far = far;\n this.local = local;\n }\n\n /** Reusable schema definitions for testing rebase with schema transformations */\n public static readonly schemas = {\n /** Base schema v01.00.00 with classes A, C, D */\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n\n /** v01.00.03 - Adds PropC2 as string (used to test incompatibility when reinstated on top of v01.00.02 with PropC2:int) */\n v01x00x03AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\n <ECEntityClass typeName=\"A\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"C\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\n </ECEntityClass>\n <ECEntityClass typeName=\"D\">\n <BaseClass>A</BaseClass>\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`,\n };\n\n /**\n * Create and initialize a new test iModel with far and local briefcases.\n * @param testName Unique name for this test (passed to HubMock.startup)\n * @returns Fully initialized TestIModel with both briefcases open\n */\n public static async initialize(testName: string): Promise<TestIModel> {\n HubMock.startup(testName, KnownTestLocations.outputDir);\n\n let far: BriefcaseDb | undefined;\n let local: BriefcaseDb | undefined;\n try {\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"far-user\",\n iTwinId: HubMock.iTwinId,\n iModelName: testName,\n description: `Rebase schema update with data transform tests: ${testName}`,\n });\n\n // Open far briefcase and use it for initialization\n far = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"far-user\",\n });\n far.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n // Initialize with base schema\n await far.importSchemaStrings([TestIModel.schemas.v01x00x00]);\n await far.pushChanges({ description: \"import base schema\" });\n\n // Create model and category\n const modelCode = IModelTestUtils.getUniqueModelCode(far, \"DrawingModel\");\n await far.locks.acquireLocks({ shared: IModel.dictionaryId });\n const [drawingModelId, drawingCategoryId] = withEditTxn(far, \"create model and category\", (txn) => {\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n const newDrawingCategoryId = DrawingCategory.insert(\n txn,\n IModel.dictionaryId,\n \"DrawingCategory\",\n new SubCategoryAppearance()\n );\n return [newDrawingModelId, newDrawingCategoryId] as const;\n });\n await far.pushChanges({ description: \"create model and category\" });\n\n // Open local briefcase\n local = await HubWrappers.downloadAndOpenBriefcase({\n iTwinId: HubMock.iTwinId,\n iModelId,\n accessToken: \"local-user\",\n });\n local.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n return new TestIModel(iModelId, drawingModelId, drawingCategoryId, far, local);\n } catch (error) {\n if (local?.isOpen)\n local.close();\n\n if (far?.isOpen)\n far.close();\n\n HubMock.shutdown();\n throw error;\n }\n }\n\n public insertElement(\n txn: EditTxn,\n className: string,\n properties: Record<string, any>\n ): Id64String {\n const briefcase = txn.iModel as BriefcaseDb;\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: this.drawingModelId,\n category: this.drawingCategoryId,\n code: Code.createEmpty(),\n ...properties,\n };\n const element = briefcase.elements.createElement(elementProps);\n return txn.insertElement(element.toJSON());\n }\n\n public updateElement(txn: EditTxn, elementId: Id64String, updates: Record<string, any>): void {\n const briefcase = txn.iModel as BriefcaseDb;\n const element = briefcase.elements.getElement(elementId);\n Object.assign(element, updates);\n txn.updateElement(element.toJSON());\n }\n\n public getElement(briefcase: BriefcaseDb, elementId: Id64String): any {\n return briefcase.elements.getElement(elementId);\n }\n\n public checkIfFolderExists(briefcase: BriefcaseDb, txnId: string, isSchemaFolder: boolean): boolean {\n if (isSchemaFolder)\n return BriefcaseManager.semanticRebaseSchemaFolderExists(briefcase, txnId);\n return BriefcaseManager.semanticRebaseDataFolderExists(briefcase, txnId);\n }\n\n public checkifRebaseFolderExists(briefcase: BriefcaseDb): boolean {\n const folderPath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(briefcase);\n return IModelJsFs.existsSync(folderPath);\n }\n\n public shutdown(): void {\n this.far.close();\n this.local.close();\n HubMock.shutdown();\n }\n}\n\n/**\n * Test suite for rebase logic with schema changes that require data transformations.\n */\ndescribe(\"Semantic Rebase\", function (this: Suite) {\n this.timeout(60000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n })\n\n it(\"local data changes onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncoming\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\n\n // Far imports updated schema with new property PropC2\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.far.holdsSchemaLock).to.be.false;\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local makes local changes to the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n\n // Local pulls and rebases local changes onto incoming schema change\n await pullChanges(localTxn);\n\n // Verify: local changes preserved, schema updated\n const element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"local_update_a\", \"Local property update should be preserved\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be updated to v01.00.01\");\n });\n\n it(\"local trivial schema change onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocal\");\n let localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n\n // Local creates an element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a\",\n propC: \"value_c\",\n });\n localTxn.saveChanges(\"create element\");\n await pushChanges(localTxn, \"create test element\");\n localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\n\n // Local imports updated schema locally\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.local.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.local.holdsSchemaLock).to.be.false;\n\n const txnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true;\n\n\n // Far pulls element, then updates it\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(farTxn, elementId, { propA: \"far_update_a\" });\n farTxn.saveChanges(\"far update to propA\");\n await pushChanges(farTxn, \"update element propA\");\n\n // Local pulls and rebases local schema change onto incoming data changes\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true; // after rebase the folder should be there until push is called\n\n // Verify: incoming data changes applied, local schema preserved\n const element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"far_update_a\", \"Incoming property update should be applied\");\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Local schema update should be preserved\");\n });\n\n it(\"local data changes onto incoming data changes\", async () => {\n t = await TestIModel.initialize(\"DataOntoData\");\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n\n // Local creates two elements\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a1\",\n propC: \"value_c1\",\n });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"value_a2\",\n propC: \"value_c2\",\n });\n localTxn.saveChanges(\"create elements\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(localTxn, \"create test elements\");\n localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Far updates first element\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propC: \"far_update_c\" });\n farTxn.saveChanges(\"far update to propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n await pushChanges(farTxn, \"update element propC\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n\n // Local makes local changes to second element\n await t.local.locks.acquireLocks({ exclusive: elementId2 });\n t.updateElement(localTxn, elementId2, { propA: \"local_update_a\" });\n localTxn.saveChanges(\"local update to propA\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\n\n // Verify: both changes applied to their respective elements\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"value_a1\", \"Element 1 propA should be unchanged\");\n chai.expect(element1.propC).to.equal(\"far_update_c\", \"Element 1 incoming update should be applied\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"local_update_a\", \"Element 2 local update should be preserved\");\n chai.expect(element2.propC).to.equal(\"value_c2\", \"Element 2 propC should be unchanged\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (local newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaLocalNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes local newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes local newer far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // after rebase the folder should be there because local is newer until push is called\n\n // Verify: local schema preserved (newer version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema (newer) should be preserved\");\n });\n\n it(\"local trivial schema changes onto incoming trivial schema changes (incoming newer)\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncomingNewer\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes incoming newer local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes incoming newer far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - newer)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports v01.00.01 (adds only PropC2 - older)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there because incoming is newer so while rebasing it should be a no op\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: incoming schema preserved (newer version, local should not override)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Incoming schema (newer) should win, local should not override\");\n });\n\n it(\"local trivial schema changes onto incoming identical schema changes\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIdentical\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes local\");\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\n chai.expect(t.far.holdsSchemaLock).to.be.false;\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n // Local imports the same v01.00.01 (adds PropC2)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted if it contains nothing after rebase\n\n // Verify: schema preserved (both sides identical)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n });\n\n it(\"local trivial schema changes onto incoming identical schema changes with data changes on both sides\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIdenticalWithData\");\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes with data local\");\n let farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n // Far imports v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnProps).to.not.be.undefined;\n chai.expect(txnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\n\n await pushChanges(farTxn, \"add PropC2 to class C\");\n farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\n\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\n\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n propC2: \"far_value_c2\",\n });\n farTxn.saveChanges(\"far creates element with new property\");\n await pushChanges(farTxn, \"far creates element\");\n\n // Local imports the same v01.00.01 (adds PropC2) and creates an element\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\n\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n propC2: \"local_value_c2\",\n });\n localTxn.saveChanges(\"local creates element with new property\");\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\n\n // Verify: schema preserved (both sides identical)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n\n // Verify: both elements exist with their original properties\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved\");\n chai.expect(farElement.propC2).to.equal(\"far_value_c2\", \"Far element propC2 should be preserved\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved\");\n chai.expect(localElement.propC2).to.equal(\"local_value_c2\", \"Local element propC2 should be preserved\");\n });\n\n it(\"both add different properties, increment to same version number\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add different properties increment to same version local\");\n const farTxn = startTestTxn(t.far, \"both add different properties increment to same version far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC3Incompatible]);\n\n await pullChanges(localTxn); // TODO: this currently passes, because same version number means no upgrade is attempted\n //TODO: this should probably fail instead as both sides made incompatible changes to the same version, but this is unrelated to semantic rebase itself\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\n });\n\n it(\"both add compatible properties, local version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaLocalHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties local version higher far\");\n\n // Far imports v01.00.01 (adds PropC2)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n // Local imports v01.00.02 (adds PropC2 and PropD2 - compatible higher version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Local schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add compatible properties, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"CompatibleSchemaIncomingHigher\");\n const localTxn = startTestTxn(t.local, \"both add compatible properties incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add compatible properties incoming version higher far\");\n\n // Far imports v01.00.02 (adds PropC2 and PropD2 - higher version)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n await pushChanges(farTxn, \"update schema to v01.00.02\");\n\n // Local imports v01.00.01 (adds only PropC2 - compatible lower version)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n // Local pulls and rebases\n await pullChanges(localTxn);\n\n // Verify: Incoming schema wins (higher version)\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\n chai.expect(classC).to.not.be.undefined;\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\n chai.expect(classD).to.not.be.undefined;\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\n });\n\n it(\"both add same but incompatible property, local version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property local version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property local version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n await pushChanges(farTxn, \"add PropC2 to class C\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"both add same but incompatible property, incoming version number higher\", async () => {\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property incoming version higher local\");\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property incoming version higher far\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\n await pushChanges(farTxn, \"import v01.00.02 with PropC2 as int\");\n\n // Local uses v01.00.03 with PropC2:string — higher version ensures the upgrade is attempted\n // during reinstatement, which detects the type mismatch (string vs int)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03AddPropC2]);\n\n // Local pulls and rebases - this should detect the incompatibility and fail\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\n });\n\n it(\"local transforming schema change onto incoming trivial schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingTrivial\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming trivial schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming trivial schema change local\");\n\n // Far: Insert Element and import trivial schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Insert Element and import transforming schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases transforming change onto incoming trivial change\n await pushChanges(localTxn, \"local move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n // Verify: both elements have PropC intact, schema transformed locally\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after transform\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after transform\");\n });\n\n it(\"local trivial schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalTrivialIncomingTransform\");\n const farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming transforming schema change local\");\n\n // Far: Insert Element and import transforming schema change\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local: Insert Element and import trivial schema change\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // Local pulls and rebases trivial change onto incoming transforming change\n await pushChanges(localTxn, \"local add PropC2\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: both elements have PropC intact after incoming transform\n const farElement = t.getElement(t.local, farElementId);\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after incoming transform\");\n\n const localElement = t.getElement(t.local, localElementId);\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after incoming transform\");\n });\n\n it(\"local transforming schema change onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"BothTransforming\");\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming transforming schema change local\");\n\n // Far: Create elements with PropC and PropD, import transforming schema (moves PropC to A)\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const farElementC = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a_c\",\n propC: \"far_value_c\",\n });\n const farElementD = t.insertElement(farTxn, \"TestDomain:D\", {\n propA: \"far_value_a_d\",\n propD: \"far_value_d\",\n });\n farTxn.saveChanges(\"far create elements\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n farTxn.saveChanges(\"far move PropC to A\");\n await pushChanges(farTxn, \"far transform PropC\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local: Create elements with PropC and PropD, import transforming schema (moves both PropC and PropD to A)\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const localElementC = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a_c\",\n propC: \"local_value_c\",\n });\n const localElementD = t.insertElement(localTxn, \"TestDomain:D\", {\n propA: \"local_value_a_d\",\n propD: \"local_value_d\",\n });\n localTxn.saveChanges(\"local create elements\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\n\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n localTxn.saveChanges(\"local move PropC and PropD to A\");\n // Local pulls and rebases both transforming changes\n await pushChanges(localTxn, \"local transform PropC and PropD\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.far.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n // Verify: all elements have both PropC and PropD intact\n const farElemC = t.getElement(t.local, farElementC);\n chai.expect(farElemC.propA).to.equal(\"far_value_a_c\", \"Far element C propA should be preserved\");\n chai.expect(farElemC.propC).to.equal(\"far_value_c\", \"Far element C propC should be preserved after both transforms\");\n\n const farElemD = t.getElement(t.local, farElementD);\n chai.expect(farElemD.propA).to.equal(\"far_value_a_d\", \"Far element D propA should be preserved\");\n chai.expect(farElemD.propD).to.equal(\"far_value_d\", \"Far element D propD should be preserved after both transforms\");\n\n const localElemC = t.getElement(t.local, localElementC);\n chai.expect(localElemC.propA).to.equal(\"local_value_a_c\", \"Local element C propA should be preserved\");\n chai.expect(localElemC.propC).to.equal(\"local_value_c\", \"Local element C propC should be preserved after both transforms\");\n\n const localElemD = t.getElement(t.local, localElementD);\n chai.expect(localElemD.propA).to.equal(\"local_value_a_d\", \"Local element D propA should be preserved\");\n chai.expect(localElemD.propD).to.equal(\"local_value_d\", \"Local element D propD should be preserved after both transforms\");\n });\n\n it(\"local data update onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_value_a\",\n propC: \"initial_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n await pushChanges(farTxn, \"create shared element\");\n farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\n\n // Local pulls to get the element\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\n chai.expect(txnPropsFar).to.not.be.undefined;\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n // Local updates PropC on the element\n await t.local.locks.acquireLocks({ exclusive: elementId });\n t.updateElement(localTxn, elementId, { propC: \"local_modified_c\" });\n localTxn.saveChanges(\"local update propC\");\n let element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value before incoming transform\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // no schema change yet on local so no rebase folder\n\n // Local pulls and rebases data change onto incoming transforming schema change\n await pullChanges(localTxn);\n\n // after rebase the folder should not be there because data change folder is created on the fly and removed once rebased and rebase folder is also removed if it contains nothing\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n // Verify: PropC has the modified local value after the transform\n element = t.getElement(t.local, elementId);\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value after incoming transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local transforming schema change local\");\n\n // Insert one instance and populate to both far and local\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdFar = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n farTxn.saveChanges(\"far create element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // no schema change yet on far so no rebase folder\n await pushChanges(farTxn, \"create shared element\");\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementIdLocal = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n localTxn.saveChanges(\"local create element\");\n // Far imports transforming schema (moves PropC from C to A)\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\n chai.expect(txnPropsLocal).to.not.be.undefined;\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\n\n // local pulls and rebases and then pushes\n await pushChanges(localTxn, \"far move PropC to A\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Check if associated rebase folders get deleted when a briefcase is deleted or not\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\n // Must close briefcases before deleting their files - on Windows, open files are locked by the OS.\n // Save paths before closing since pathName getter throws on closed dbs.\n const localPath = t.local.pathName;\n const localRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\n const farPath = t.far.pathName;\n const farRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.far);\n t.local.close();\n await BriefcaseManager.deleteBriefcaseFiles(localPath);\n chai.expect(IModelJsFs.existsSync(localRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n t.far.close();\n await BriefcaseManager.deleteBriefcaseFiles(farPath);\n chai.expect(IModelJsFs.existsSync(farRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\n });\n\n it(\"local multiple data transactions onto incoming transforming schema change\", async () => {\n t = await TestIModel.initialize(\"LocalMultipleDataIncomingTransform\");\n let farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n let localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Insert initial element and push\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n localTxn.saveChanges(\"create first element\");\n await pushChanges(localTxn, \"create initial element\");\n localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\n\n // Far imports transforming schema (moves PropC from C to A)\n await pullChanges(farTxn);\n farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n await pushChanges(farTxn, \"far move PropC to A\");\n\n // Local makes first data change\n await t.local.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(localTxn, elementId1, { propA: \"first_update_a\" });\n localTxn.saveChanges(\"first data change\");\n\n // Local makes second data change - create new element\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"second_element_a\",\n propC: \"second_element_c\",\n });\n localTxn.saveChanges(\"second data change - new element\");\n\n // Local pulls and rebases both transactions onto incoming transforming schema\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both local data changes preserved after incoming transform\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"first_update_a\", \"First element propA update should be preserved\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"second_element_a\", \"Second element propA should be preserved\");\n chai.expect(element2.propC).to.equal(\"second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"local transforming schema change onto incoming multiple data transactions\", async () => {\n t = await TestIModel.initialize(\"LocalTransformIncomingMultipleData\");\n let farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n let localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n\n // Create initial element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId1 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"initial_a\",\n propC: \"initial_c\",\n });\n farTxn.saveChanges(\"create first element\");\n await pushChanges(farTxn, \"create initial element\");\n farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\n\n // Local pulls and imports transforming schema\n await pullChanges(localTxn);\n localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n\n // Far makes first data change\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\n t.updateElement(farTxn, elementId1, { propA: \"far_first_update_a\" });\n farTxn.saveChanges(\"far first data change\");\n\n // Far makes second data change - create new element\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\n const elementId2 = t.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_second_element_a\",\n propC: \"far_second_element_c\",\n });\n farTxn.saveChanges(\"far second data change - new element\");\n await pushChanges(farTxn, \"far multiple data changes\");\n\n // Local pulls and rebases local transforming schema onto incoming data changes\n await pullChanges(localTxn);\n\n t.local.clearCaches();\n\n // Verify: both incoming data changes applied, local schema transformation preserved\n const element1 = t.getElement(t.local, elementId1);\n chai.expect(element1.propA).to.equal(\"far_first_update_a\", \"First element incoming update should be applied\");\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\n\n const element2 = t.getElement(t.local, elementId2);\n chai.expect(element2.propA).to.equal(\"far_second_element_a\", \"Second element should exist with correct propA\");\n chai.expect(element2.propC).to.equal(\"far_second_element_c\", \"Second element propC should be preserved after transform\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema transformation should be preserved\");\n });\n\n it(\"should fail when importing schema with unsaved data changes\", async () => {\n t = await TestIModel.initialize(\"UnsavedDataChangesSchemaImport\");\n const localTxn = startTestTxn(t.local, \"should fail when importing schema with unsaved data changes local\");\n\n // Create element but DO NOT save changes\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\n t.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"unsaved_a\",\n propC: \"unsaved_c\",\n });\n // Intentionally not saving the active local transaction before schema import.\n\n // Try to import schema - this should fail\n await chai.expect(\n localTxn.iModel.importSchemaStrings([TestIModel.schemas.v01x00x01AddPropC2])\n ).to.be.rejectedWith(\"Cannot import schemas with unsaved changes when useSemanticRebase flag is on\");\n\n // Verify: element was not saved, schema was not imported\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.00\", \"Schema should remain at v01.00.00\");\n });\n\n});\n\n/**\n * Test suite for tests related to rebase logic with schema changes (for indirect changes) that require data transformations.\n */\ndescribe(\"Semantic Rebase with indirect changes\", function (this: Suite) {\n this.timeout(60000); // operations can be slow\n let t: TestIModel | undefined;\n\n before(async () => {\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\n await TestUtils.startBackend({ useSemanticRebase: true });\n });\n\n afterEach(() => {\n if (t) {\n t.shutdown();\n t = undefined;\n }\n });\n\n after(async () => {\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\n });\n\n it(\"Incoming data update onto local data change\", async () => { // This doesnot actually take the semantic rebase route as both incoming and local have data changes only\n t = await TestIModel.initialize(\"IncomingDataLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n });\n\n it(\"Incoming data and schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and schema update onto local data and schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataLocalDataAndSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data and schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data and schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and Transforming schema update onto local data change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and Transforming schema update onto local data change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and Transforming schema update onto local data change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data and transforming schema update onto local data and transforming schema change\", async () => {\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataAndTransformingSchemaChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data and transforming schema update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data and transforming schema update onto local data and transforming schema change local\");\n\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\n chai.expect(farTxnProps).to.not.be.undefined;\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n await pullChanges(localTxn);\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // because it is a no op change we are importing similar schema\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // schema change is no op and data changes are generated on the fly and removed once rebased so rebase folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n it(\"Incoming data update onto local data and transforming schema change\", async () => {\n // This test fails but should not fail actually - needs investigation\n\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data and transforming schema change far\");\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data and transforming schema change local\");\n\n let elementIdFar: Id64String = \"\";\n await t.far.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\n propA: \"far_value_a\",\n propC: \"far_value_c\",\n });\n });\n farTxn.saveChanges(\"far create indirect element\");\n await pushChanges(farTxn, \"create indirect element\");\n\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\n chai.expect(localTxnProps).to.not.be.undefined;\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\n\n let elementIdLocal: Id64String = \"\";\n await t.local.txns.withIndirectTxnModeAsync(async () => {\n // Insert one instance and populate to both far and local\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\n propA: \"local_value_a\",\n propC: \"local_value_c\",\n });\n });\n localTxn.saveChanges(\"local create indirect element\");\n\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\n\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\n\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\n\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\n\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\n\n const elementFar = t.getElement(t.local, elementIdFar);\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\n\n const elementLocal = t.getElement(t.local, elementIdLocal);\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\n\n const schema = t.local.getSchemaProps(\"TestDomain\");\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\n });\n\n});\n\n\n"]}
1
+ {"version":3,"file":"SemanticRebase.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/SemanticRebase.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport { Suite } from \"mocha\";\r\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\r\nimport { BriefcaseDb, BriefcaseManager, ChannelControl, DrawingCategory, IModelJsFs } from \"../../core-backend\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\r\nimport { TestUtils } from \"../TestUtils\";\r\n\r\nfunction startTestTxn(iModel: BriefcaseDb, description = \"semantic rebase\"): EditTxn {\r\n const txn = new EditTxn(iModel, description);\r\n txn.start();\r\n return txn;\r\n}\r\n\r\nfunction endTestTxn(txn: EditTxn): void {\r\n if (txn.isActive)\r\n txn.end(\"abandon\");\r\n}\r\n\r\nasync function importSchemaStrings(txn: EditTxn, schemas: string[]): Promise<void> {\r\n if (txn.isActive)\r\n txn.saveChanges();\r\n await txn.iModel.importSchemaStrings(schemas);\r\n}\r\n\r\nasync function pushChanges(txn: EditTxn, description: string): Promise<void> {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n endTestTxn(txn);\r\n await briefcase.pushChanges({ description });\r\n}\r\n\r\nasync function pullChanges(txn: EditTxn): Promise<void> {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n endTestTxn(txn);\r\n await briefcase.pullChanges();\r\n}\r\n\r\n/**\r\n * Test infrastructure for rebase tests in this file.\r\n * Manages two briefcases (far and local)\r\n */\r\nclass TestIModel {\r\n public iModelId: Id64String = \"\";\r\n public drawingModelId: Id64String = \"\";\r\n public drawingCategoryId: Id64String = \"\";\r\n public far: BriefcaseDb;\r\n public local: BriefcaseDb;\r\n\r\n private constructor(iModelId: Id64String, drawingModelId: Id64String, drawingCategoryId: Id64String, far: BriefcaseDb, local: BriefcaseDb) {\r\n this.iModelId = iModelId;\r\n this.drawingModelId = drawingModelId;\r\n this.drawingCategoryId = drawingCategoryId;\r\n this.far = far;\r\n this.local = local;\r\n }\r\n\r\n /** Reusable schema definitions for testing rebase with schema transformations */\r\n public static readonly schemas = {\r\n /** Base schema v01.00.00 with classes A, C, D */\r\n v01x00x00: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.01 - Adds PropC2 to class C (trivial additive change) */\r\n v01x00x01AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.02 - Adds PropD2 to class D (trivial additive change) */\r\n v01x00x02AddPropD2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.02 - Moves PropC from C to A (requires data transformation) on top of v01.00.01 */\r\n v01x00x02MovePropCToA: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.03 - Builds on top of v01.00.02 and in addition moves PropD to base, so we can have incoming and local transforming changes */\r\n v01x00x03MovePropCAndD: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.01 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (same version) */\r\n v01x00x01AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.02 (incompatible variant) - Adds PropC3 instead of PropC2 to class C (higher version) */\r\n v01x00x02AddPropC3Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC3\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.02 (incompatible variant) - Adds PropC2 (higher version, different type) */\r\n v01x00x02AddPropC2Incompatible: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.02\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"int\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n\r\n /** v01.00.03 - Adds PropC2 as string (used to test incompatibility when reinstated on top of v01.00.02 with PropC2:int) */\r\n v01x00x03AddPropC2: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"td\" version=\"01.00.03\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00.23\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"A\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"C\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropC\" typeName=\"string\"/>\r\n <ECProperty propertyName=\"PropC2\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"D\">\r\n <BaseClass>A</BaseClass>\r\n <ECProperty propertyName=\"PropD\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`,\r\n };\r\n\r\n /**\r\n * Create and initialize a new test iModel with far and local briefcases.\r\n * @param testName Unique name for this test (passed to HubMock.startup)\r\n * @returns Fully initialized TestIModel with both briefcases open\r\n */\r\n public static async initialize(testName: string): Promise<TestIModel> {\r\n HubMock.startup(testName, KnownTestLocations.outputDir);\r\n\r\n let far: BriefcaseDb | undefined;\r\n let local: BriefcaseDb | undefined;\r\n try {\r\n const iModelId = await HubMock.createNewIModel({\r\n accessToken: \"far-user\",\r\n iTwinId: HubMock.iTwinId,\r\n iModelName: testName,\r\n description: `Rebase schema update with data transform tests: ${testName}`,\r\n });\r\n\r\n // Open far briefcase and use it for initialization\r\n far = await HubWrappers.downloadAndOpenBriefcase({\r\n iTwinId: HubMock.iTwinId,\r\n iModelId,\r\n accessToken: \"far-user\",\r\n });\r\n far.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n // Initialize with base schema\r\n await far.importSchemaStrings([TestIModel.schemas.v01x00x00]);\r\n await far.pushChanges({ description: \"import base schema\" });\r\n\r\n // Create model and category\r\n const modelCode = IModelTestUtils.getUniqueModelCode(far, \"DrawingModel\");\r\n await far.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const [drawingModelId, drawingCategoryId] = withEditTxn(far, \"create model and category\", (txn) => {\r\n const [, newDrawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\r\n const newDrawingCategoryId = DrawingCategory.insert(\r\n txn,\r\n IModel.dictionaryId,\r\n \"DrawingCategory\",\r\n new SubCategoryAppearance()\r\n );\r\n return [newDrawingModelId, newDrawingCategoryId] as const;\r\n });\r\n await far.pushChanges({ description: \"create model and category\" });\r\n\r\n // Open local briefcase\r\n local = await HubWrappers.downloadAndOpenBriefcase({\r\n iTwinId: HubMock.iTwinId,\r\n iModelId,\r\n accessToken: \"local-user\",\r\n });\r\n local.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n return new TestIModel(iModelId, drawingModelId, drawingCategoryId, far, local);\r\n } catch (error) {\r\n if (local?.isOpen)\r\n local.close();\r\n\r\n if (far?.isOpen)\r\n far.close();\r\n\r\n HubMock.shutdown();\r\n throw error;\r\n }\r\n }\r\n\r\n public insertElement(\r\n txn: EditTxn,\r\n className: string,\r\n properties: Record<string, any>\r\n ): Id64String {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n const elementProps: GeometricElementProps = {\r\n classFullName: className,\r\n model: this.drawingModelId,\r\n category: this.drawingCategoryId,\r\n code: Code.createEmpty(),\r\n ...properties,\r\n };\r\n const element = briefcase.elements.createElement(elementProps);\r\n return txn.insertElement(element.toJSON());\r\n }\r\n\r\n public updateElement(txn: EditTxn, elementId: Id64String, updates: Record<string, any>): void {\r\n const briefcase = txn.iModel as BriefcaseDb;\r\n const element = briefcase.elements.getElement(elementId);\r\n Object.assign(element, updates);\r\n txn.updateElement(element.toJSON());\r\n }\r\n\r\n public getElement(briefcase: BriefcaseDb, elementId: Id64String): any {\r\n return briefcase.elements.getElement(elementId);\r\n }\r\n\r\n public checkIfFolderExists(briefcase: BriefcaseDb, txnId: string, isSchemaFolder: boolean): boolean {\r\n if (isSchemaFolder)\r\n return BriefcaseManager.semanticRebaseSchemaFolderExists(briefcase, txnId);\r\n return BriefcaseManager.semanticRebaseDataFolderExists(briefcase, txnId);\r\n }\r\n\r\n public checkifRebaseFolderExists(briefcase: BriefcaseDb): boolean {\r\n const folderPath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(briefcase);\r\n return IModelJsFs.existsSync(folderPath);\r\n }\r\n\r\n public shutdown(): void {\r\n this.far.close();\r\n this.local.close();\r\n HubMock.shutdown();\r\n }\r\n}\r\n\r\n/**\r\n * Test suite for rebase logic with schema changes that require data transformations.\r\n */\r\ndescribe(\"Semantic Rebase\", function (this: Suite) {\r\n this.timeout(60000); // operations can be slow\r\n let t: TestIModel | undefined;\r\n\r\n before(async () => {\r\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\r\n await TestUtils.startBackend({ useSemanticRebase: true });\r\n });\r\n\r\n afterEach(() => {\r\n if (t) {\r\n t.shutdown();\r\n t = undefined;\r\n }\r\n });\r\n\r\n after(async () => {\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\r\n })\r\n\r\n it(\"local data changes onto incoming trivial schema change\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIncoming\");\r\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\r\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\r\n\r\n // Local creates an element\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"value_a\",\r\n propC: \"value_c\",\r\n });\r\n localTxn.saveChanges(\"create element\");\r\n await pushChanges(localTxn, \"create test element\");\r\n localTxn = startTestTxn(t.local, \"local data changes onto incoming trivial schema change local\");\r\n\r\n // Far imports updated schema with new property PropC2\r\n await pullChanges(farTxn);\r\n farTxn = startTestTxn(t.far, \"local data changes onto incoming trivial schema change far\");\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\r\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\r\n chai.expect(t.far.holdsSchemaLock).to.be.false;\r\n\r\n const txnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\r\n\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\r\n\r\n // Local makes local changes to the element\r\n await t.local.locks.acquireLocks({ exclusive: elementId });\r\n t.updateElement(localTxn, elementId, { propA: \"local_update_a\" });\r\n localTxn.saveChanges(\"local update to propA\");\r\n\r\n // Local pulls and rebases local changes onto incoming schema change\r\n await pullChanges(localTxn);\r\n\r\n // Verify: local changes preserved, schema updated\r\n const element = t.getElement(t.local, elementId);\r\n chai.expect(element.propA).to.equal(\"local_update_a\", \"Local property update should be preserved\");\r\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be updated to v01.00.01\");\r\n });\r\n\r\n it(\"local trivial schema change onto incoming data changes\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaLocal\");\r\n let localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\r\n let farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\r\n\r\n // Local creates an element\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"value_a\",\r\n propC: \"value_c\",\r\n });\r\n localTxn.saveChanges(\"create element\");\r\n await pushChanges(localTxn, \"create test element\");\r\n localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming data changes local\");\r\n\r\n // Local imports updated schema locally\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\r\n chai.expect(t.local.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\r\n chai.expect(t.local.holdsSchemaLock).to.be.false;\r\n\r\n const txnProps = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true;\r\n\r\n\r\n // Far pulls element, then updates it\r\n await pullChanges(farTxn);\r\n farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming data changes far\");\r\n await t.far.locks.acquireLocks({ exclusive: elementId });\r\n t.updateElement(farTxn, elementId, { propA: \"far_update_a\" });\r\n farTxn.saveChanges(\"far update to propA\");\r\n await pushChanges(farTxn, \"update element propA\");\r\n\r\n // Local pulls and rebases local schema change onto incoming data changes\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, txnProps!.id, true)).to.be.true; // after rebase the folder should be there until push is called\r\n\r\n // Verify: incoming data changes applied, local schema preserved\r\n const element = t.getElement(t.local, elementId);\r\n chai.expect(element.propA).to.equal(\"far_update_a\", \"Incoming property update should be applied\");\r\n chai.expect(element.propC).to.equal(\"value_c\", \"Original propC should be preserved\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Local schema update should be preserved\");\r\n });\r\n\r\n it(\"local data changes onto incoming data changes\", async () => {\r\n t = await TestIModel.initialize(\"DataOntoData\");\r\n let localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\r\n let farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\r\n\r\n // Local creates two elements\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"value_a1\",\r\n propC: \"value_c1\",\r\n });\r\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"value_a2\",\r\n propC: \"value_c2\",\r\n });\r\n localTxn.saveChanges(\"create elements\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n await pushChanges(localTxn, \"create test elements\");\r\n localTxn = startTestTxn(t.local, \"local data changes onto incoming data changes local\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n\r\n // Far updates first element\r\n await pullChanges(farTxn);\r\n farTxn = startTestTxn(t.far, \"local data changes onto incoming data changes far\");\r\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\r\n t.updateElement(farTxn, elementId1, { propC: \"far_update_c\" });\r\n farTxn.saveChanges(\"far update to propC\");\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n await pushChanges(farTxn, \"update element propC\");\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n\r\n\r\n // Local makes local changes to second element\r\n await t.local.locks.acquireLocks({ exclusive: elementId2 });\r\n t.updateElement(localTxn, elementId2, { propA: \"local_update_a\" });\r\n localTxn.saveChanges(\"local update to propA\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // its data changes on both sides semantic rebase is not used\r\n\r\n // Verify: both changes applied to their respective elements\r\n const element1 = t.getElement(t.local, elementId1);\r\n chai.expect(element1.propA).to.equal(\"value_a1\", \"Element 1 propA should be unchanged\");\r\n chai.expect(element1.propC).to.equal(\"far_update_c\", \"Element 1 incoming update should be applied\");\r\n\r\n const element2 = t.getElement(t.local, elementId2);\r\n chai.expect(element2.propA).to.equal(\"local_update_a\", \"Element 2 local update should be preserved\");\r\n chai.expect(element2.propC).to.equal(\"value_c2\", \"Element 2 propC should be unchanged\");\r\n });\r\n\r\n it(\"local trivial schema changes onto incoming trivial schema changes (local newer)\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaLocalNewer\");\r\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes local newer local\");\r\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes local newer far\");\r\n\r\n // Far imports v01.00.01 (adds PropC2)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\r\n\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\r\n\r\n // Local imports v01.00.02 (adds PropC2 and PropD2 - newer)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\r\n\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // after rebase the folder should be there because local is newer until push is called\r\n\r\n // Verify: local schema preserved (newer version)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema (newer) should be preserved\");\r\n });\r\n\r\n it(\"local trivial schema changes onto incoming trivial schema changes (incoming newer)\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIncomingNewer\");\r\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming trivial schema changes incoming newer local\");\r\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming trivial schema changes incoming newer far\");\r\n\r\n // Far imports v01.00.02 (adds PropC2 and PropD2 - newer)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\r\n\r\n const txnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\r\n\r\n await pushChanges(farTxn, \"update schema to v01.00.02\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\r\n\r\n // Local imports v01.00.01 (adds only PropC2 - older)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\r\n\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there because incoming is newer so while rebasing it should be a no op\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\r\n\r\n // Verify: incoming schema preserved (newer version, local should not override)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Incoming schema (newer) should win, local should not override\");\r\n });\r\n\r\n it(\"local trivial schema changes onto incoming identical schema changes\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIdentical\");\r\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes local\");\r\n const farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes far\");\r\n\r\n // Far imports v01.00.01 (adds PropC2)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n // Verify that we're holding a shared lock (not exclusive) for semantic rebase\r\n chai.expect(t.far.locks.holdsSharedLock(IModel.repositoryModelId)).to.be.true;\r\n chai.expect(t.far.holdsSchemaLock).to.be.false;\r\n\r\n const txnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\r\n\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\r\n\r\n // Local imports the same v01.00.01 (adds PropC2)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\r\n\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted if it contains nothing after rebase\r\n\r\n // Verify: schema preserved (both sides identical)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\r\n });\r\n\r\n it(\"local trivial schema changes onto incoming identical schema changes with data changes on both sides\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIdenticalWithData\");\r\n const localTxn = startTestTxn(t.local, \"local trivial schema changes onto incoming identical schema changes with data local\");\r\n let farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\r\n\r\n // Far imports v01.00.01 (adds PropC2) and creates an element\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnProps).to.not.be.undefined;\r\n chai.expect(txnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.true;\r\n\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n farTxn = startTestTxn(t.far, \"local trivial schema changes onto incoming identical schema changes with data far\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.far, txnProps!.id, true)).to.be.false; // after push the folder should not be there\r\n\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n propC2: \"far_value_c2\",\r\n });\r\n farTxn.saveChanges(\"far creates element with new property\");\r\n await pushChanges(farTxn, \"far creates element\");\r\n\r\n // Local imports the same v01.00.01 (adds PropC2) and creates an element\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true;\r\n\r\n\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n propC2: \"local_value_c2\",\r\n });\r\n localTxn.saveChanges(\"local creates element with new property\");\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.false; // after rebase the folder should not be there as both are identical\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because the rebase folder is deleted after rebase if it contains nothing\r\n\r\n // Verify: schema preserved (both sides identical)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\r\n\r\n // Verify: both elements exist with their original properties\r\n const farElement = t.getElement(t.local, farElementId);\r\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\r\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved\");\r\n chai.expect(farElement.propC2).to.equal(\"far_value_c2\", \"Far element propC2 should be preserved\");\r\n\r\n const localElement = t.getElement(t.local, localElementId);\r\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\r\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved\");\r\n chai.expect(localElement.propC2).to.equal(\"local_value_c2\", \"Local element propC2 should be preserved\");\r\n });\r\n\r\n it(\"both add different properties, increment to same version number\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\r\n const localTxn = startTestTxn(t.local, \"both add different properties increment to same version local\");\r\n const farTxn = startTestTxn(t.far, \"both add different properties increment to same version far\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC3Incompatible]);\r\n\r\n await pullChanges(localTxn); // TODO: this currently passes, because same version number means no upgrade is attempted\r\n //TODO: this should probably fail instead as both sides made incompatible changes to the same version, but this is unrelated to semantic rebase itself\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be v01.00.01\");\r\n });\r\n\r\n it(\"both add compatible properties, local version number higher\", async () => {\r\n t = await TestIModel.initialize(\"CompatibleSchemaLocalHigher\");\r\n const localTxn = startTestTxn(t.local, \"both add compatible properties local version higher local\");\r\n const farTxn = startTestTxn(t.far, \"both add compatible properties local version higher far\");\r\n\r\n // Far imports v01.00.01 (adds PropC2)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n\r\n // Local imports v01.00.02 (adds PropC2 and PropD2 - compatible higher version)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n // Verify: Local schema wins (higher version)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\r\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\r\n chai.expect(classC).to.not.be.undefined;\r\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\r\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\r\n chai.expect(classD).to.not.be.undefined;\r\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\r\n });\r\n\r\n it(\"both add compatible properties, incoming version number higher\", async () => {\r\n t = await TestIModel.initialize(\"CompatibleSchemaIncomingHigher\");\r\n const localTxn = startTestTxn(t.local, \"both add compatible properties incoming version higher local\");\r\n const farTxn = startTestTxn(t.far, \"both add compatible properties incoming version higher far\");\r\n\r\n // Far imports v01.00.02 (adds PropC2 and PropD2 - higher version)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\r\n await pushChanges(farTxn, \"update schema to v01.00.02\");\r\n\r\n // Local imports v01.00.01 (adds only PropC2 - compatible lower version)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n // Local pulls and rebases\r\n await pullChanges(localTxn);\r\n\r\n // Verify: Incoming schema wins (higher version)\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be v01.00.02 (higher version wins)\");\r\n const classC = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"C\", EntityClass);\r\n chai.expect(classC).to.not.be.undefined;\r\n chai.expect(await classC!.getProperty(\"PropC2\")).to.exist;\r\n const classD = await t.local.schemaContext.getSchemaItem(\"TestDomain\", \"D\", EntityClass);\r\n chai.expect(classD).to.not.be.undefined;\r\n chai.expect(await classD!.getProperty(\"PropD2\")).to.exist;\r\n });\r\n\r\n it(\"both add same but incompatible property, local version number higher\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\r\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property local version higher local\");\r\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property local version higher far\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n await pushChanges(farTxn, \"add PropC2 to class C\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\r\n\r\n // Local pulls and rebases - this should detect the incompatibility and fail\r\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\r\n });\r\n\r\n it(\"both add same but incompatible property, incoming version number higher\", async () => {\r\n t = await TestIModel.initialize(\"TrivialSchemaIncompatible\");\r\n const localTxn = startTestTxn(t.local, \"both add same but incompatible property incoming version higher local\");\r\n const farTxn = startTestTxn(t.far, \"both add same but incompatible property incoming version higher far\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02AddPropC2Incompatible]);\r\n await pushChanges(farTxn, \"import v01.00.02 with PropC2 as int\");\r\n\r\n // Local uses v01.00.03 with PropC2:string — higher version ensures the upgrade is attempted\r\n // during reinstatement, which detects the type mismatch (string vs int)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03AddPropC2]);\r\n\r\n // Local pulls and rebases - this should detect the incompatibility and fail\r\n await chai.expect(pullChanges(localTxn)).to.be.rejectedWith(\"ECSchema Upgrade failed\");\r\n });\r\n\r\n it(\"local transforming schema change onto incoming trivial schema change\", async () => {\r\n t = await TestIModel.initialize(\"LocalTransformIncomingTrivial\");\r\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming trivial schema change far\");\r\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming trivial schema change local\");\r\n\r\n // Far: Insert Element and import trivial schema change\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n farTxn.saveChanges(\"far create element\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsFar).to.not.be.undefined;\r\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\r\n\r\n await pushChanges(farTxn, \"far add PropC2\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n // Local: Insert Element and import transforming schema change\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n localTxn.saveChanges(\"local create element\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\r\n\r\n // Local pulls and rebases transforming change onto incoming trivial change\r\n await pushChanges(localTxn, \"local move PropC to A\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\r\n\r\n // Verify: both elements have PropC intact, schema transformed locally\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n const farElement = t.getElement(t.local, farElementId);\r\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\r\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after transform\");\r\n\r\n const localElement = t.getElement(t.local, localElementId);\r\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\r\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after transform\");\r\n });\r\n\r\n it(\"local trivial schema change onto incoming transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"LocalTrivialIncomingTransform\");\r\n const farTxn = startTestTxn(t.far, \"local trivial schema change onto incoming transforming schema change far\");\r\n const localTxn = startTestTxn(t.local, \"local trivial schema change onto incoming transforming schema change local\");\r\n\r\n // Far: Insert Element and import transforming schema change\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const farElementId = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n farTxn.saveChanges(\"far create element\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n await pushChanges(farTxn, \"far move PropC to A\");\r\n\r\n // Local: Insert Element and import trivial schema change\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const localElementId = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n localTxn.saveChanges(\"local create element\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\r\n\r\n // Local pulls and rebases trivial change onto incoming transforming change\r\n await pushChanges(localTxn, \"local add PropC2\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n // Verify: both elements have PropC intact after incoming transform\r\n const farElement = t.getElement(t.local, farElementId);\r\n chai.expect(farElement.propA).to.equal(\"far_value_a\", \"Far element propA should be preserved\");\r\n chai.expect(farElement.propC).to.equal(\"far_value_c\", \"Far element propC should be preserved after incoming transform\");\r\n\r\n const localElement = t.getElement(t.local, localElementId);\r\n chai.expect(localElement.propA).to.equal(\"local_value_a\", \"Local element propA should be preserved\");\r\n chai.expect(localElement.propC).to.equal(\"local_value_c\", \"Local element propC should be preserved after incoming transform\");\r\n });\r\n\r\n it(\"local transforming schema change onto incoming transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"BothTransforming\");\r\n const farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming transforming schema change far\");\r\n const localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming transforming schema change local\");\r\n\r\n // Far: Create elements with PropC and PropD, import transforming schema (moves PropC to A)\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const farElementC = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a_c\",\r\n propC: \"far_value_c\",\r\n });\r\n const farElementD = t.insertElement(farTxn, \"TestDomain:D\", {\r\n propA: \"far_value_a_d\",\r\n propD: \"far_value_d\",\r\n });\r\n farTxn.saveChanges(\"far create elements\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n\r\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsFar).to.not.be.undefined;\r\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\r\n\r\n farTxn.saveChanges(\"far move PropC to A\");\r\n await pushChanges(farTxn, \"far transform PropC\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n // Local: Create elements with PropC and PropD, import transforming schema (moves both PropC and PropD to A)\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const localElementC = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a_c\",\r\n propC: \"local_value_c\",\r\n });\r\n const localElementD = t.insertElement(localTxn, \"TestDomain:D\", {\r\n propA: \"local_value_a_d\",\r\n propD: \"local_value_d\",\r\n });\r\n localTxn.saveChanges(\"local create elements\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x03MovePropCAndD]);\r\n\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\r\n\r\n localTxn.saveChanges(\"local move PropC and PropD to A\");\r\n // Local pulls and rebases both transforming changes\r\n await pushChanges(localTxn, \"local transform PropC and PropD\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\r\n\r\n t.far.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n // Verify: all elements have both PropC and PropD intact\r\n const farElemC = t.getElement(t.local, farElementC);\r\n chai.expect(farElemC.propA).to.equal(\"far_value_a_c\", \"Far element C propA should be preserved\");\r\n chai.expect(farElemC.propC).to.equal(\"far_value_c\", \"Far element C propC should be preserved after both transforms\");\r\n\r\n const farElemD = t.getElement(t.local, farElementD);\r\n chai.expect(farElemD.propA).to.equal(\"far_value_a_d\", \"Far element D propA should be preserved\");\r\n chai.expect(farElemD.propD).to.equal(\"far_value_d\", \"Far element D propD should be preserved after both transforms\");\r\n\r\n const localElemC = t.getElement(t.local, localElementC);\r\n chai.expect(localElemC.propA).to.equal(\"local_value_a_c\", \"Local element C propA should be preserved\");\r\n chai.expect(localElemC.propC).to.equal(\"local_value_c\", \"Local element C propC should be preserved after both transforms\");\r\n\r\n const localElemD = t.getElement(t.local, localElementD);\r\n chai.expect(localElemD.propA).to.equal(\"local_value_a_d\", \"Local element D propA should be preserved\");\r\n chai.expect(localElemD.propD).to.equal(\"local_value_d\", \"Local element D propD should be preserved after both transforms\");\r\n });\r\n\r\n it(\"local data update onto incoming transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"LocalDataIncomingTransform\");\r\n let farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\r\n let localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\r\n\r\n // Insert one instance and populate to both far and local\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"initial_value_a\",\r\n propC: \"initial_value_c\",\r\n });\r\n farTxn.saveChanges(\"far create element\");\r\n await pushChanges(farTxn, \"create shared element\");\r\n farTxn = startTestTxn(t.far, \"local data update onto incoming transforming schema change far\");\r\n\r\n // Local pulls to get the element\r\n await pullChanges(localTxn);\r\n localTxn = startTestTxn(t.local, \"local data update onto incoming transforming schema change local\");\r\n\r\n // Far imports transforming schema (moves PropC from C to A)\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n\r\n const txnPropsFar = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsFar).to.not.be.undefined;\r\n chai.expect(txnPropsFar!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, txnPropsFar!.id, true)).to.be.true; // schema folder should exist\r\n\r\n await pushChanges(farTxn, \"far move PropC to A\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n // Local updates PropC on the element\r\n await t.local.locks.acquireLocks({ exclusive: elementId });\r\n t.updateElement(localTxn, elementId, { propC: \"local_modified_c\" });\r\n localTxn.saveChanges(\"local update propC\");\r\n let element = t.getElement(t.local, elementId);\r\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\r\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value before incoming transform\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // no schema change yet on local so no rebase folder\r\n\r\n // Local pulls and rebases data change onto incoming transforming schema change\r\n await pullChanges(localTxn);\r\n\r\n // after rebase the folder should not be there because data change folder is created on the fly and removed once rebased and rebase folder is also removed if it contains nothing\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n // Verify: PropC has the modified local value after the transform\r\n element = t.getElement(t.local, elementId);\r\n chai.expect(element.propA).to.equal(\"initial_value_a\", \"PropA should be unchanged\");\r\n chai.expect(element.propC).to.equal(\"local_modified_c\", \"PropC should have the local modified value after incoming transform\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Incoming data update onto local transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local transforming schema change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local transforming schema change local\");\r\n\r\n // Insert one instance and populate to both far and local\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementIdFar = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n farTxn.saveChanges(\"far create element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // no schema change yet on far so no rebase folder\r\n await pushChanges(farTxn, \"create shared element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementIdLocal = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n localTxn.saveChanges(\"local create element\");\r\n // Far imports transforming schema (moves PropC from C to A)\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n const txnPropsLocal = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(txnPropsLocal).to.not.be.undefined;\r\n chai.expect(txnPropsLocal!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, txnPropsLocal!.id, true)).to.be.true; // schema folder should exist\r\n\r\n // local pulls and rebases and then pushes\r\n await pushChanges(localTxn, \"far move PropC to A\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Check if associated rebase folders get deleted when a briefcase is deleted or not\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataLocalTransform\");\r\n // Must close briefcases before deleting their files - on Windows, open files are locked by the OS.\r\n // Save paths before closing since pathName getter throws on closed dbs.\r\n const localPath = t.local.pathName;\r\n const localRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.local);\r\n const farPath = t.far.pathName;\r\n const farRebasePath = BriefcaseManager.getBasePathForSemanticRebaseLocalFiles(t.far);\r\n t.local.close();\r\n await BriefcaseManager.deleteBriefcaseFiles(localPath);\r\n chai.expect(IModelJsFs.existsSync(localRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\r\n t.far.close();\r\n await BriefcaseManager.deleteBriefcaseFiles(farPath);\r\n chai.expect(IModelJsFs.existsSync(farRebasePath)).to.be.false; // after briefcase deletion the rebase folder should also be deleted\r\n });\r\n\r\n it(\"local multiple data transactions onto incoming transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"LocalMultipleDataIncomingTransform\");\r\n let farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\r\n let localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\r\n\r\n // Insert initial element and push\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId1 = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"initial_a\",\r\n propC: \"initial_c\",\r\n });\r\n localTxn.saveChanges(\"create first element\");\r\n await pushChanges(localTxn, \"create initial element\");\r\n localTxn = startTestTxn(t.local, \"local multiple data transactions onto incoming transforming schema change local\");\r\n\r\n // Far imports transforming schema (moves PropC from C to A)\r\n await pullChanges(farTxn);\r\n farTxn = startTestTxn(t.far, \"local multiple data transactions onto incoming transforming schema change far\");\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n await pushChanges(farTxn, \"far move PropC to A\");\r\n\r\n // Local makes first data change\r\n await t.local.locks.acquireLocks({ exclusive: elementId1 });\r\n t.updateElement(localTxn, elementId1, { propA: \"first_update_a\" });\r\n localTxn.saveChanges(\"first data change\");\r\n\r\n // Local makes second data change - create new element\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId2 = t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"second_element_a\",\r\n propC: \"second_element_c\",\r\n });\r\n localTxn.saveChanges(\"second data change - new element\");\r\n\r\n // Local pulls and rebases both transactions onto incoming transforming schema\r\n await pullChanges(localTxn);\r\n\r\n t.local.clearCaches();\r\n\r\n // Verify: both local data changes preserved after incoming transform\r\n const element1 = t.getElement(t.local, elementId1);\r\n chai.expect(element1.propA).to.equal(\"first_update_a\", \"First element propA update should be preserved\");\r\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\r\n\r\n const element2 = t.getElement(t.local, elementId2);\r\n chai.expect(element2.propA).to.equal(\"second_element_a\", \"Second element propA should be preserved\");\r\n chai.expect(element2.propC).to.equal(\"second_element_c\", \"Second element propC should be preserved after transform\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"local transforming schema change onto incoming multiple data transactions\", async () => {\r\n t = await TestIModel.initialize(\"LocalTransformIncomingMultipleData\");\r\n let farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\r\n let localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\r\n\r\n // Create initial element\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId1 = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"initial_a\",\r\n propC: \"initial_c\",\r\n });\r\n farTxn.saveChanges(\"create first element\");\r\n await pushChanges(farTxn, \"create initial element\");\r\n farTxn = startTestTxn(t.far, \"local transforming schema change onto incoming multiple data transactions far\");\r\n\r\n // Local pulls and imports transforming schema\r\n await pullChanges(localTxn);\r\n localTxn = startTestTxn(t.local, \"local transforming schema change onto incoming multiple data transactions local\");\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n\r\n // Far makes first data change\r\n await t.far.locks.acquireLocks({ exclusive: elementId1 });\r\n t.updateElement(farTxn, elementId1, { propA: \"far_first_update_a\" });\r\n farTxn.saveChanges(\"far first data change\");\r\n\r\n // Far makes second data change - create new element\r\n await t.far.locks.acquireLocks({ shared: t.drawingModelId });\r\n const elementId2 = t.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_second_element_a\",\r\n propC: \"far_second_element_c\",\r\n });\r\n farTxn.saveChanges(\"far second data change - new element\");\r\n await pushChanges(farTxn, \"far multiple data changes\");\r\n\r\n // Local pulls and rebases local transforming schema onto incoming data changes\r\n await pullChanges(localTxn);\r\n\r\n t.local.clearCaches();\r\n\r\n // Verify: both incoming data changes applied, local schema transformation preserved\r\n const element1 = t.getElement(t.local, elementId1);\r\n chai.expect(element1.propA).to.equal(\"far_first_update_a\", \"First element incoming update should be applied\");\r\n chai.expect(element1.propC).to.equal(\"initial_c\", \"First element propC should be preserved after transform\");\r\n\r\n const element2 = t.getElement(t.local, elementId2);\r\n chai.expect(element2.propA).to.equal(\"far_second_element_a\", \"Second element should exist with correct propA\");\r\n chai.expect(element2.propC).to.equal(\"far_second_element_c\", \"Second element propC should be preserved after transform\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Local schema transformation should be preserved\");\r\n });\r\n\r\n it(\"should fail when importing schema with unsaved data changes\", async () => {\r\n t = await TestIModel.initialize(\"UnsavedDataChangesSchemaImport\");\r\n const localTxn = startTestTxn(t.local, \"should fail when importing schema with unsaved data changes local\");\r\n\r\n // Create element but DO NOT save changes\r\n await t.local.locks.acquireLocks({ shared: t.drawingModelId });\r\n t.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"unsaved_a\",\r\n propC: \"unsaved_c\",\r\n });\r\n // Intentionally not saving the active local transaction before schema import.\r\n\r\n // Try to import schema - this should fail\r\n await chai.expect(\r\n localTxn.iModel.importSchemaStrings([TestIModel.schemas.v01x00x01AddPropC2])\r\n ).to.be.rejectedWith(\"Cannot import schemas with unsaved changes when useSemanticRebase flag is on\");\r\n\r\n // Verify: element was not saved, schema was not imported\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.00\", \"Schema should remain at v01.00.00\");\r\n });\r\n\r\n});\r\n\r\n/**\r\n * Test suite for tests related to rebase logic with schema changes (for indirect changes) that require data transformations.\r\n */\r\ndescribe(\"Semantic Rebase with indirect changes\", function (this: Suite) {\r\n this.timeout(60000); // operations can be slow\r\n let t: TestIModel | undefined;\r\n\r\n before(async () => {\r\n await TestUtils.shutdownBackend(); // Automatically TestUtils.startBackend() is called before every test suite starts we need to shut tht down and startup our new TestUtils with semantic rebase on\r\n await TestUtils.startBackend({ useSemanticRebase: true });\r\n });\r\n\r\n afterEach(() => {\r\n if (t) {\r\n t.shutdown();\r\n t = undefined;\r\n }\r\n });\r\n\r\n after(async () => {\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend(); // restart normal backend so subsequent test suites aren't left without IModelHost\r\n });\r\n\r\n it(\"Incoming data update onto local data change\", async () => { // This doesnot actually take the semantic rebase route as both incoming and local have data changes only\r\n t = await TestIModel.initialize(\"IncomingDataLocalDataChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data change local\");\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await pushChanges(farTxn, \"create indirect element\");\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\r\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on either side\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n });\r\n\r\n it(\"Incoming data and schema update onto local data change\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data change local\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n\r\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(farTxnProps).to.not.be.undefined;\r\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await pushChanges(farTxn, \"create indirect element\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\r\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.01\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Incoming data and schema update onto local data and schema change\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataLocalDataAndSchemaChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data and schema update onto local data and schema change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data and schema update onto local data and schema change local\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x01AddPropC2]);\r\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(farTxnProps).to.not.be.undefined;\r\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await pushChanges(farTxn, \"create indirect element\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02AddPropD2]);\r\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(localTxnProps).to.not.be.undefined;\r\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\r\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // after push the folder should not be there\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Incoming data and Transforming schema update onto local data change\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data and Transforming schema update onto local data change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data and Transforming schema update onto local data change local\");\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(farTxnProps).to.not.be.undefined;\r\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n await pushChanges(farTxn, \"create indirect element\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // there should not be a rebase folder because no schema change on local side\r\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false;\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Incoming data and transforming schema update onto local data and transforming schema change\", async () => {\r\n t = await TestIModel.initialize(\"IncomingDataAndTransformingSchemaLocalDataAndTransformingSchemaChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data and transforming schema update onto local data and transforming schema change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data and transforming schema update onto local data and transforming schema change local\");\r\n\r\n await importSchemaStrings(farTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n const farTxnProps = t.far.txns.getLastSavedTxnProps();\r\n chai.expect(farTxnProps).to.not.be.undefined;\r\n chai.expect(farTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await pushChanges(farTxn, \"create indirect element\");\r\n chai.expect(t.checkIfFolderExists(t.far, farTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\r\n chai.expect(t.checkifRebaseFolderExists(t.far)).to.be.false; // after push the folder should not be there\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(localTxnProps).to.not.be.undefined;\r\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n await pullChanges(localTxn);\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // because it is a no op change we are importing similar schema\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.false; // schema change is no op and data changes are generated on the fly and removed once rebased so rebase folder should not be there\r\n\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n it(\"Incoming data update onto local data and transforming schema change\", async () => {\r\n // This test fails but should not fail actually - needs investigation\r\n\r\n t = await TestIModel.initialize(\"IncomingDataAndSchemaLocalDataChange\");\r\n const farTxn = startTestTxn(t.far, \"Incoming data update onto local data and transforming schema change far\");\r\n const localTxn = startTestTxn(t.local, \"Incoming data update onto local data and transforming schema change local\");\r\n\r\n let elementIdFar: Id64String = \"\";\r\n await t.far.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdFar = t!.insertElement(farTxn, \"TestDomain:C\", {\r\n propA: \"far_value_a\",\r\n propC: \"far_value_c\",\r\n });\r\n });\r\n farTxn.saveChanges(\"far create indirect element\");\r\n await pushChanges(farTxn, \"create indirect element\");\r\n\r\n await importSchemaStrings(localTxn, [TestIModel.schemas.v01x00x02MovePropCToA]);\r\n const localTxnProps = t.local.txns.getLastSavedTxnProps();\r\n chai.expect(localTxnProps).to.not.be.undefined;\r\n chai.expect(localTxnProps!.type).to.equal(\"Schema\");\r\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.true; // schema folder should exist\r\n\r\n let elementIdLocal: Id64String = \"\";\r\n await t.local.txns.withIndirectTxnModeAsync(async () => {\r\n // Insert one instance and populate to both far and local\r\n elementIdLocal = t!.insertElement(localTxn, \"TestDomain:C\", {\r\n propA: \"local_value_a\",\r\n propC: \"local_value_c\",\r\n });\r\n });\r\n localTxn.saveChanges(\"local create indirect element\");\r\n\r\n chai.expect(t.checkifRebaseFolderExists(t.local)).to.be.true; // there should be a rebase folder because schema change on local side\r\n\r\n await pushChanges(localTxn, \"local pulls andcreate indirect element\");\r\n\r\n chai.expect(t.checkIfFolderExists(t.local, localTxnProps!.id, true)).to.be.false; // after push the schema folder should not be there\r\n\r\n chai.expect(Id64.isValidId64(elementIdFar) && Id64.isValidId64(elementIdLocal)).to.be.true;\r\n\r\n t.local.clearCaches(); // Clear caches to ensure we read transformed properties from iModel\r\n\r\n const elementFar = t.getElement(t.local, elementIdFar);\r\n chai.expect(elementFar.propA).to.equal(\"far_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementFar.propC).to.equal(\"far_value_c\", \"PropC should be unchanged\");\r\n\r\n const elementLocal = t.getElement(t.local, elementIdLocal);\r\n chai.expect(elementLocal.propA).to.equal(\"local_value_a\", \"PropA should be unchanged\");\r\n chai.expect(elementLocal.propC).to.equal(\"local_value_c\", \"PropC should be unchanged\");\r\n\r\n const schema = t.local.getSchemaProps(\"TestDomain\");\r\n chai.expect(schema.version).to.equal(\"01.00.02\", \"Schema should be transformed to v01.00.02\");\r\n });\r\n\r\n});\r\n\r\n\r\n"]}