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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.js.map +1 -1
  31. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  32. package/lib/cjs/EditTxn.js.map +1 -1
  33. package/lib/cjs/Element.js.map +1 -1
  34. package/lib/cjs/ElementAspect.js.map +1 -1
  35. package/lib/cjs/ElementGraphics.js.map +1 -1
  36. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  37. package/lib/cjs/Entity.js.map +1 -1
  38. package/lib/cjs/EntityReferences.js.map +1 -1
  39. package/lib/cjs/ExportGraphics.js.map +1 -1
  40. package/lib/cjs/ExternalSource.js.map +1 -1
  41. package/lib/cjs/FontFile.js.map +1 -1
  42. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  43. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  44. package/lib/cjs/GeometrySummary.js +47 -47
  45. package/lib/cjs/GeometrySummary.js.map +1 -1
  46. package/lib/cjs/IModelDb.js +8 -8
  47. package/lib/cjs/IModelDb.js.map +1 -1
  48. package/lib/cjs/IModelDbFonts.js.map +1 -1
  49. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  50. package/lib/cjs/IModelHost.js.map +1 -1
  51. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  52. package/lib/cjs/IModelJsFs.js.map +1 -1
  53. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  54. package/lib/cjs/IpcHost.js.map +1 -1
  55. package/lib/cjs/LineStyle.js.map +1 -1
  56. package/lib/cjs/LocalHub.js +1 -1
  57. package/lib/cjs/LocalHub.js.map +1 -1
  58. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  59. package/lib/cjs/LockControl.js.map +1 -1
  60. package/lib/cjs/Material.js.map +1 -1
  61. package/lib/cjs/Model.js.map +1 -1
  62. package/lib/cjs/NativeAppStorage.js.map +1 -1
  63. package/lib/cjs/NativeHost.js.map +1 -1
  64. package/lib/cjs/NavigationRelationship.js.map +1 -1
  65. package/lib/cjs/PartialChangeUnifier.js +7 -7
  66. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  67. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  68. package/lib/cjs/PropertyStore.js.map +1 -1
  69. package/lib/cjs/Relationship.js.map +1 -1
  70. package/lib/cjs/RpcBackend.js.map +1 -1
  71. package/lib/cjs/SQLiteDb.js.map +1 -1
  72. package/lib/cjs/Schema.js.map +1 -1
  73. package/lib/cjs/SchemaSync.js.map +1 -1
  74. package/lib/cjs/SchemaUtils.js.map +1 -1
  75. package/lib/cjs/SheetIndex.js.map +1 -1
  76. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  77. package/lib/cjs/SqliteStatement.js.map +1 -1
  78. package/lib/cjs/StashManager.js.map +1 -1
  79. package/lib/cjs/Texture.js.map +1 -1
  80. package/lib/cjs/TileStorage.js.map +1 -1
  81. package/lib/cjs/TxnManager.js.map +1 -1
  82. package/lib/cjs/ViewDefinition.js.map +1 -1
  83. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  84. package/lib/cjs/ViewStore.js.map +1 -1
  85. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  86. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  87. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  88. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  89. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  92. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  93. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  94. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  95. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  96. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  97. package/lib/cjs/core-backend.js.map +1 -1
  98. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  99. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  100. package/lib/cjs/domains/GenericElements.js.map +1 -1
  101. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  102. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  103. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  104. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  105. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  106. package/lib/cjs/internal/HubMock.js.map +1 -1
  107. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  108. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  109. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  110. package/lib/cjs/internal/NoLocks.js.map +1 -1
  111. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  112. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  113. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  114. package/lib/cjs/internal/Symbols.js.map +1 -1
  115. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  116. package/lib/cjs/internal/cross-package.js.map +1 -1
  117. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  118. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  119. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  120. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  122. package/lib/cjs/rpc/multipart.js.map +1 -1
  123. package/lib/cjs/rpc/tracing.js.map +1 -1
  124. package/lib/cjs/rpc/web/logging.js.map +1 -1
  125. package/lib/cjs/rpc/web/request.js.map +1 -1
  126. package/lib/cjs/rpc/web/response.js.map +1 -1
  127. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  128. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  129. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  130. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  131. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  132. package/lib/cjs/workspace/Settings.js.map +1 -1
  133. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  134. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  135. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  136. package/lib/cjs/workspace/Workspace.js.map +1 -1
  137. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  138. package/lib/esm/BackendHubAccess.js.map +1 -1
  139. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  140. package/lib/esm/BisCoreSchema.js.map +1 -1
  141. package/lib/esm/BlobContainerService.js.map +1 -1
  142. package/lib/esm/BriefcaseManager.js.map +1 -1
  143. package/lib/esm/CatalogDb.js.map +1 -1
  144. package/lib/esm/Category.js.map +1 -1
  145. package/lib/esm/ChangeSummaryManager.js +2 -2
  146. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  147. package/lib/esm/ChangedElementsDb.js.map +1 -1
  148. package/lib/esm/ChangesetECAdaptor.js +248 -248
  149. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  150. package/lib/esm/ChangesetReader.js +3 -3
  151. package/lib/esm/ChangesetReader.js.map +1 -1
  152. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  153. package/lib/esm/ChannelControl.js.map +1 -1
  154. package/lib/esm/CheckpointManager.js.map +1 -1
  155. package/lib/esm/ClassRegistry.js +5 -5
  156. package/lib/esm/ClassRegistry.js.map +1 -1
  157. package/lib/esm/CloudSqlite.js.map +1 -1
  158. package/lib/esm/CodeService.js.map +1 -1
  159. package/lib/esm/CodeSpecs.js.map +1 -1
  160. package/lib/esm/ConcurrentQuery.js.map +1 -1
  161. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  162. package/lib/esm/DevTools.js.map +1 -1
  163. package/lib/esm/DisplayStyle.js.map +1 -1
  164. package/lib/esm/ECDb.js.map +1 -1
  165. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  166. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  167. package/lib/esm/ECSqlStatement.js.map +1 -1
  168. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  169. package/lib/esm/EditTxn.js.map +1 -1
  170. package/lib/esm/Element.js.map +1 -1
  171. package/lib/esm/ElementAspect.js.map +1 -1
  172. package/lib/esm/ElementGraphics.js.map +1 -1
  173. package/lib/esm/ElementTreeWalker.js.map +1 -1
  174. package/lib/esm/Entity.js.map +1 -1
  175. package/lib/esm/EntityReferences.js.map +1 -1
  176. package/lib/esm/ExportGraphics.js.map +1 -1
  177. package/lib/esm/ExternalSource.js.map +1 -1
  178. package/lib/esm/FontFile.js.map +1 -1
  179. package/lib/esm/GeoCoordConfig.js.map +1 -1
  180. package/lib/esm/GeographicCRSServices.js.map +1 -1
  181. package/lib/esm/GeometrySummary.js +47 -47
  182. package/lib/esm/GeometrySummary.js.map +1 -1
  183. package/lib/esm/IModelDb.js +8 -8
  184. package/lib/esm/IModelDb.js.map +1 -1
  185. package/lib/esm/IModelDbFonts.js.map +1 -1
  186. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  187. package/lib/esm/IModelHost.js.map +1 -1
  188. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  189. package/lib/esm/IModelJsFs.js.map +1 -1
  190. package/lib/esm/ImageSourceConversion.js.map +1 -1
  191. package/lib/esm/IpcHost.js.map +1 -1
  192. package/lib/esm/LineStyle.js.map +1 -1
  193. package/lib/esm/LocalHub.js +1 -1
  194. package/lib/esm/LocalHub.js.map +1 -1
  195. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  196. package/lib/esm/LockControl.js.map +1 -1
  197. package/lib/esm/Material.js.map +1 -1
  198. package/lib/esm/Model.js.map +1 -1
  199. package/lib/esm/NativeAppStorage.js.map +1 -1
  200. package/lib/esm/NativeHost.js.map +1 -1
  201. package/lib/esm/NavigationRelationship.js.map +1 -1
  202. package/lib/esm/PartialChangeUnifier.js +7 -7
  203. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  204. package/lib/esm/PromiseMemoizer.js.map +1 -1
  205. package/lib/esm/PropertyStore.js.map +1 -1
  206. package/lib/esm/Relationship.js.map +1 -1
  207. package/lib/esm/RpcBackend.js.map +1 -1
  208. package/lib/esm/SQLiteDb.js.map +1 -1
  209. package/lib/esm/Schema.js.map +1 -1
  210. package/lib/esm/SchemaSync.js.map +1 -1
  211. package/lib/esm/SchemaUtils.js.map +1 -1
  212. package/lib/esm/SheetIndex.js.map +1 -1
  213. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  214. package/lib/esm/SqliteStatement.js.map +1 -1
  215. package/lib/esm/StashManager.js.map +1 -1
  216. package/lib/esm/Texture.js.map +1 -1
  217. package/lib/esm/TileStorage.js.map +1 -1
  218. package/lib/esm/TxnManager.js.map +1 -1
  219. package/lib/esm/ViewDefinition.js.map +1 -1
  220. package/lib/esm/ViewStateHydrator.js.map +1 -1
  221. package/lib/esm/ViewStore.js.map +1 -1
  222. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  223. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  224. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  225. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  226. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  227. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  228. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  229. package/lib/esm/core-backend.js.map +1 -1
  230. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  231. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  232. package/lib/esm/domains/GenericElements.js.map +1 -1
  233. package/lib/esm/domains/GenericSchema.js.map +1 -1
  234. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  235. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  236. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  237. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  238. package/lib/esm/internal/HubMock.js.map +1 -1
  239. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  240. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  241. package/lib/esm/internal/NativePlatform.js.map +1 -1
  242. package/lib/esm/internal/NoLocks.js.map +1 -1
  243. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  244. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  245. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  246. package/lib/esm/internal/Symbols.js.map +1 -1
  247. package/lib/esm/internal/annotations/fields.js.map +1 -1
  248. package/lib/esm/internal/cross-package.js.map +1 -1
  249. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  250. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  251. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  252. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  253. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  254. package/lib/esm/rpc/multipart.js.map +1 -1
  255. package/lib/esm/rpc/tracing.js.map +1 -1
  256. package/lib/esm/rpc/web/logging.js.map +1 -1
  257. package/lib/esm/rpc/web/request.js.map +1 -1
  258. package/lib/esm/rpc/web/response.js.map +1 -1
  259. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  260. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  261. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  262. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  263. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  264. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  265. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  266. package/lib/esm/test/AttachDb.test.js +11 -11
  267. package/lib/esm/test/AttachDb.test.js.map +1 -1
  268. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  269. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  270. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  271. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  272. package/lib/esm/test/IModelHost.test.js.map +1 -1
  273. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  274. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  275. package/lib/esm/test/IpcHost.test.js.map +1 -1
  276. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  277. package/lib/esm/test/PrintElementTree.js.map +1 -1
  278. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  279. package/lib/esm/test/RevisionUtility.js.map +1 -1
  280. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  281. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  282. package/lib/esm/test/SchemaUtils.test.js +25 -25
  283. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  284. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  285. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  286. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  287. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  288. package/lib/esm/test/TestEditTxn.js.map +1 -1
  289. package/lib/esm/test/TestUtils.js.map +1 -1
  290. package/lib/esm/test/annotations/Fields.test.js +53 -53
  291. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  292. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  293. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  294. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  295. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  296. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  297. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  298. package/lib/esm/test/categories/Category.test.js.map +1 -1
  299. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  300. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  301. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  303. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  304. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  305. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  307. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  309. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  311. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  313. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  315. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  317. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  318. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  319. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  320. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  321. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  322. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  323. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  324. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  325. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  326. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  327. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  328. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  329. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  330. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  331. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  332. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  333. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  334. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  335. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  336. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  337. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  338. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  339. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  340. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  341. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  342. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  343. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  344. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  345. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  346. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  347. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  348. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  349. package/lib/esm/test/imageData.js.map +1 -1
  350. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  351. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  352. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  353. package/lib/esm/test/imodel/IModel.test.js +44 -44
  354. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  355. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  356. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  357. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  358. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  359. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  360. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  361. package/lib/esm/test/index.js.map +1 -1
  362. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  363. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  364. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  365. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  366. package/lib/esm/test/rpc/response.test.js.map +1 -1
  367. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  368. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  369. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  370. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  371. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  372. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  373. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  374. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  375. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  376. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  377. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  378. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  379. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  380. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  381. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  382. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  383. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  384. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  385. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  386. package/lib/esm/test/standalone/ChangesetReader.test.js +296 -296
  387. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  388. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  389. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  390. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  391. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  392. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  393. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  394. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  395. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  396. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  397. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  398. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  399. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  400. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  401. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  402. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  403. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  404. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  405. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  406. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  407. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  408. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  409. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  410. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  411. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  412. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  413. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  414. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  415. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  416. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  417. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  418. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  419. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  420. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  421. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  422. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  423. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  424. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  425. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  426. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  427. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  428. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  429. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  430. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  431. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  432. package/lib/esm/workspace/Settings.js.map +1 -1
  433. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  434. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  435. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  436. package/lib/esm/workspace/Workspace.js.map +1 -1
  437. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  438. package/package.json +13 -13
@@ -39,22 +39,22 @@ describe("apply changesets", function () {
39
39
  withEditTxn(b3Db, "apply changeset b3", () => {
40
40
  b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
41
41
  });
42
- const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
43
- <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
44
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
45
- <ECEntityClass typeName="a1">
46
- <BaseClass>bis:GraphicalElement2d</BaseClass>
47
- </ECEntityClass>
48
- <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
49
- <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
50
- <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
51
- <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
52
- <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
53
- <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
54
- <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
55
- <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
56
- <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
57
- <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
42
+ const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
43
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
44
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
45
+ <ECEntityClass typeName="a1">
46
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
47
+ </ECEntityClass>
48
+ <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
49
+ <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
50
+ <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
51
+ <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
52
+ <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
53
+ <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
54
+ <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
55
+ <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
56
+ <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
57
+ <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
58
58
  </ECSchema>`;
59
59
  await b1.importSchemaStrings([schema1]);
60
60
  chai.expect(b1.txns.hasPendingTxns).to.be.true;
@@ -63,22 +63,22 @@ describe("apply changesets", function () {
63
63
  chai.expect(b2.txns.hasPendingTxns).to.be.false;
64
64
  await b2.pullChanges();
65
65
  chai.expect(b2.txns.hasPendingTxns).to.be.false;
66
- const schema2 = `<?xml version="1.0" encoding="UTF-8"?>
67
- <ECSchema schemaName="TestDomain2" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
68
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
69
- <ECEntityClass typeName="a1">
70
- <BaseClass>bis:GraphicalElement2d</BaseClass>
71
- </ECEntityClass>
72
- <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
73
- <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
74
- <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
75
- <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
76
- <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
77
- <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
78
- <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
79
- <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
80
- <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
81
- <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
66
+ const schema2 = `<?xml version="1.0" encoding="UTF-8"?>
67
+ <ECSchema schemaName="TestDomain2" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
68
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
69
+ <ECEntityClass typeName="a1">
70
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
71
+ </ECEntityClass>
72
+ <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
73
+ <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
74
+ <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
75
+ <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
76
+ <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
77
+ <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
78
+ <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
79
+ <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
80
+ <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
81
+ <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
82
82
  </ECSchema>`;
83
83
  await b1.importSchemaStrings([schema2]);
84
84
  chai.expect(b1.txns.hasPendingTxns).to.be.true;
@@ -1 +1 @@
1
- {"version":3,"file":"ApplyChangeset.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/ApplyChangeset.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 * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\r\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { Suite } from \"mocha\";\r\nimport { IModel, SchemaState, SubjectProps } from \"@itwin/core-common\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nchai.use(chaiAsPromised);\r\n\r\ndescribe(\"apply changesets\", function (this: Suite) {\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n });\r\n\r\n it(\"Apply changeset with no local changes, should not create new local changes\", async () => {\r\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let b2: BriefcaseDb | undefined;\r\n let b3: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n iModelId = await HubMock.createNewIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b1Db = b1;\r\n withEditTxn(b1Db, \"apply changeset b1\", () => {\r\n b1Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b2Db = b2;\r\n withEditTxn(b2Db, \"apply changeset b2\", () => {\r\n b2Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b3Db = b3;\r\n withEditTxn(b3Db, \"apply changeset b3\", () => {\r\n b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"a1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await b1.importSchemaStrings([schema1]);\r\n\r\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\r\n await b1.pushChanges({ description: \"schema1\" });\r\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\r\n\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n await b2.pullChanges();\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n\r\n const schema2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain2\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"a1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await b1.importSchemaStrings([schema2]);\r\n\r\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\r\n await b1.pushChanges({ description: \"schema2\" });\r\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\r\n\r\n\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n await b2.pullChanges();\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n\r\n\r\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\r\n await b3.pullChanges();\r\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\r\n } finally {\r\n b1?.close();\r\n b2?.close();\r\n b3?.close();\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n\r\n it(\"Pulling profile upgrade before inserting element should pass\", async () => {\r\n // startup\r\n HubMock.startup(\"ProfileUpgradeBeforeInsertElement\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\r\n\r\n // inserting and updating elements in one briefcase\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n const briefcase = b1;\r\n withEditTxn(briefcase, \"profile upgrade before insert\", () => {\r\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n // upgrading schemas in second briefcase\r\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\r\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\r\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\r\n await b1.pullChanges();\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\r\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\r\n\r\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\r\n // See https://github.com/iTwin/itwinjs-core/issues/9302\r\n await b1.locks.acquireLocks({\r\n exclusive: subjectId,\r\n });\r\n\r\n const existingCode = b1.elements.getElementProps(subjectId).code;\r\n withEditTxn(b1, \"Updated Subject\", (txn) => {\r\n txn.updateElement({\r\n id: subjectId,\r\n code: { ...existingCode, value: \"code value 2\" },\r\n });\r\n });\r\n await b1.pushChanges({ description: \"Updated Subject\" });\r\n await b1.locks.releaseAllLocks();\r\n\r\n } finally {\r\n if (b1) {\r\n await b1.locks.releaseAllLocks().catch(() => { });\r\n b1.close();\r\n }\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n\r\n it(\"Pulling profile upgrade after inserting element should pass\", async () => {\r\n // startup\r\n HubMock.startup(\"ProfileUpgradeAfterInsertElement\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\r\n\r\n // inserting and updating elements in one briefcase\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n const briefcase = b1;\r\n withEditTxn(briefcase, \"profile upgrade after insert\", () => {\r\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\r\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\r\n\r\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\r\n // See https://github.com/iTwin/itwinjs-core/issues/9302\r\n await b1.locks.acquireLocks({\r\n exclusive: subjectId,\r\n });\r\n\r\n const existingCode = b1.elements.getElementProps(subjectId).code;\r\n withEditTxn(b1, \"Updated Subject\", (txn) => {\r\n txn.updateElement({\r\n id: subjectId,\r\n code: { ...existingCode, value: \"code value 2\" },\r\n });\r\n });\r\n await b1.pushChanges({ description: \"Updated Subject\" });\r\n await b1.locks.releaseAllLocks();\r\n\r\n // upgrading schemas in second briefcase\r\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\r\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\r\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\r\n await b1.pullChanges();\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps2: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 3\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n withEditTxn(b1, \"Inserted Subject 2\", (txn) => {\r\n txn.insertElement(subjectProps2);\r\n });\r\n await b1.pushChanges({ description: \"Inserted Subject 2\", retainLocks: true });\r\n await b1.locks.releaseAllLocks();\r\n\r\n } finally {\r\n if (b1) {\r\n await b1.locks.releaseAllLocks().catch(() => { });\r\n b1.close();\r\n }\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ApplyChangeset.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/ApplyChangeset.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 * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { Suite } from \"mocha\";\nimport { IModel, SchemaState, SubjectProps } from \"@itwin/core-common\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { TestUtils } from \"../TestUtils\";\nchai.use(chaiAsPromised);\n\ndescribe(\"apply changesets\", function (this: Suite) {\n before(async () => {\n await TestUtils.startBackend();\n });\n\n it(\"Apply changeset with no local changes, should not create new local changes\", async () => {\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let b2: BriefcaseDb | undefined;\n let b3: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n iModelId = await HubMock.createNewIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b1Db = b1;\n withEditTxn(b1Db, \"apply changeset b1\", () => {\n b1Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b2Db = b2;\n withEditTxn(b2Db, \"apply changeset b2\", () => {\n b2Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b3Db = b3;\n withEditTxn(b3Db, \"apply changeset b3\", () => {\n b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema1]);\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\n await b1.pushChanges({ description: \"schema1\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n const schema2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain2\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema2]);\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\n await b1.pushChanges({ description: \"schema2\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\n await b3.pullChanges();\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\n } finally {\n b1?.close();\n b2?.close();\n b3?.close();\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n\n it(\"Pulling profile upgrade before inserting element should pass\", async () => {\n // startup\n HubMock.startup(\"ProfileUpgradeBeforeInsertElement\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\n\n // inserting and updating elements in one briefcase\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n const briefcase = b1;\n withEditTxn(briefcase, \"profile upgrade before insert\", () => {\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n // upgrading schemas in second briefcase\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\n await b1.pullChanges();\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\n\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\n // See https://github.com/iTwin/itwinjs-core/issues/9302\n await b1.locks.acquireLocks({\n exclusive: subjectId,\n });\n\n const existingCode = b1.elements.getElementProps(subjectId).code;\n withEditTxn(b1, \"Updated Subject\", (txn) => {\n txn.updateElement({\n id: subjectId,\n code: { ...existingCode, value: \"code value 2\" },\n });\n });\n await b1.pushChanges({ description: \"Updated Subject\" });\n await b1.locks.releaseAllLocks();\n\n } finally {\n if (b1) {\n await b1.locks.releaseAllLocks().catch(() => { });\n b1.close();\n }\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n\n it(\"Pulling profile upgrade after inserting element should pass\", async () => {\n // startup\n HubMock.startup(\"ProfileUpgradeAfterInsertElement\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\n\n // inserting and updating elements in one briefcase\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n const briefcase = b1;\n withEditTxn(briefcase, \"profile upgrade after insert\", () => {\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\n\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\n // See https://github.com/iTwin/itwinjs-core/issues/9302\n await b1.locks.acquireLocks({\n exclusive: subjectId,\n });\n\n const existingCode = b1.elements.getElementProps(subjectId).code;\n withEditTxn(b1, \"Updated Subject\", (txn) => {\n txn.updateElement({\n id: subjectId,\n code: { ...existingCode, value: \"code value 2\" },\n });\n });\n await b1.pushChanges({ description: \"Updated Subject\" });\n await b1.locks.releaseAllLocks();\n\n // upgrading schemas in second briefcase\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\n await b1.pullChanges();\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps2: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 3\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n withEditTxn(b1, \"Inserted Subject 2\", (txn) => {\n txn.insertElement(subjectProps2);\n });\n await b1.pushChanges({ description: \"Inserted Subject 2\", retainLocks: true });\n await b1.locks.releaseAllLocks();\n\n } finally {\n if (b1) {\n await b1.locks.releaseAllLocks().catch(() => { });\n b1.close();\n }\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\r\nimport { Element } from \"../../Element\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\r\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"BriefcaseManager\", async () => {\r\n const testITwinId: string = Guid.createValue();\r\n const managerAccessToken = \"manager mock token\";\r\n const accessToken = \"access token\";\r\n\r\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\r\n afterEach(() => HubMock.shutdown());\r\n\r\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\r\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\r\n let iModelName = \"iModel Name With Spaces\";\r\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n const args = { accessToken, iTwinId: testITwinId, iModelId };\r\n assert.isDefined(iModelId);\r\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name With :\\/<>?* Characters\";\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name Thats Excessively Long \" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\r\n // Note: iModelHub does not accept a name that's longer than 255 characters.\r\n assert.equal(255, iModelName.length);\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n iModel.close();\r\n });\r\n\r\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\r\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\r\n\r\n try {\r\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\r\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\r\n } catch (err: any) {\r\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\r\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\r\n\r\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\r\n try {\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\r\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\r\n } catch (err: any) {\r\n assert.isTrue(err.message.includes(\"db is not open\"), \"iModel2Dup failure must be due to db not being open\");\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\r\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId1 = iModel1.briefcaseId;\r\n iModel1.close(); // Keeps the briefcase by default\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId3 = iModel3.briefcaseId;\r\n assert.strictEqual(briefcaseId3, briefcaseId1);\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\r\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\";\r\n const userToken2 = \"super manager token\";\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n iModelPullAndPush.close();\r\n\r\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\r\n const changesetPullOnly = iModelPullOnly.changeset;\r\n iModelPullOnly.close();\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\r\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\r\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\r\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\r\n\r\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\r\n const changesetPullOnly2 = iModelPullOnly2.changeset;\r\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\r\n\r\n // Delete iModel from the Hub and disk\r\n await testUtility.deleteTestIModel();\r\n });\r\n\r\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\r\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\r\n const userToken2 = \"super manager token\"; // User2 is used for the test\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens the iModel pullAndPush and is able to edit and save changes\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.exists(iModelPullAndPush);\r\n const briefcaseId = iModelPullAndPush.briefcaseId;\r\n const pathname = iModelPullAndPush.pathName;\r\n\r\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\r\n rootEl.userLabel = `${rootEl.userLabel}changed`;\r\n withEditTxn(iModelPullAndPush, (txn) => txn.updateElement(rootEl.toJSON()));\r\n\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n iModelPullAndPush.close();\r\n\r\n // User2 should be able to re-open the iModel pullAndPush again\r\n // - the changes will still be there\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User2 should be able to re-open the iModel\r\n await HubWrappers.openBriefcaseUsingRpc(args);\r\n\r\n // User2 closes and reopens the iModel pullAndPush as of the newer version\r\n // - the changes will still be there, AND\r\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\r\n iModelPullAndPush.close();\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User2 should be able to push the changes now\r\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\r\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\r\n\r\n // Delete iModel from the Hub and disk\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\r\n await testUtility.deleteTestIModel();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\nimport { Element } from \"../../Element\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"BriefcaseManager\", async () => {\n const testITwinId: string = Guid.createValue();\n const managerAccessToken = \"manager mock token\";\n const accessToken = \"access token\";\n\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\n afterEach(() => HubMock.shutdown());\n\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\n let iModelName = \"iModel Name With Spaces\";\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n const args = { accessToken, iTwinId: testITwinId, iModelId };\n assert.isDefined(iModelId);\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name With :\\/<>?* Characters\";\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name Thats Excessively Long \" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\n // Note: iModelHub does not accept a name that's longer than 255 characters.\n assert.equal(255, iModelName.length);\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n iModel.close();\n });\n\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\n\n try {\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\n\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\n try {\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"db is not open\"), \"iModel2Dup failure must be due to db not being open\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId1 = iModel1.briefcaseId;\n iModel1.close(); // Keeps the briefcase by default\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId3 = iModel3.briefcaseId;\n assert.strictEqual(briefcaseId3, briefcaseId1);\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\";\n const userToken2 = \"super manager token\";\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\n await testUtility.createTestIModel();\n\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\n const changesetPullAndPush = iModelPullAndPush.changeset;\n iModelPullAndPush.close();\n\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\n const changesetPullOnly = iModelPullOnly.changeset;\n iModelPullOnly.close();\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\n\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\n const changesetPullOnly2 = iModelPullOnly2.changeset;\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\n\n // Delete iModel from the Hub and disk\n await testUtility.deleteTestIModel();\n });\n\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\n const userToken2 = \"super manager token\"; // User2 is used for the test\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\n await testUtility.createTestIModel();\n\n // User2 opens the iModel pullAndPush and is able to edit and save changes\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.exists(iModelPullAndPush);\n const briefcaseId = iModelPullAndPush.briefcaseId;\n const pathname = iModelPullAndPush.pathName;\n\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\n rootEl.userLabel = `${rootEl.userLabel}changed`;\n withEditTxn(iModelPullAndPush, (txn) => txn.updateElement(rootEl.toJSON()));\n\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n iModelPullAndPush.close();\n\n // User2 should be able to re-open the iModel pullAndPush again\n // - the changes will still be there\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush = iModelPullAndPush.changeset;\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User2 should be able to re-open the iModel\n await HubWrappers.openBriefcaseUsingRpc(args);\n\n // User2 closes and reopens the iModel pullAndPush as of the newer version\n // - the changes will still be there, AND\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\n iModelPullAndPush.close();\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User2 should be able to push the changes now\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\n\n // Delete iModel from the Hub and disk\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\n await testUtility.deleteTestIModel();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"Checkpoint Manager\", () => {\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n it(\"open missing local file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n const request = {\r\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"open a bad bim file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n\r\n // Setup a local file\r\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\r\n if (!IModelJsFs.existsSync(folder))\r\n IModelJsFs.recursiveMkDirSync(folder);\r\n\r\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\r\n if (IModelJsFs.existsSync(outputFile))\r\n IModelJsFs.unlinkSync(outputFile);\r\n\r\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\r\n\r\n // Attempt to open the file\r\n const request = {\r\n localFile: outputFile,\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"Checkpoint Manager\", () => {\n\n afterEach(() => {\n sinon.restore();\n });\n\n it(\"open missing local file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n const request = {\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"open a bad bim file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n\n // Setup a local file\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\n if (!IModelJsFs.existsSync(folder))\n IModelJsFs.recursiveMkDirSync(folder);\n\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\n\n // Attempt to open the file\n const request = {\n localFile: outputFile,\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CodeSwap.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CodeSwap.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 * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { Suite } from \"mocha\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, CodeScopeSpec, GeometricElement2dProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\r\nimport { BriefcaseDb, ChannelControl, DrawingCategory } from \"../../core-backend\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\nchai.use(chaiAsPromised);\r\n\r\ndescribe(\"Code value management: null, swap, undo/redo, and cross-briefcase pull\", function (this: Suite) {\r\n this.timeout(60000);\r\n\r\n it(\"swap codeValues between two elements sharing the same codeSpec and codeScope, verify undo/redo in a single transaction\", async () => {\r\n HubMock.startup(\"CodeSwapTest\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n\r\n try {\r\n // --- Setup iModel ---\r\n const iModelId = await HubMock.createNewIModel({\r\n accessToken: \"user1\",\r\n iTwinId: HubMock.iTwinId,\r\n iModelName: \"CodeSwapTest\",\r\n description: \"CodeSwapTest\",\r\n });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // --- Create a drawing model + category and a CodeSpec ---\r\n let drawingModelId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let codeSpecId: Id64String;\r\n let codeScopeId: Id64String; // will be the drawing model\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\r\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\r\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\r\n drawingModelId = modelId;\r\n\r\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === catId)\r\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\r\n drawingCategoryId = catId;\r\n\r\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\r\n codeScopeId = drawingModelId;\r\n });\r\n\r\n await b1.pushChanges({ description: \"setup\" });\r\n\r\n // --- Insert two elements with same codeSpecId/codeScopeId but different codeValues ---\r\n let elem1Id: Id64String;\r\n let elem2Id: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId! });\r\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\r\n const elem1Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\r\n };\r\n const elem2Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\r\n };\r\n elem1Id = txn.insertElement(elem1Props);\r\n elem2Id = txn.insertElement(elem2Props);\r\n });\r\n\r\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\r\n\r\n // Verify initial state\r\n let e1 = b1.elements.getElementProps(elem1Id!);\r\n let e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\r\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\r\n chai.expect(e2.code.spec).to.equal(codeSpecId!);\r\n chai.expect(e2.code.scope).to.equal(codeScopeId!);\r\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\r\n\r\n await b1.locks.acquireLocks({ exclusive: [elem2Id!, elem1Id!] });\r\n withEditTxn(b1, \"swap code values\", (txn) => {\r\n const props = b1!.elements.getElementProps(elem1Id!);\r\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\r\n txn.updateElement(props);\r\n\r\n const props1 = b1!.elements.getElementProps(elem1Id!);\r\n const props2 = b1!.elements.getElementProps(elem2Id!);\r\n\r\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\r\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\r\n\r\n txn.updateElement(props2);\r\n txn.updateElement(props1);\r\n });\r\n b1.clearCaches();\r\n // Verify after swap2\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\r\n\r\n // --- Undo (reverse txn2: the swap) ---\r\n chai.expect(b1.txns.isUndoPossible).to.be.true;\r\n b1.txns.reverseTxns(1);\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\r\n\r\n // --- Redo (reinstate txn2: the swap) ---\r\n chai.expect(b1.txns.isRedoPossible).to.be.true;\r\n b1.txns.reinstateTxn();\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\r\n\r\n } finally {\r\n b1?.close();\r\n HubMock.shutdown();\r\n }\r\n });\r\n it(\"insert two elements with same codeSpecId and codeScopeId, null first code, swap codes, undo/redo, push\", async () => {\r\n HubMock.startup(\"CodeSwapTest\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let b2: BriefcaseDb | undefined;\r\n\r\n try {\r\n // --- Setup iModel ---\r\n const iModelId = await HubMock.createNewIModel({\r\n accessToken: \"user1\",\r\n iTwinId: HubMock.iTwinId,\r\n iModelName: \"CodeSwapTest\",\r\n description: \"CodeSwapTest\",\r\n });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // --- Create a drawing model + category and a CodeSpec ---\r\n let drawingModelId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let codeSpecId: Id64String;\r\n let codeScopeId: Id64String; // will be the drawing model\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\r\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\r\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\r\n drawingModelId = modelId;\r\n\r\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === catId)\r\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\r\n drawingCategoryId = catId;\r\n\r\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\r\n codeScopeId = drawingModelId;\r\n });\r\n\r\n await b1.pushChanges({ description: \"setup\" });\r\n await b2.pullChanges();\r\n\r\n // --- Insert two elements with same codeSpecId/codeScopeId but different codeValues ---\r\n let elem1Id: Id64String;\r\n let elem2Id: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId! });\r\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\r\n const elem1Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\r\n };\r\n const elem2Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\r\n };\r\n elem1Id = txn.insertElement(elem1Props);\r\n elem2Id = txn.insertElement(elem2Props);\r\n });\r\n\r\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\r\n await b2.pullChanges();\r\n\r\n // Verify initial state\r\n let e1 = b1.elements.getElementProps(elem1Id!);\r\n let e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\r\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\r\n chai.expect(e2.code.spec).to.equal(codeSpecId!);\r\n chai.expect(e2.code.scope).to.equal(codeScopeId!);\r\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\r\n\r\n // --- Step 1 (txn1): Set codeValue of elem1 to empty (null-equivalent) ---\r\n await b1.locks.acquireLocks({ exclusive: [elem1Id!] });\r\n withEditTxn(b1, \"set elem1 code to null\", (txn) => {\r\n const props = b1!.elements.getElementProps(elem1Id!);\r\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\r\n txn.updateElement(props);\r\n });\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n chai.expect(e1.code.value).to.satisfy((v: string | undefined) => v === undefined || v === \"\");\r\n\r\n // --- Step 2 (txn2): Swap codeValues — elem1 gets CODE_B, elem2 gets CODE_A ---\r\n // elem1's intermediate empty code value avoids a uniqueness conflict while assigning CODE_A to elem2.\r\n await b1.locks.acquireLocks({ exclusive: [elem2Id!] });\r\n withEditTxn(b1, \"swap code values\", (txn) => {\r\n const props1 = b1!.elements.getElementProps(elem1Id!);\r\n const props2 = b1!.elements.getElementProps(elem2Id!);\r\n\r\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\r\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\r\n\r\n txn.updateElement(props2);\r\n txn.updateElement(props1);\r\n });\r\n b1.clearCaches();\r\n // Verify after swap\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\r\n\r\n // --- Undo (reverse txn2: the swap) ---\r\n chai.expect(b1.txns.isUndoPossible).to.be.true;\r\n b1.txns.reverseTxns(1);\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.satisfy((v: string | undefined) => v === undefined || v === \"\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\r\n\r\n // --- Redo (reinstate txn2: the swap) ---\r\n chai.expect(b1.txns.isRedoPossible).to.be.true;\r\n b1.txns.reinstateTxn();\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\r\n // --- Push changes ---\r\n await b1.pushChanges({ description: \"null elem1 code and swap code values\" });\r\n await b2.pullChanges();\r\n\r\n // No local txns remain after push\r\n chai.expect(b1.txns.isUndoPossible).to.be.false;\r\n chai.expect(b1.txns.isRedoPossible).to.be.false;\r\n\r\n // Verify b2 sees the final swapped code values after pulling\r\n const b2e1 = b2.elements.getElementProps(elem1Id!);\r\n const b2e2 = b2.elements.getElementProps(elem2Id!);\r\n chai.expect(b2e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(b2e2.code.value).to.equal(\"CODE_A\");\r\n\r\n } finally {\r\n b1?.close();\r\n b2?.close();\r\n HubMock.shutdown();\r\n }\r\n });\r\n it(\"delete element with existing code and insert new element with same code, verify undo/redo, push, and b2 sees final state after pull\", async () => {\r\n HubMock.startup(\"CodeDeleteInsertTest\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let b2: BriefcaseDb | undefined;\r\n\r\n try {\r\n // --- Setup iModel ---\r\n const iModelId = await HubMock.createNewIModel({\r\n accessToken: \"user1\",\r\n iTwinId: HubMock.iTwinId,\r\n iModelName: \"CodeDeleteInsertTest\",\r\n description: \"CodeDeleteInsertTest\",\r\n });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // --- Create a drawing model + category and a CodeSpec ---\r\n let drawingModelId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let codeSpecId: Id64String;\r\n let codeScopeId: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\r\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\r\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\r\n drawingModelId = modelId;\r\n\r\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === catId)\r\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\r\n drawingCategoryId = catId;\r\n\r\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\r\n codeScopeId = drawingModelId;\r\n });\r\n\r\n await b1.pushChanges({ description: \"setup\" });\r\n await b2.pullChanges();\r\n\r\n // --- Insert an element with a code ---\r\n let elem1Id: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId! });\r\n withEditTxn(b1, \"insert element with CODE_A\", (txn) => {\r\n const elem1Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\r\n };\r\n elem1Id = txn.insertElement(elem1Props);\r\n });\r\n\r\n await b1.pushChanges({ description: \"insert element with CODE_A\" });\r\n await b2.pullChanges();\r\n\r\n // Verify initial state\r\n let e1 = b1.elements.getElementProps(elem1Id!);\r\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\r\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\r\n\r\n // --- Delete elem1 and insert a new element with the same code ---\r\n let newElemId: Id64String;\r\n\r\n await b1.locks.acquireLocks({ exclusive: [elem1Id!] });\r\n withEditTxn(b1, \"delete elem1 and insert new element with same code\", (txn) => {\r\n txn.deleteElement(elem1Id!);\r\n\r\n const newElemProps: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\r\n };\r\n newElemId = txn.insertElement(newElemProps);\r\n });\r\n\r\n b1.clearCaches();\r\n\r\n // Verify after delete + insert\r\n chai.expect(() => b1!.elements.getElementProps(elem1Id!)).to.throw();\r\n const newElem = b1.elements.getElementProps(newElemId!);\r\n chai.expect(newElem.code.value).to.equal(\"CODE_A\");\r\n\r\n // --- Undo (reverse the delete + insert) ---\r\n chai.expect(b1.txns.isUndoPossible).to.be.true;\r\n b1.txns.reverseTxns(1);\r\n\r\n e1 = b1.elements.getElementProps(elem1Id!);\r\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\r\n chai.expect(() => b1!.elements.getElementProps(newElemId!)).to.throw();\r\n\r\n // --- Redo (reinstate the delete + insert) ---\r\n chai.expect(b1.txns.isRedoPossible).to.be.true;\r\n b1.txns.reinstateTxn();\r\n\r\n chai.expect(() => b1!.elements.getElementProps(elem1Id!)).to.throw();\r\n const redoneElem = b1.elements.getElementProps(newElemId!);\r\n chai.expect(redoneElem.code.value).to.equal(\"CODE_A\");\r\n\r\n // --- Push changes ---\r\n await b1.pushChanges({ description: \"delete elem1 and insert new element with same code\" });\r\n await b2.pullChanges();\r\n\r\n // No local txns remain after push\r\n chai.expect(b1.txns.isUndoPossible).to.be.false;\r\n chai.expect(b1.txns.isRedoPossible).to.be.false;\r\n\r\n // Verify b2 sees the final state after pulling\r\n chai.expect(() => b2!.elements.getElementProps(elem1Id!)).to.throw();\r\n const b2NewElem = b2.elements.getElementProps(newElemId!);\r\n chai.expect(b2NewElem.code.value).to.equal(\"CODE_A\");\r\n\r\n } finally {\r\n b1?.close();\r\n b2?.close();\r\n HubMock.shutdown();\r\n }\r\n });\r\n\r\n it(\"single-transaction code swap reverts to old behaviour (swap not applied) when noUpdateLoop is true\", async () => {\r\n HubMock.startup(\"CodeSwapNoUpdateLoopTest\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let b2: BriefcaseDb | undefined;\r\n\r\n try {\r\n // --- Setup iModel ---\r\n const iModelId = await HubMock.createNewIModel({\r\n accessToken: \"user1\",\r\n iTwinId: HubMock.iTwinId,\r\n iModelName: \"CodeSwapNoUpdateLoopTest\",\r\n description: \"CodeSwapNoUpdateLoopTest\",\r\n });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n let drawingModelId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let codeSpecId: Id64String;\r\n let codeScopeId: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\r\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\r\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\r\n drawingModelId = modelId;\r\n\r\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === catId)\r\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\r\n drawingCategoryId = catId;\r\n\r\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\r\n codeScopeId = drawingModelId;\r\n });\r\n\r\n await b1.pushChanges({ description: \"setup\" });\r\n await b2.pullChanges();\r\n\r\n let elem1Id: Id64String;\r\n let elem2Id: Id64String;\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId! });\r\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\r\n const elem1Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\r\n };\r\n const elem2Props: GeometricElement2dProps = {\r\n classFullName: \"BisCore:DrawingGraphic\",\r\n model: drawingModelId!,\r\n category: drawingCategoryId!,\r\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\r\n };\r\n elem1Id = txn.insertElement(elem1Props);\r\n elem2Id = txn.insertElement(elem2Props);\r\n });\r\n\r\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\r\n await b2.pullChanges();\r\n\r\n // --- Single-transaction swap: null elem1, then swap codes ---\r\n await b1.locks.acquireLocks({ exclusive: [elem2Id!, elem1Id!] });\r\n withEditTxn(b1, \"single-txn swap\", (txn) => {\r\n // Step 1: null out elem1's code to free the uniqueness slot\r\n const props = b1!.elements.getElementProps(elem1Id!);\r\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\r\n txn.updateElement(props);\r\n\r\n // Step 2: assign CODE_A to elem2, CODE_B to elem1\r\n const props1 = b1!.elements.getElementProps(elem1Id!);\r\n const props2 = b1!.elements.getElementProps(elem2Id!);\r\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\r\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\r\n txn.updateElement(props2);\r\n txn.updateElement(props1);\r\n });\r\n\r\n // Verify b1 has the swapped state\r\n b1.clearCaches();\r\n const b1e1 = b1.elements.getElementProps(elem1Id!);\r\n const b1e2 = b1.elements.getElementProps(elem2Id!);\r\n chai.expect(b1e1.code.value).to.equal(\"CODE_B\");\r\n chai.expect(b1e2.code.value).to.equal(\"CODE_A\");\r\n\r\n await b1.pushChanges({ description: \"single-txn code swap\" });\r\n\r\n // Pull with noUpdateLoop: true — this uses the old (pre-fix) apply path.\r\n // The unique-index conflict handler skips the intermediate null step,\r\n // so the swap is silently dropped and b2 retains the original codes.\r\n // noUpdateLoop is intentionally not in the public PullChangesArgs type.\r\n type InternalPullArgs = Parameters<BriefcaseDb[\"pullChanges\"]>[0] & { noUpdateLoop?: boolean };\r\n await b2.pullChanges({ noUpdateLoop: true } as InternalPullArgs);\r\n\r\n b2.clearCaches();\r\n const b2e1 = b2.elements.getElementProps(elem1Id!);\r\n const b2e2 = b2.elements.getElementProps(elem2Id!);\r\n // Old behaviour: swap did NOT land — b2 still sees the original codes\r\n chai.expect(b2e1.code.value).to.equal(\"CODE_A\");\r\n chai.expect(b2e2.code.value).to.equal(\"CODE_B\");\r\n\r\n } finally {\r\n b1?.close();\r\n b2?.close();\r\n HubMock.shutdown();\r\n }\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"CodeSwap.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CodeSwap.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 * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { Suite } from \"mocha\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { Code, CodeScopeSpec, GeometricElement2dProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { BriefcaseDb, ChannelControl, DrawingCategory } from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { withEditTxn } from \"../../EditTxn\";\n\nchai.use(chaiAsPromised);\n\ndescribe(\"Code value management: null, swap, undo/redo, and cross-briefcase pull\", function (this: Suite) {\n this.timeout(60000);\n\n it(\"swap codeValues between two elements sharing the same codeSpec and codeScope, verify undo/redo in a single transaction\", async () => {\n HubMock.startup(\"CodeSwapTest\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n\n try {\n // --- Setup iModel ---\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"user1\",\n iTwinId: HubMock.iTwinId,\n iModelName: \"CodeSwapTest\",\n description: \"CodeSwapTest\",\n });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // --- Create a drawing model + category and a CodeSpec ---\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let codeSpecId: Id64String;\n let codeScopeId: Id64String; // will be the drawing model\n\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n drawingModelId = modelId;\n\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === catId)\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n drawingCategoryId = catId;\n\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\n codeScopeId = drawingModelId;\n });\n\n await b1.pushChanges({ description: \"setup\" });\n\n // --- Insert two elements with same codeSpecId/codeScopeId but different codeValues ---\n let elem1Id: Id64String;\n let elem2Id: Id64String;\n\n await b1.locks.acquireLocks({ shared: drawingModelId! });\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\n const elem1Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\n };\n const elem2Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\n };\n elem1Id = txn.insertElement(elem1Props);\n elem2Id = txn.insertElement(elem2Props);\n });\n\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\n\n // Verify initial state\n let e1 = b1.elements.getElementProps(elem1Id!);\n let e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\n chai.expect(e2.code.spec).to.equal(codeSpecId!);\n chai.expect(e2.code.scope).to.equal(codeScopeId!);\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\n\n await b1.locks.acquireLocks({ exclusive: [elem2Id!, elem1Id!] });\n withEditTxn(b1, \"swap code values\", (txn) => {\n const props = b1!.elements.getElementProps(elem1Id!);\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\n txn.updateElement(props);\n\n const props1 = b1!.elements.getElementProps(elem1Id!);\n const props2 = b1!.elements.getElementProps(elem2Id!);\n\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\n\n txn.updateElement(props2);\n txn.updateElement(props1);\n });\n b1.clearCaches();\n // Verify after swap2\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\n\n // --- Undo (reverse txn2: the swap) ---\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n b1.txns.reverseTxns(1);\n\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\n\n // --- Redo (reinstate txn2: the swap) ---\n chai.expect(b1.txns.isRedoPossible).to.be.true;\n b1.txns.reinstateTxn();\n\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\n\n } finally {\n b1?.close();\n HubMock.shutdown();\n }\n });\n it(\"insert two elements with same codeSpecId and codeScopeId, null first code, swap codes, undo/redo, push\", async () => {\n HubMock.startup(\"CodeSwapTest\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let b2: BriefcaseDb | undefined;\n\n try {\n // --- Setup iModel ---\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"user1\",\n iTwinId: HubMock.iTwinId,\n iModelName: \"CodeSwapTest\",\n description: \"CodeSwapTest\",\n });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // --- Create a drawing model + category and a CodeSpec ---\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let codeSpecId: Id64String;\n let codeScopeId: Id64String; // will be the drawing model\n\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n drawingModelId = modelId;\n\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === catId)\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n drawingCategoryId = catId;\n\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\n codeScopeId = drawingModelId;\n });\n\n await b1.pushChanges({ description: \"setup\" });\n await b2.pullChanges();\n\n // --- Insert two elements with same codeSpecId/codeScopeId but different codeValues ---\n let elem1Id: Id64String;\n let elem2Id: Id64String;\n\n await b1.locks.acquireLocks({ shared: drawingModelId! });\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\n const elem1Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\n };\n const elem2Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\n };\n elem1Id = txn.insertElement(elem1Props);\n elem2Id = txn.insertElement(elem2Props);\n });\n\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\n await b2.pullChanges();\n\n // Verify initial state\n let e1 = b1.elements.getElementProps(elem1Id!);\n let e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\n chai.expect(e2.code.spec).to.equal(codeSpecId!);\n chai.expect(e2.code.scope).to.equal(codeScopeId!);\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\n\n // --- Step 1 (txn1): Set codeValue of elem1 to empty (null-equivalent) ---\n await b1.locks.acquireLocks({ exclusive: [elem1Id!] });\n withEditTxn(b1, \"set elem1 code to null\", (txn) => {\n const props = b1!.elements.getElementProps(elem1Id!);\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\n txn.updateElement(props);\n });\n\n e1 = b1.elements.getElementProps(elem1Id!);\n chai.expect(e1.code.value).to.satisfy((v: string | undefined) => v === undefined || v === \"\");\n\n // --- Step 2 (txn2): Swap codeValues — elem1 gets CODE_B, elem2 gets CODE_A ---\n // elem1's intermediate empty code value avoids a uniqueness conflict while assigning CODE_A to elem2.\n await b1.locks.acquireLocks({ exclusive: [elem2Id!] });\n withEditTxn(b1, \"swap code values\", (txn) => {\n const props1 = b1!.elements.getElementProps(elem1Id!);\n const props2 = b1!.elements.getElementProps(elem2Id!);\n\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\n\n txn.updateElement(props2);\n txn.updateElement(props1);\n });\n b1.clearCaches();\n // Verify after swap\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\n\n // --- Undo (reverse txn2: the swap) ---\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n b1.txns.reverseTxns(1);\n\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.satisfy((v: string | undefined) => v === undefined || v === \"\");\n chai.expect(e2.code.value).to.equal(\"CODE_B\");\n\n // --- Redo (reinstate txn2: the swap) ---\n chai.expect(b1.txns.isRedoPossible).to.be.true;\n b1.txns.reinstateTxn();\n\n e1 = b1.elements.getElementProps(elem1Id!);\n e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_B\");\n chai.expect(e2.code.value).to.equal(\"CODE_A\");\n // --- Push changes ---\n await b1.pushChanges({ description: \"null elem1 code and swap code values\" });\n await b2.pullChanges();\n\n // No local txns remain after push\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // Verify b2 sees the final swapped code values after pulling\n const b2e1 = b2.elements.getElementProps(elem1Id!);\n const b2e2 = b2.elements.getElementProps(elem2Id!);\n chai.expect(b2e1.code.value).to.equal(\"CODE_B\");\n chai.expect(b2e2.code.value).to.equal(\"CODE_A\");\n\n } finally {\n b1?.close();\n b2?.close();\n HubMock.shutdown();\n }\n });\n it(\"delete element with existing code and insert new element with same code, verify undo/redo, push, and b2 sees final state after pull\", async () => {\n HubMock.startup(\"CodeDeleteInsertTest\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let b2: BriefcaseDb | undefined;\n\n try {\n // --- Setup iModel ---\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"user1\",\n iTwinId: HubMock.iTwinId,\n iModelName: \"CodeDeleteInsertTest\",\n description: \"CodeDeleteInsertTest\",\n });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // --- Create a drawing model + category and a CodeSpec ---\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let codeSpecId: Id64String;\n let codeScopeId: Id64String;\n\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n drawingModelId = modelId;\n\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === catId)\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n drawingCategoryId = catId;\n\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\n codeScopeId = drawingModelId;\n });\n\n await b1.pushChanges({ description: \"setup\" });\n await b2.pullChanges();\n\n // --- Insert an element with a code ---\n let elem1Id: Id64String;\n\n await b1.locks.acquireLocks({ shared: drawingModelId! });\n withEditTxn(b1, \"insert element with CODE_A\", (txn) => {\n const elem1Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\n };\n elem1Id = txn.insertElement(elem1Props);\n });\n\n await b1.pushChanges({ description: \"insert element with CODE_A\" });\n await b2.pullChanges();\n\n // Verify initial state\n let e1 = b1.elements.getElementProps(elem1Id!);\n chai.expect(e1.code.spec).to.equal(codeSpecId!);\n chai.expect(e1.code.scope).to.equal(codeScopeId!);\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\n\n // --- Delete elem1 and insert a new element with the same code ---\n let newElemId: Id64String;\n\n await b1.locks.acquireLocks({ exclusive: [elem1Id!] });\n withEditTxn(b1, \"delete elem1 and insert new element with same code\", (txn) => {\n txn.deleteElement(elem1Id!);\n\n const newElemProps: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\n };\n newElemId = txn.insertElement(newElemProps);\n });\n\n b1.clearCaches();\n\n // Verify after delete + insert\n chai.expect(() => b1!.elements.getElementProps(elem1Id!)).to.throw();\n const newElem = b1.elements.getElementProps(newElemId!);\n chai.expect(newElem.code.value).to.equal(\"CODE_A\");\n\n // --- Undo (reverse the delete + insert) ---\n chai.expect(b1.txns.isUndoPossible).to.be.true;\n b1.txns.reverseTxns(1);\n\n e1 = b1.elements.getElementProps(elem1Id!);\n chai.expect(e1.code.value).to.equal(\"CODE_A\");\n chai.expect(() => b1!.elements.getElementProps(newElemId!)).to.throw();\n\n // --- Redo (reinstate the delete + insert) ---\n chai.expect(b1.txns.isRedoPossible).to.be.true;\n b1.txns.reinstateTxn();\n\n chai.expect(() => b1!.elements.getElementProps(elem1Id!)).to.throw();\n const redoneElem = b1.elements.getElementProps(newElemId!);\n chai.expect(redoneElem.code.value).to.equal(\"CODE_A\");\n\n // --- Push changes ---\n await b1.pushChanges({ description: \"delete elem1 and insert new element with same code\" });\n await b2.pullChanges();\n\n // No local txns remain after push\n chai.expect(b1.txns.isUndoPossible).to.be.false;\n chai.expect(b1.txns.isRedoPossible).to.be.false;\n\n // Verify b2 sees the final state after pulling\n chai.expect(() => b2!.elements.getElementProps(elem1Id!)).to.throw();\n const b2NewElem = b2.elements.getElementProps(newElemId!);\n chai.expect(b2NewElem.code.value).to.equal(\"CODE_A\");\n\n } finally {\n b1?.close();\n b2?.close();\n HubMock.shutdown();\n }\n });\n\n it(\"single-transaction code swap reverts to old behaviour (swap not applied) when noUpdateLoop is true\", async () => {\n HubMock.startup(\"CodeSwapNoUpdateLoopTest\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let b2: BriefcaseDb | undefined;\n\n try {\n // --- Setup iModel ---\n const iModelId = await HubMock.createNewIModel({\n accessToken: \"user1\",\n iTwinId: HubMock.iTwinId,\n iModelName: \"CodeSwapNoUpdateLoopTest\",\n description: \"CodeSwapNoUpdateLoopTest\",\n });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n let drawingModelId: Id64String;\n let drawingCategoryId: Id64String;\n let codeSpecId: Id64String;\n let codeScopeId: Id64String;\n\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\n withEditTxn(b1, \"setup model, category, codeSpec\", (txn) => {\n const modelCode = IModelTestUtils.getUniqueModelCode(b1!, \"DrawingModel\");\n const [, modelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(txn, modelCode);\n drawingModelId = modelId;\n\n let catId = DrawingCategory.queryCategoryIdByName(b1!, IModel.dictionaryId, \"MyDrawingCategory\");\n if (undefined === catId)\n catId = DrawingCategory.insert(txn, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance());\n drawingCategoryId = catId;\n\n codeSpecId = b1!.codeSpecs.insert(txn, \"MyCodeSpec\", CodeScopeSpec.Type.Model);\n codeScopeId = drawingModelId;\n });\n\n await b1.pushChanges({ description: \"setup\" });\n await b2.pullChanges();\n\n let elem1Id: Id64String;\n let elem2Id: Id64String;\n\n await b1.locks.acquireLocks({ shared: drawingModelId! });\n withEditTxn(b1, \"insert two coded elements\", (txn) => {\n const elem1Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" }),\n };\n const elem2Props: GeometricElement2dProps = {\n classFullName: \"BisCore:DrawingGraphic\",\n model: drawingModelId!,\n category: drawingCategoryId!,\n code: new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" }),\n };\n elem1Id = txn.insertElement(elem1Props);\n elem2Id = txn.insertElement(elem2Props);\n });\n\n await b1.pushChanges({ description: \"insert two elements with CODE_A and CODE_B\" });\n await b2.pullChanges();\n\n // --- Single-transaction swap: null elem1, then swap codes ---\n await b1.locks.acquireLocks({ exclusive: [elem2Id!, elem1Id!] });\n withEditTxn(b1, \"single-txn swap\", (txn) => {\n // Step 1: null out elem1's code to free the uniqueness slot\n const props = b1!.elements.getElementProps(elem1Id!);\n props.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"\" });\n txn.updateElement(props);\n\n // Step 2: assign CODE_A to elem2, CODE_B to elem1\n const props1 = b1!.elements.getElementProps(elem1Id!);\n const props2 = b1!.elements.getElementProps(elem2Id!);\n props2.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_A\" });\n props1.code = new Code({ spec: codeSpecId!, scope: codeScopeId!, value: \"CODE_B\" });\n txn.updateElement(props2);\n txn.updateElement(props1);\n });\n\n // Verify b1 has the swapped state\n b1.clearCaches();\n const b1e1 = b1.elements.getElementProps(elem1Id!);\n const b1e2 = b1.elements.getElementProps(elem2Id!);\n chai.expect(b1e1.code.value).to.equal(\"CODE_B\");\n chai.expect(b1e2.code.value).to.equal(\"CODE_A\");\n\n await b1.pushChanges({ description: \"single-txn code swap\" });\n\n // Pull with noUpdateLoop: true — this uses the old (pre-fix) apply path.\n // The unique-index conflict handler skips the intermediate null step,\n // so the swap is silently dropped and b2 retains the original codes.\n // noUpdateLoop is intentionally not in the public PullChangesArgs type.\n type InternalPullArgs = Parameters<BriefcaseDb[\"pullChanges\"]>[0] & { noUpdateLoop?: boolean };\n await b2.pullChanges({ noUpdateLoop: true } as InternalPullArgs);\n\n b2.clearCaches();\n const b2e1 = b2.elements.getElementProps(elem1Id!);\n const b2e2 = b2.elements.getElementProps(elem2Id!);\n // Old behaviour: swap did NOT land — b2 still sees the original codes\n chai.expect(b2e1.code.value).to.equal(\"CODE_A\");\n chai.expect(b2e2.code.value).to.equal(\"CODE_B\");\n\n } finally {\n b1?.close();\n b2?.close();\n HubMock.shutdown();\n }\n });\n});\n"]}