@itwin/core-backend 5.8.0-dev.9 → 5.8.0

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 (499) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChannelControl.js.map +1 -1
  15. package/lib/cjs/CheckpointManager.js.map +1 -1
  16. package/lib/cjs/ClassRegistry.js +5 -5
  17. package/lib/cjs/ClassRegistry.js.map +1 -1
  18. package/lib/cjs/CloudSqlite.js.map +1 -1
  19. package/lib/cjs/CodeService.js.map +1 -1
  20. package/lib/cjs/CodeSpecs.js.map +1 -1
  21. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  22. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  23. package/lib/cjs/DevTools.js.map +1 -1
  24. package/lib/cjs/DisplayStyle.js.map +1 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  27. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  28. package/lib/cjs/ECSqlStatement.js.map +1 -1
  29. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/FontFile.js.map +1 -1
  39. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  40. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  41. package/lib/cjs/GeometrySummary.js +47 -47
  42. package/lib/cjs/GeometrySummary.js.map +1 -1
  43. package/lib/cjs/IModelDb.d.ts.map +1 -1
  44. package/lib/cjs/IModelDb.js +8 -11
  45. package/lib/cjs/IModelDb.js.map +1 -1
  46. package/lib/cjs/IModelDbFonts.js.map +1 -1
  47. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  48. package/lib/cjs/IModelHost.js.map +1 -1
  49. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  50. package/lib/cjs/IModelJsFs.js.map +1 -1
  51. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  52. package/lib/cjs/IpcHost.d.ts.map +1 -1
  53. package/lib/cjs/IpcHost.js +28 -4
  54. package/lib/cjs/IpcHost.js.map +1 -1
  55. package/lib/cjs/LineStyle.d.ts +6 -0
  56. package/lib/cjs/LineStyle.d.ts.map +1 -1
  57. package/lib/cjs/LineStyle.js +41 -32
  58. package/lib/cjs/LineStyle.js.map +1 -1
  59. package/lib/cjs/LocalHub.d.ts +17 -10
  60. package/lib/cjs/LocalHub.d.ts.map +1 -1
  61. package/lib/cjs/LocalHub.js +127 -29
  62. package/lib/cjs/LocalHub.js.map +1 -1
  63. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  64. package/lib/cjs/LockControl.js.map +1 -1
  65. package/lib/cjs/Material.js.map +1 -1
  66. package/lib/cjs/Model.js.map +1 -1
  67. package/lib/cjs/NativeAppStorage.js.map +1 -1
  68. package/lib/cjs/NativeHost.js.map +1 -1
  69. package/lib/cjs/NavigationRelationship.js.map +1 -1
  70. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  71. package/lib/cjs/PropertyStore.js.map +1 -1
  72. package/lib/cjs/Relationship.js.map +1 -1
  73. package/lib/cjs/RpcBackend.js.map +1 -1
  74. package/lib/cjs/SQLiteDb.js.map +1 -1
  75. package/lib/cjs/Schema.js.map +1 -1
  76. package/lib/cjs/SchemaSync.js.map +1 -1
  77. package/lib/cjs/SchemaUtils.js.map +1 -1
  78. package/lib/cjs/SheetIndex.js.map +1 -1
  79. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  80. package/lib/cjs/SqliteStatement.js.map +1 -1
  81. package/lib/cjs/StashManager.js.map +1 -1
  82. package/lib/cjs/Texture.js.map +1 -1
  83. package/lib/cjs/TileStorage.js.map +1 -1
  84. package/lib/cjs/TxnManager.js.map +1 -1
  85. package/lib/cjs/ViewDefinition.js.map +1 -1
  86. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  87. package/lib/cjs/ViewStore.js.map +1 -1
  88. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  89. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  92. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  93. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  94. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  95. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  96. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  97. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  98. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  99. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  100. package/lib/cjs/core-backend.d.ts +2 -0
  101. package/lib/cjs/core-backend.d.ts.map +1 -1
  102. package/lib/cjs/core-backend.js +2 -0
  103. package/lib/cjs/core-backend.js.map +1 -1
  104. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  105. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  106. package/lib/cjs/domains/GenericElements.js.map +1 -1
  107. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  108. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  109. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  110. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  111. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  112. package/lib/cjs/internal/HubMock.js.map +1 -1
  113. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  114. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  115. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  116. package/lib/cjs/internal/NoLocks.js.map +1 -1
  117. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  118. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  119. package/lib/cjs/internal/Symbols.js.map +1 -1
  120. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  121. package/lib/cjs/internal/cross-package.js.map +1 -1
  122. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
  123. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  124. package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
  125. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
  126. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  127. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  128. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
  129. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
  130. package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
  131. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  132. package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
  133. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  134. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  135. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  136. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  137. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
  138. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
  139. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
  140. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  141. package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
  142. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  143. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  144. package/lib/cjs/rpc/multipart.js.map +1 -1
  145. package/lib/cjs/rpc/tracing.js.map +1 -1
  146. package/lib/cjs/rpc/web/logging.js.map +1 -1
  147. package/lib/cjs/rpc/web/request.js.map +1 -1
  148. package/lib/cjs/rpc/web/response.js.map +1 -1
  149. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  150. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  151. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  152. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  153. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  154. package/lib/cjs/workspace/Settings.d.ts +8 -0
  155. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  156. package/lib/cjs/workspace/Settings.js.map +1 -1
  157. package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
  158. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
  159. package/lib/cjs/workspace/SettingsDb.js +19 -0
  160. package/lib/cjs/workspace/SettingsDb.js.map +1 -0
  161. package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
  162. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
  163. package/lib/cjs/workspace/SettingsEditor.js +53 -0
  164. package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
  165. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  166. package/lib/cjs/workspace/Workspace.d.ts +42 -19
  167. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  168. package/lib/cjs/workspace/Workspace.js.map +1 -1
  169. package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
  170. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  171. package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
  172. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  173. package/lib/esm/BackendHubAccess.js.map +1 -1
  174. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  175. package/lib/esm/BisCoreSchema.js.map +1 -1
  176. package/lib/esm/BlobContainerService.js.map +1 -1
  177. package/lib/esm/BriefcaseManager.js.map +1 -1
  178. package/lib/esm/CatalogDb.js.map +1 -1
  179. package/lib/esm/Category.js.map +1 -1
  180. package/lib/esm/ChangeSummaryManager.js +2 -2
  181. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  182. package/lib/esm/ChangedElementsDb.js.map +1 -1
  183. package/lib/esm/ChangesetECAdaptor.js +248 -248
  184. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  185. package/lib/esm/ChannelControl.js.map +1 -1
  186. package/lib/esm/CheckpointManager.js.map +1 -1
  187. package/lib/esm/ClassRegistry.js +5 -5
  188. package/lib/esm/ClassRegistry.js.map +1 -1
  189. package/lib/esm/CloudSqlite.js.map +1 -1
  190. package/lib/esm/CodeService.js.map +1 -1
  191. package/lib/esm/CodeSpecs.js.map +1 -1
  192. package/lib/esm/ConcurrentQuery.js.map +1 -1
  193. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  194. package/lib/esm/DevTools.js.map +1 -1
  195. package/lib/esm/DisplayStyle.js.map +1 -1
  196. package/lib/esm/ECDb.js.map +1 -1
  197. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  198. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  199. package/lib/esm/ECSqlStatement.js.map +1 -1
  200. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  201. package/lib/esm/Element.js.map +1 -1
  202. package/lib/esm/ElementAspect.js.map +1 -1
  203. package/lib/esm/ElementGraphics.js.map +1 -1
  204. package/lib/esm/ElementTreeWalker.js.map +1 -1
  205. package/lib/esm/Entity.js.map +1 -1
  206. package/lib/esm/EntityReferences.js.map +1 -1
  207. package/lib/esm/ExportGraphics.js.map +1 -1
  208. package/lib/esm/ExternalSource.js.map +1 -1
  209. package/lib/esm/FontFile.js.map +1 -1
  210. package/lib/esm/GeoCoordConfig.js.map +1 -1
  211. package/lib/esm/GeographicCRSServices.js.map +1 -1
  212. package/lib/esm/GeometrySummary.js +47 -47
  213. package/lib/esm/GeometrySummary.js.map +1 -1
  214. package/lib/esm/IModelDb.d.ts.map +1 -1
  215. package/lib/esm/IModelDb.js +8 -11
  216. package/lib/esm/IModelDb.js.map +1 -1
  217. package/lib/esm/IModelDbFonts.js.map +1 -1
  218. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  219. package/lib/esm/IModelHost.js.map +1 -1
  220. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  221. package/lib/esm/IModelJsFs.js.map +1 -1
  222. package/lib/esm/ImageSourceConversion.js.map +1 -1
  223. package/lib/esm/IpcHost.d.ts.map +1 -1
  224. package/lib/esm/IpcHost.js +28 -4
  225. package/lib/esm/IpcHost.js.map +1 -1
  226. package/lib/esm/LineStyle.d.ts +6 -0
  227. package/lib/esm/LineStyle.d.ts.map +1 -1
  228. package/lib/esm/LineStyle.js +41 -32
  229. package/lib/esm/LineStyle.js.map +1 -1
  230. package/lib/esm/LocalHub.d.ts +17 -10
  231. package/lib/esm/LocalHub.d.ts.map +1 -1
  232. package/lib/esm/LocalHub.js +128 -30
  233. package/lib/esm/LocalHub.js.map +1 -1
  234. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  235. package/lib/esm/LockControl.js.map +1 -1
  236. package/lib/esm/Material.js.map +1 -1
  237. package/lib/esm/Model.js.map +1 -1
  238. package/lib/esm/NativeAppStorage.js.map +1 -1
  239. package/lib/esm/NativeHost.js.map +1 -1
  240. package/lib/esm/NavigationRelationship.js.map +1 -1
  241. package/lib/esm/PromiseMemoizer.js.map +1 -1
  242. package/lib/esm/PropertyStore.js.map +1 -1
  243. package/lib/esm/Relationship.js.map +1 -1
  244. package/lib/esm/RpcBackend.js.map +1 -1
  245. package/lib/esm/SQLiteDb.js.map +1 -1
  246. package/lib/esm/Schema.js.map +1 -1
  247. package/lib/esm/SchemaSync.js.map +1 -1
  248. package/lib/esm/SchemaUtils.js.map +1 -1
  249. package/lib/esm/SheetIndex.js.map +1 -1
  250. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  251. package/lib/esm/SqliteStatement.js.map +1 -1
  252. package/lib/esm/StashManager.js.map +1 -1
  253. package/lib/esm/Texture.js.map +1 -1
  254. package/lib/esm/TileStorage.js.map +1 -1
  255. package/lib/esm/TxnManager.js.map +1 -1
  256. package/lib/esm/ViewDefinition.js.map +1 -1
  257. package/lib/esm/ViewStateHydrator.js.map +1 -1
  258. package/lib/esm/ViewStore.js.map +1 -1
  259. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  260. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  261. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  262. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  263. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  264. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  265. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  266. package/lib/esm/core-backend.d.ts +2 -0
  267. package/lib/esm/core-backend.d.ts.map +1 -1
  268. package/lib/esm/core-backend.js +2 -0
  269. package/lib/esm/core-backend.js.map +1 -1
  270. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  271. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  272. package/lib/esm/domains/GenericElements.js.map +1 -1
  273. package/lib/esm/domains/GenericSchema.js.map +1 -1
  274. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  275. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  276. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  277. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  278. package/lib/esm/internal/HubMock.js.map +1 -1
  279. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  280. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  281. package/lib/esm/internal/NativePlatform.js.map +1 -1
  282. package/lib/esm/internal/NoLocks.js.map +1 -1
  283. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  284. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  285. package/lib/esm/internal/Symbols.js.map +1 -1
  286. package/lib/esm/internal/annotations/fields.js.map +1 -1
  287. package/lib/esm/internal/cross-package.js.map +1 -1
  288. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
  289. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
  290. package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
  291. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
  292. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
  293. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
  294. package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
  295. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
  296. package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
  297. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  298. package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
  299. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  300. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  301. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
  302. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
  303. package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
  304. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
  305. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
  306. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  307. package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
  308. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  309. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  310. package/lib/esm/rpc/multipart.js.map +1 -1
  311. package/lib/esm/rpc/tracing.js.map +1 -1
  312. package/lib/esm/rpc/web/logging.js.map +1 -1
  313. package/lib/esm/rpc/web/request.js.map +1 -1
  314. package/lib/esm/rpc/web/response.js.map +1 -1
  315. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  316. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  317. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  318. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  319. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  320. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  321. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  322. package/lib/esm/test/AttachDb.test.js +11 -11
  323. package/lib/esm/test/AttachDb.test.js.map +1 -1
  324. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  325. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  326. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  327. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  328. package/lib/esm/test/IModelHost.test.js.map +1 -1
  329. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  330. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  331. package/lib/esm/test/IpcHost.test.js +64 -13
  332. package/lib/esm/test/IpcHost.test.js.map +1 -1
  333. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  334. package/lib/esm/test/PrintElementTree.js.map +1 -1
  335. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  336. package/lib/esm/test/RevisionUtility.js.map +1 -1
  337. package/lib/esm/test/SchemaUtils.test.js +25 -25
  338. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  339. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  340. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  341. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  342. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  343. package/lib/esm/test/TestUtils.js.map +1 -1
  344. package/lib/esm/test/annotations/Fields.test.js +53 -53
  345. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  346. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  347. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  348. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  349. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  350. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  351. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  352. package/lib/esm/test/categories/Category.test.js.map +1 -1
  353. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  354. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  355. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  356. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  357. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  358. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  359. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  360. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  361. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  362. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  363. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  364. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  365. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  366. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  367. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  368. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  369. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  371. package/lib/esm/test/ecdb/QueryReaders.test.js +62 -27
  372. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  373. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  374. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  375. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +4 -1
  376. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  377. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  378. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  379. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  380. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +8 -0
  381. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  382. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  383. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  384. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  385. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  386. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  387. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  388. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  389. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  390. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  391. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  392. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  393. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  394. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  395. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  396. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  397. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  398. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  399. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  400. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  401. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  402. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  403. package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
  404. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  405. package/lib/esm/test/imageData.js.map +1 -1
  406. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  407. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  408. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  409. package/lib/esm/test/imodel/IModel.test.js +44 -44
  410. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  411. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  412. package/lib/esm/test/imodel/SchemaXmlImport.test.js +13 -13
  413. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  414. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  415. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  416. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  417. package/lib/esm/test/index.js.map +1 -1
  418. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  419. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  420. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  421. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  422. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  423. package/lib/esm/test/rpc/response.test.js.map +1 -1
  424. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  425. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  426. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  427. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  428. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  429. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  430. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  431. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  432. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  433. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  434. package/lib/esm/test/standalone/ChangesetReader.test.js +135 -135
  435. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  436. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  437. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  438. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  439. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  440. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  441. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  442. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  443. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  444. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  445. package/lib/esm/test/standalone/HubMock.test.js +177 -7
  446. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  447. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  448. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  449. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  450. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  451. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  452. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  453. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  454. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  455. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  456. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  457. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  458. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  459. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  460. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  461. package/lib/esm/test/standalone/Settings.test.js +18 -0
  462. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  463. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  464. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  465. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  466. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  467. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  468. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  469. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  470. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  471. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  472. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  473. package/lib/esm/test/standalone/Workspace.test.js +160 -0
  474. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  475. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  476. package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
  477. package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
  478. package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
  479. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
  480. package/lib/esm/workspace/Settings.d.ts +8 -0
  481. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  482. package/lib/esm/workspace/Settings.js.map +1 -1
  483. package/lib/esm/workspace/SettingsDb.d.ts +109 -0
  484. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
  485. package/lib/esm/workspace/SettingsDb.js +16 -0
  486. package/lib/esm/workspace/SettingsDb.js.map +1 -0
  487. package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
  488. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
  489. package/lib/esm/workspace/SettingsEditor.js +50 -0
  490. package/lib/esm/workspace/SettingsEditor.js.map +1 -0
  491. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  492. package/lib/esm/workspace/Workspace.d.ts +42 -19
  493. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  494. package/lib/esm/workspace/Workspace.js.map +1 -1
  495. package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
  496. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  497. package/lib/esm/workspace/WorkspaceEditor.js +19 -0
  498. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  499. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"InlineGeometryPartReferences.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/InlineGeometryPartReferences.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\nimport { expect } from \"chai\";\r\nimport { Guid, Id64 } from \"@itwin/core-bentley\";\r\nimport { LineString3d, Loop, Point3d } from \"@itwin/core-geometry\";\r\nimport {\r\n AreaPattern,\r\n Code, ColorDef, GeometricElement3dProps, GeometryParams, GeometryPartProps, GeometryStreamBuilder, GeometryStreamIterator, IModel,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n _nativeDb, GenericSchema, GeometricElement3d, GeometryPart, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, SubjectOwnsPartitionElements,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\n// The only geometry in our geometry streams will be squares of 1 meter in x and y, with origin at (pos, 0, 0).\r\ninterface Primitive { pos: number }\r\n\r\ninterface PartRef {\r\n partId: string;\r\n origin?: number; // origin in X. y and z are zero.\r\n}\r\n\r\ninterface Symbology {\r\n categoryId?: string;\r\n subCategoryId?: string;\r\n color?: ColorDef;\r\n materialId?: string;\r\n patternOrigin?: number;\r\n}\r\n\r\nfunction makeGeomParams(symb: Symbology): GeometryParams {\r\n const params = new GeometryParams(symb.categoryId ?? Id64.invalid, symb.subCategoryId);\r\n params.lineColor = symb.color;\r\n params.materialId = symb.materialId;\r\n if (symb.patternOrigin)\r\n params.pattern = AreaPattern.Params.fromJSON({ origin: [symb.patternOrigin, 0, 0] });\r\n\r\n return params;\r\n}\r\n\r\ninterface AppendSubRanges { appendSubRanges: true }\r\n\r\ntype UnionMember<T, U> = T & { [k in keyof U]?: never };\r\n\r\ntype GeomWriterEntry =\r\n UnionMember<PartRef, Symbology & Primitive & AppendSubRanges> |\r\n UnionMember<Symbology, PartRef & Primitive & AppendSubRanges> |\r\n UnionMember<Primitive, PartRef & Symbology & AppendSubRanges> |\r\n UnionMember<AppendSubRanges, Symbology & Primitive & PartRef>;\r\n\r\nclass GeomWriter {\r\n public readonly builder: GeometryStreamBuilder;\r\n\r\n public constructor(symbology?: Symbology) {\r\n this.builder = new GeometryStreamBuilder();\r\n if (symbology)\r\n this.append(symbology);\r\n }\r\n\r\n public append(entry: GeomWriterEntry): void {\r\n if (entry.partId)\r\n this.builder.appendGeometryPart3d(entry.partId, new Point3d(entry.origin, 0, 0));\r\n else if (entry.subCategoryId || entry.categoryId || entry.color || entry.materialId || entry.patternOrigin)\r\n this.builder.appendGeometryParamsChange(makeGeomParams(entry));\r\n else if (undefined !== entry.pos)\r\n this.builder.appendGeometry(Loop.createPolygon([new Point3d(entry.pos, 0, 0), new Point3d(entry.pos + 1, 0, 0), new Point3d(entry.pos + 1, 1, 0), new Point3d(entry.pos, 1, 0)]));\r\n else if (undefined !== entry.appendSubRanges)\r\n this.builder.appendGeometryRanges();\r\n }\r\n}\r\n\r\n// SubGraphicRange where x dimension is 1 meter and y and z are empty.\r\ninterface SubRange { low: number }\r\n\r\ntype GeomStreamEntry =\r\n UnionMember<PartRef, Symbology & SubRange & Primitive> |\r\n UnionMember<Symbology, PartRef & SubRange & Primitive> |\r\n UnionMember<SubRange, PartRef & Symbology & Primitive> |\r\n UnionMember<Primitive, PartRef & Symbology & SubRange>;\r\n\r\nfunction readGeomStream(iter: GeometryStreamIterator): GeomStreamEntry[] & { viewIndependent: boolean } {\r\n const result: GeomStreamEntry[] = [];\r\n for (const entry of iter) {\r\n const symb: Symbology = { categoryId: entry.geomParams.categoryId, subCategoryId: entry.geomParams.subCategoryId };\r\n\r\n if (undefined !== entry.geomParams.lineColor)\r\n symb.color = entry.geomParams.lineColor;\r\n\r\n if (undefined !== entry.geomParams.materialId)\r\n symb.materialId = entry.geomParams.materialId;\r\n\r\n if (entry.geomParams.pattern) {\r\n expect(entry.geomParams.pattern.origin).not.to.be.undefined;\r\n symb.patternOrigin = entry.geomParams.pattern.origin!.x;\r\n }\r\n\r\n result.push(symb);\r\n\r\n if (entry.localRange) {\r\n expect(entry.localRange.low.y).to.equal(0);\r\n expect(entry.localRange.low.z).to.equal(0);\r\n expect(entry.localRange.high.y).to.equal(1);\r\n expect(entry.localRange.high.z).to.equal(0);\r\n expect(entry.localRange.high.x - entry.localRange.low.x).to.equal(1);\r\n\r\n result.push({ low: entry.localRange.low.x });\r\n }\r\n\r\n if (entry.primitive.type === \"geometryQuery\") {\r\n expect(entry.primitive.geometry.geometryCategory).to.equal(\"curveCollection\");\r\n if (entry.primitive.geometry.geometryCategory === \"curveCollection\") {\r\n expect(entry.primitive.geometry.children.length).to.equal(1);\r\n expect(entry.primitive.geometry.children[0]).instanceOf(LineString3d);\r\n\r\n const pts = (entry.primitive.geometry.children[0] as LineString3d).points;\r\n expect(pts.length).to.equal(5);\r\n expect(pts[1].x).to.equal(pts[0].x + 1);\r\n\r\n result.push({ pos: pts[0].x });\r\n }\r\n } else {\r\n expect(entry.primitive.type).to.equal(\"partReference\");\r\n if (entry.primitive.type === \"partReference\") {\r\n const partRef: PartRef = { partId: entry.primitive.part.id };\r\n if (entry.primitive.part.toLocal)\r\n partRef.origin = entry.primitive.part.toLocal.origin.x;\r\n\r\n result.push(partRef);\r\n }\r\n }\r\n }\r\n\r\n (result as any).viewIndependent = iter.isViewIndependent;\r\n return result as GeomStreamEntry[] & { viewIndependent: boolean };\r\n}\r\n\r\ndescribe(\"DgnDb.inlineGeometryPartReferences\", () => {\r\n let imodel: SnapshotDb;\r\n let modelId: string;\r\n let categoryId: string;\r\n let blueSubCategoryId: string;\r\n let redSubCategoryId: string;\r\n let materialId: string;\r\n\r\n beforeEach(() => {\r\n imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"InlineGeomParts\", `${Guid.createValue()}.bim`), {\r\n rootSubject: { name: \"InlineGeomParts\", description: \"InlineGeomParts\" },\r\n });\r\n\r\n GenericSchema.registerSchema();\r\n const partitionId = imodel.elements.insertElement({\r\n classFullName: PhysicalPartition.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsPartitionElements(IModel.rootSubjectId),\r\n code: PhysicalPartition.createCode(imodel, IModel.rootSubjectId, `PhysicalPartition_${Guid.createValue()}`),\r\n });\r\n\r\n expect(Id64.isValidId64(partitionId)).to.be.true;\r\n const model = imodel.models.createModel({\r\n classFullName: PhysicalModel.classFullName,\r\n modeledElement: { id: partitionId },\r\n });\r\n\r\n expect(model).instanceOf(PhysicalModel);\r\n\r\n modelId = imodel.models.insertModel(model.toJSON());\r\n expect(Id64.isValidId64(modelId)).to.be.true;\r\n\r\n categoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, \"ctgry\", { color: ColorDef.blue.toJSON() });\r\n expect(Id64.isValidId64(categoryId)).to.be.true;\r\n blueSubCategoryId = IModel.getDefaultSubCategoryId(categoryId);\r\n redSubCategoryId = SubCategory.insert(imodel, categoryId, \"red\", { color: ColorDef.red.toJSON() });\r\n expect(Id64.isValidId64(redSubCategoryId)).to.be.true;\r\n\r\n materialId = RenderMaterialElement.insert(imodel, IModel.dictionaryId, \"mat\", { paletteName: \"pal\" });\r\n expect(Id64.isValidId64(materialId)).to.be.true;\r\n });\r\n\r\n afterEach(() => {\r\n imodel.close();\r\n });\r\n\r\n function insertGeometryPart(geom: GeomWriterEntry[]): string {\r\n const writer = new GeomWriter();\r\n for (const entry of geom)\r\n writer.append(entry);\r\n\r\n const props: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: IModel.dictionaryId,\r\n code: GeometryPart.createCode(imodel, IModel.dictionaryId, Guid.createValue()),\r\n geom: writer.builder.geometryStream,\r\n };\r\n\r\n const partId = imodel.elements.insertElement(props);\r\n expect(Id64.isValidId64(partId)).to.be.true;\r\n return partId;\r\n }\r\n\r\n function insertElement(geom: GeomWriterEntry[], viewIndependent = false): string {\r\n const writer = new GeomWriter({ categoryId });\r\n if (viewIndependent)\r\n writer.builder.isViewIndependent = true;\r\n\r\n for (const entry of geom)\r\n writer.append(entry);\r\n\r\n const props: GeometricElement3dProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n category: categoryId,\r\n geom: writer.builder.geometryStream,\r\n placement: {\r\n origin: [0, 0, 0],\r\n angles: { },\r\n },\r\n };\r\n\r\n const elemId = imodel.elements.insertElement(props);\r\n expect(Id64.isValidId64(elemId)).to.be.true;\r\n return elemId;\r\n }\r\n\r\n function readElementGeom(id: string): GeomStreamEntry[] & { viewIndependent: boolean } {\r\n let iter;\r\n const elem = imodel.elements.getElement({ id, wantGeometry: true });\r\n if (elem instanceof GeometryPart) {\r\n iter = GeometryStreamIterator.fromGeometryPart(elem);\r\n } else {\r\n expect(elem).instanceOf(GeometricElement3d);\r\n iter = GeometryStreamIterator.fromGeometricElement3d(elem as GeometricElement3d);\r\n }\r\n\r\n return readGeomStream(iter);\r\n }\r\n\r\n function expectGeom(actual: GeomStreamEntry[], expected: GeomStreamEntry[]): void {\r\n expect(actual).to.deep.equal(expected);\r\n }\r\n\r\n function inlinePartRefs(): number {\r\n const result = imodel[_nativeDb].inlineGeometryPartReferences();\r\n expect(result.numCandidateParts).to.equal(result.numPartsDeleted);\r\n expect(result.numRefsInlined).to.equal(result.numCandidateParts);\r\n return result.numRefsInlined;\r\n }\r\n\r\n it(\"inlines and deletes a simple unique part reference\", () => {\r\n // Create single reference to a part and perform sanity checks on our geometry validation code.\r\n const partId = insertGeometryPart([{ pos: 123 }]);\r\n expectGeom(readElementGeom(partId), [\r\n { categoryId: \"0\", subCategoryId: \"0\" },\r\n { pos: 123 },\r\n ]);\r\n\r\n const elemId = insertElement([{ partId }]);\r\n expectGeom(readElementGeom(elemId), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { partId },\r\n ]);\r\n\r\n // Inline and delete the part.\r\n expect(inlinePartRefs()).to.equal(1);\r\n expect(imodel.elements.tryGetElement(partId)).to.be.undefined;\r\n\r\n const geom = readElementGeom(elemId);\r\n expect(geom.viewIndependent).to.be.false;\r\n expectGeom(geom, [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 123 },\r\n { pos: 123 },\r\n ]);\r\n });\r\n\r\n it(\"inlines and deletes unique parts, ignoring non-unique parts\", () => {\r\n const part1 = insertGeometryPart([{ pos: 1 }]);\r\n const part2 = insertGeometryPart([{ pos: 2 }]);\r\n const part3 = insertGeometryPart([{ pos: 3 }]);\r\n const part4 = insertGeometryPart([{ pos: 4 }]);\r\n\r\n const elem1 = insertElement([{ partId: part1 }]);\r\n const elem2 = insertElement([{ partId: part2 }, { partId: part3 }]);\r\n const elem3 = insertElement([{ partId: part3 }]);\r\n const elem4 = insertElement([{ partId: part4 }]);\r\n const elem5 = insertElement([{ partId: part4 }]);\r\n\r\n expect(inlinePartRefs()).to.equal(2);\r\n\r\n const symb = { categoryId, subCategoryId: blueSubCategoryId };\r\n expectGeom(readElementGeom(elem1), [symb, { low: 1 }, { pos: 1 }]);\r\n expectGeom(readElementGeom(elem2), [symb, { low: 2 }, { pos: 2 }, symb, { partId: part3 }]);\r\n expectGeom(readElementGeom(elem3), [symb, { partId: part3 }]);\r\n expectGeom(readElementGeom(elem4), [symb, { partId: part4 }]);\r\n expectGeom(readElementGeom(elem5), [symb, { partId: part4 }]);\r\n });\r\n\r\n it(\"applies part transform\", () => {\r\n const partId = insertGeometryPart([{ pos: -8 }]);\r\n const elemId = insertElement([{ partId, origin: 50 }]);\r\n expect(inlinePartRefs()).to.equal(1);\r\n expectGeom(readElementGeom(elemId), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 42 },\r\n { pos: 42 },\r\n ]);\r\n });\r\n\r\n it(\"applies element symbology to part and resets element symbology after embedding part\", () => {\r\n const part1 = insertGeometryPart([\r\n { pos: 1 },\r\n { color: ColorDef.green },\r\n { pos: 1.5},\r\n ]);\r\n\r\n const part2 = insertGeometryPart([\r\n { pos: 2 },\r\n { materialId },\r\n { pos: 2.5 },\r\n ]);\r\n\r\n // Sanity check.\r\n expectGeom(readElementGeom(part2), [\r\n { categoryId: \"0\", subCategoryId: \"0\" },\r\n { pos: 2 },\r\n { categoryId: \"0\", subCategoryId: \"0\", materialId },\r\n { pos: 2.5 },\r\n ]);\r\n\r\n const part3 = insertGeometryPart([\r\n { pos: 3 },\r\n { materialId: \"0\" },\r\n { pos: 3.5 },\r\n ]);\r\n\r\n const elemId = insertElement([\r\n { pos: -1 },\r\n { subCategoryId: redSubCategoryId },\r\n { partId: part1 },\r\n { pos: -2 },\r\n { color: ColorDef.black },\r\n { partId: part2 },\r\n { pos: -3 },\r\n { materialId, color: ColorDef.white },\r\n { partId: part3 },\r\n { pos: -4 },\r\n ]);\r\n\r\n expect(inlinePartRefs()).to.equal(3);\r\n\r\n expectGeom(readElementGeom(elemId), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: redSubCategoryId },\r\n { low: 1},\r\n { pos: 1 },\r\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.green },\r\n { low: 1.5 },\r\n { pos: 1.5 },\r\n { categoryId, subCategoryId: redSubCategoryId },\r\n { low: -2 },\r\n { pos: -2 },\r\n\r\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.black },\r\n { low: 2 },\r\n { pos: 2 },\r\n { categoryId, subCategoryId: redSubCategoryId, materialId },\r\n { low: 2.5 },\r\n { pos: 2.5 },\r\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.black },\r\n { low: -3 },\r\n { pos: -3 },\r\n\r\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.white, materialId },\r\n { low: 3 },\r\n { pos: 3 },\r\n { categoryId, subCategoryId: redSubCategoryId, materialId: \"0\" },\r\n { low: 3.5 },\r\n { pos: 3.5 },\r\n {categoryId, subCategoryId: redSubCategoryId, color: ColorDef.white, materialId },\r\n { low: -4 },\r\n { pos: -4 },\r\n ]);\r\n });\r\n\r\n it(\"inserts subgraphic ranges for parts\", () => {\r\n const part1 = insertGeometryPart([{ pos: 1 }]);\r\n const part2 = insertGeometryPart([{ pos: 2 }]);\r\n const elem = insertElement([\r\n { pos: -1 },\r\n { partId: part1 },\r\n { partId: part2, origin: 5 },\r\n ]);\r\n\r\n expect(inlinePartRefs()).to.equal(2);\r\n\r\n expectGeom(readElementGeom(elem), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 1 },\r\n { pos: 1 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 7 },\r\n { pos: 7 },\r\n ]);\r\n });\r\n\r\n it(\"preserves existing subgraphic ranges\", () => {\r\n const partId = insertGeometryPart([{ pos: 0 }]);\r\n const elem = insertElement([\r\n { appendSubRanges: true },\r\n { pos: -1 },\r\n { partId },\r\n { pos: 1 },\r\n ]);\r\n\r\n expectGeom(readElementGeom(elem), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: -1 },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { partId },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 1 },\r\n { pos: 1 },\r\n ]);\r\n\r\n expect(inlinePartRefs()).to.equal(1);\r\n\r\n expectGeom(readElementGeom(elem), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: -1 },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 0 },\r\n { pos: 0 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 1 },\r\n { pos: 1 },\r\n ]);\r\n });\r\n\r\n it(\"inserts subgraphic ranges geometry following part\", () => {\r\n const partId = insertGeometryPart([{ pos: 1 }]);\r\n const elem = insertElement([\r\n { pos: 0 },\r\n { partId },\r\n { pos: 2 },\r\n ]);\r\n\r\n expect(inlinePartRefs()).to.equal(1);\r\n\r\n expectGeom(readElementGeom(elem), [\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { pos: 0 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 1 },\r\n { pos: 1 },\r\n { categoryId, subCategoryId: blueSubCategoryId },\r\n { low: 2 },\r\n { pos: 2 },\r\n ]);\r\n });\r\n\r\n it(\"applies transform to patterns\", () => {\r\n const part1 = insertGeometryPart([{ pos: 1 }]);\r\n const part2 = insertGeometryPart([{ patternOrigin: 123 }, { pos: 2 }]);\r\n\r\n expectGeom(readElementGeom(part2), [\r\n { categoryId: \"0\", subCategoryId: \"0\", patternOrigin: 123 },\r\n { pos: 2 },\r\n ]);\r\n\r\n const elemId = insertElement([\r\n { patternOrigin: 456 },\r\n { pos: -1 },\r\n { partId: part1, origin: 8 },\r\n { pos: -2 },\r\n { partId: part2, origin: 12 },\r\n { pos: -3 },\r\n ]);\r\n\r\n expectGeom(readElementGeom(elemId), [\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { partId: part1, origin: 8 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { pos: -2 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { partId: part2, origin: 12 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { pos: -3 },\r\n ]);\r\n\r\n expect(inlinePartRefs()).to.equal(2);\r\n\r\n expectGeom(readElementGeom(elemId), [\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { pos: -1 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { low: 1 + 8 },\r\n { pos: 1 + 8 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { low: -2 },\r\n { pos: -2 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 123 + 12 },\r\n { low: 2 + 12 },\r\n { pos: 2 + 12 },\r\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\r\n { low: -3 },\r\n { pos: -3 },\r\n ]);\r\n });\r\n\r\n it(\"preserves element header flags\", () => {\r\n const partId = insertGeometryPart([{ pos: 1 }]);\r\n const elemId = insertElement([{ partId }], true);\r\n expect(readElementGeom(elemId).viewIndependent).to.be.true;\r\n\r\n expect(inlinePartRefs()).to.equal(1);\r\n expect(readElementGeom(elemId).viewIndependent).to.be.true;\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"InlineGeometryPartReferences.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/InlineGeometryPartReferences.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*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Guid, Id64 } from \"@itwin/core-bentley\";\nimport { LineString3d, Loop, Point3d } from \"@itwin/core-geometry\";\nimport {\n AreaPattern,\n Code, ColorDef, GeometricElement3dProps, GeometryParams, GeometryPartProps, GeometryStreamBuilder, GeometryStreamIterator, IModel,\n} from \"@itwin/core-common\";\nimport {\n _nativeDb, GenericSchema, GeometricElement3d, GeometryPart, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, SubjectOwnsPartitionElements,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\n// The only geometry in our geometry streams will be squares of 1 meter in x and y, with origin at (pos, 0, 0).\ninterface Primitive { pos: number }\n\ninterface PartRef {\n partId: string;\n origin?: number; // origin in X. y and z are zero.\n}\n\ninterface Symbology {\n categoryId?: string;\n subCategoryId?: string;\n color?: ColorDef;\n materialId?: string;\n patternOrigin?: number;\n}\n\nfunction makeGeomParams(symb: Symbology): GeometryParams {\n const params = new GeometryParams(symb.categoryId ?? Id64.invalid, symb.subCategoryId);\n params.lineColor = symb.color;\n params.materialId = symb.materialId;\n if (symb.patternOrigin)\n params.pattern = AreaPattern.Params.fromJSON({ origin: [symb.patternOrigin, 0, 0] });\n\n return params;\n}\n\ninterface AppendSubRanges { appendSubRanges: true }\n\ntype UnionMember<T, U> = T & { [k in keyof U]?: never };\n\ntype GeomWriterEntry =\n UnionMember<PartRef, Symbology & Primitive & AppendSubRanges> |\n UnionMember<Symbology, PartRef & Primitive & AppendSubRanges> |\n UnionMember<Primitive, PartRef & Symbology & AppendSubRanges> |\n UnionMember<AppendSubRanges, Symbology & Primitive & PartRef>;\n\nclass GeomWriter {\n public readonly builder: GeometryStreamBuilder;\n\n public constructor(symbology?: Symbology) {\n this.builder = new GeometryStreamBuilder();\n if (symbology)\n this.append(symbology);\n }\n\n public append(entry: GeomWriterEntry): void {\n if (entry.partId)\n this.builder.appendGeometryPart3d(entry.partId, new Point3d(entry.origin, 0, 0));\n else if (entry.subCategoryId || entry.categoryId || entry.color || entry.materialId || entry.patternOrigin)\n this.builder.appendGeometryParamsChange(makeGeomParams(entry));\n else if (undefined !== entry.pos)\n this.builder.appendGeometry(Loop.createPolygon([new Point3d(entry.pos, 0, 0), new Point3d(entry.pos + 1, 0, 0), new Point3d(entry.pos + 1, 1, 0), new Point3d(entry.pos, 1, 0)]));\n else if (undefined !== entry.appendSubRanges)\n this.builder.appendGeometryRanges();\n }\n}\n\n// SubGraphicRange where x dimension is 1 meter and y and z are empty.\ninterface SubRange { low: number }\n\ntype GeomStreamEntry =\n UnionMember<PartRef, Symbology & SubRange & Primitive> |\n UnionMember<Symbology, PartRef & SubRange & Primitive> |\n UnionMember<SubRange, PartRef & Symbology & Primitive> |\n UnionMember<Primitive, PartRef & Symbology & SubRange>;\n\nfunction readGeomStream(iter: GeometryStreamIterator): GeomStreamEntry[] & { viewIndependent: boolean } {\n const result: GeomStreamEntry[] = [];\n for (const entry of iter) {\n const symb: Symbology = { categoryId: entry.geomParams.categoryId, subCategoryId: entry.geomParams.subCategoryId };\n\n if (undefined !== entry.geomParams.lineColor)\n symb.color = entry.geomParams.lineColor;\n\n if (undefined !== entry.geomParams.materialId)\n symb.materialId = entry.geomParams.materialId;\n\n if (entry.geomParams.pattern) {\n expect(entry.geomParams.pattern.origin).not.to.be.undefined;\n symb.patternOrigin = entry.geomParams.pattern.origin!.x;\n }\n\n result.push(symb);\n\n if (entry.localRange) {\n expect(entry.localRange.low.y).to.equal(0);\n expect(entry.localRange.low.z).to.equal(0);\n expect(entry.localRange.high.y).to.equal(1);\n expect(entry.localRange.high.z).to.equal(0);\n expect(entry.localRange.high.x - entry.localRange.low.x).to.equal(1);\n\n result.push({ low: entry.localRange.low.x });\n }\n\n if (entry.primitive.type === \"geometryQuery\") {\n expect(entry.primitive.geometry.geometryCategory).to.equal(\"curveCollection\");\n if (entry.primitive.geometry.geometryCategory === \"curveCollection\") {\n expect(entry.primitive.geometry.children.length).to.equal(1);\n expect(entry.primitive.geometry.children[0]).instanceOf(LineString3d);\n\n const pts = (entry.primitive.geometry.children[0] as LineString3d).points;\n expect(pts.length).to.equal(5);\n expect(pts[1].x).to.equal(pts[0].x + 1);\n\n result.push({ pos: pts[0].x });\n }\n } else {\n expect(entry.primitive.type).to.equal(\"partReference\");\n if (entry.primitive.type === \"partReference\") {\n const partRef: PartRef = { partId: entry.primitive.part.id };\n if (entry.primitive.part.toLocal)\n partRef.origin = entry.primitive.part.toLocal.origin.x;\n\n result.push(partRef);\n }\n }\n }\n\n (result as any).viewIndependent = iter.isViewIndependent;\n return result as GeomStreamEntry[] & { viewIndependent: boolean };\n}\n\ndescribe(\"DgnDb.inlineGeometryPartReferences\", () => {\n let imodel: SnapshotDb;\n let modelId: string;\n let categoryId: string;\n let blueSubCategoryId: string;\n let redSubCategoryId: string;\n let materialId: string;\n\n beforeEach(() => {\n imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"InlineGeomParts\", `${Guid.createValue()}.bim`), {\n rootSubject: { name: \"InlineGeomParts\", description: \"InlineGeomParts\" },\n });\n\n GenericSchema.registerSchema();\n const partitionId = imodel.elements.insertElement({\n classFullName: PhysicalPartition.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsPartitionElements(IModel.rootSubjectId),\n code: PhysicalPartition.createCode(imodel, IModel.rootSubjectId, `PhysicalPartition_${Guid.createValue()}`),\n });\n\n expect(Id64.isValidId64(partitionId)).to.be.true;\n const model = imodel.models.createModel({\n classFullName: PhysicalModel.classFullName,\n modeledElement: { id: partitionId },\n });\n\n expect(model).instanceOf(PhysicalModel);\n\n modelId = imodel.models.insertModel(model.toJSON());\n expect(Id64.isValidId64(modelId)).to.be.true;\n\n categoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, \"ctgry\", { color: ColorDef.blue.toJSON() });\n expect(Id64.isValidId64(categoryId)).to.be.true;\n blueSubCategoryId = IModel.getDefaultSubCategoryId(categoryId);\n redSubCategoryId = SubCategory.insert(imodel, categoryId, \"red\", { color: ColorDef.red.toJSON() });\n expect(Id64.isValidId64(redSubCategoryId)).to.be.true;\n\n materialId = RenderMaterialElement.insert(imodel, IModel.dictionaryId, \"mat\", { paletteName: \"pal\" });\n expect(Id64.isValidId64(materialId)).to.be.true;\n });\n\n afterEach(() => {\n imodel.close();\n });\n\n function insertGeometryPart(geom: GeomWriterEntry[]): string {\n const writer = new GeomWriter();\n for (const entry of geom)\n writer.append(entry);\n\n const props: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: IModel.dictionaryId,\n code: GeometryPart.createCode(imodel, IModel.dictionaryId, Guid.createValue()),\n geom: writer.builder.geometryStream,\n };\n\n const partId = imodel.elements.insertElement(props);\n expect(Id64.isValidId64(partId)).to.be.true;\n return partId;\n }\n\n function insertElement(geom: GeomWriterEntry[], viewIndependent = false): string {\n const writer = new GeomWriter({ categoryId });\n if (viewIndependent)\n writer.builder.isViewIndependent = true;\n\n for (const entry of geom)\n writer.append(entry);\n\n const props: GeometricElement3dProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n code: Code.createEmpty(),\n category: categoryId,\n geom: writer.builder.geometryStream,\n placement: {\n origin: [0, 0, 0],\n angles: { },\n },\n };\n\n const elemId = imodel.elements.insertElement(props);\n expect(Id64.isValidId64(elemId)).to.be.true;\n return elemId;\n }\n\n function readElementGeom(id: string): GeomStreamEntry[] & { viewIndependent: boolean } {\n let iter;\n const elem = imodel.elements.getElement({ id, wantGeometry: true });\n if (elem instanceof GeometryPart) {\n iter = GeometryStreamIterator.fromGeometryPart(elem);\n } else {\n expect(elem).instanceOf(GeometricElement3d);\n iter = GeometryStreamIterator.fromGeometricElement3d(elem as GeometricElement3d);\n }\n\n return readGeomStream(iter);\n }\n\n function expectGeom(actual: GeomStreamEntry[], expected: GeomStreamEntry[]): void {\n expect(actual).to.deep.equal(expected);\n }\n\n function inlinePartRefs(): number {\n const result = imodel[_nativeDb].inlineGeometryPartReferences();\n expect(result.numCandidateParts).to.equal(result.numPartsDeleted);\n expect(result.numRefsInlined).to.equal(result.numCandidateParts);\n return result.numRefsInlined;\n }\n\n it(\"inlines and deletes a simple unique part reference\", () => {\n // Create single reference to a part and perform sanity checks on our geometry validation code.\n const partId = insertGeometryPart([{ pos: 123 }]);\n expectGeom(readElementGeom(partId), [\n { categoryId: \"0\", subCategoryId: \"0\" },\n { pos: 123 },\n ]);\n\n const elemId = insertElement([{ partId }]);\n expectGeom(readElementGeom(elemId), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { partId },\n ]);\n\n // Inline and delete the part.\n expect(inlinePartRefs()).to.equal(1);\n expect(imodel.elements.tryGetElement(partId)).to.be.undefined;\n\n const geom = readElementGeom(elemId);\n expect(geom.viewIndependent).to.be.false;\n expectGeom(geom, [\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 123 },\n { pos: 123 },\n ]);\n });\n\n it(\"inlines and deletes unique parts, ignoring non-unique parts\", () => {\n const part1 = insertGeometryPart([{ pos: 1 }]);\n const part2 = insertGeometryPart([{ pos: 2 }]);\n const part3 = insertGeometryPart([{ pos: 3 }]);\n const part4 = insertGeometryPart([{ pos: 4 }]);\n\n const elem1 = insertElement([{ partId: part1 }]);\n const elem2 = insertElement([{ partId: part2 }, { partId: part3 }]);\n const elem3 = insertElement([{ partId: part3 }]);\n const elem4 = insertElement([{ partId: part4 }]);\n const elem5 = insertElement([{ partId: part4 }]);\n\n expect(inlinePartRefs()).to.equal(2);\n\n const symb = { categoryId, subCategoryId: blueSubCategoryId };\n expectGeom(readElementGeom(elem1), [symb, { low: 1 }, { pos: 1 }]);\n expectGeom(readElementGeom(elem2), [symb, { low: 2 }, { pos: 2 }, symb, { partId: part3 }]);\n expectGeom(readElementGeom(elem3), [symb, { partId: part3 }]);\n expectGeom(readElementGeom(elem4), [symb, { partId: part4 }]);\n expectGeom(readElementGeom(elem5), [symb, { partId: part4 }]);\n });\n\n it(\"applies part transform\", () => {\n const partId = insertGeometryPart([{ pos: -8 }]);\n const elemId = insertElement([{ partId, origin: 50 }]);\n expect(inlinePartRefs()).to.equal(1);\n expectGeom(readElementGeom(elemId), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 42 },\n { pos: 42 },\n ]);\n });\n\n it(\"applies element symbology to part and resets element symbology after embedding part\", () => {\n const part1 = insertGeometryPart([\n { pos: 1 },\n { color: ColorDef.green },\n { pos: 1.5},\n ]);\n\n const part2 = insertGeometryPart([\n { pos: 2 },\n { materialId },\n { pos: 2.5 },\n ]);\n\n // Sanity check.\n expectGeom(readElementGeom(part2), [\n { categoryId: \"0\", subCategoryId: \"0\" },\n { pos: 2 },\n { categoryId: \"0\", subCategoryId: \"0\", materialId },\n { pos: 2.5 },\n ]);\n\n const part3 = insertGeometryPart([\n { pos: 3 },\n { materialId: \"0\" },\n { pos: 3.5 },\n ]);\n\n const elemId = insertElement([\n { pos: -1 },\n { subCategoryId: redSubCategoryId },\n { partId: part1 },\n { pos: -2 },\n { color: ColorDef.black },\n { partId: part2 },\n { pos: -3 },\n { materialId, color: ColorDef.white },\n { partId: part3 },\n { pos: -4 },\n ]);\n\n expect(inlinePartRefs()).to.equal(3);\n\n expectGeom(readElementGeom(elemId), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { pos: -1 },\n { categoryId, subCategoryId: redSubCategoryId },\n { low: 1},\n { pos: 1 },\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.green },\n { low: 1.5 },\n { pos: 1.5 },\n { categoryId, subCategoryId: redSubCategoryId },\n { low: -2 },\n { pos: -2 },\n\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.black },\n { low: 2 },\n { pos: 2 },\n { categoryId, subCategoryId: redSubCategoryId, materialId },\n { low: 2.5 },\n { pos: 2.5 },\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.black },\n { low: -3 },\n { pos: -3 },\n\n { categoryId, subCategoryId: redSubCategoryId, color: ColorDef.white, materialId },\n { low: 3 },\n { pos: 3 },\n { categoryId, subCategoryId: redSubCategoryId, materialId: \"0\" },\n { low: 3.5 },\n { pos: 3.5 },\n {categoryId, subCategoryId: redSubCategoryId, color: ColorDef.white, materialId },\n { low: -4 },\n { pos: -4 },\n ]);\n });\n\n it(\"inserts subgraphic ranges for parts\", () => {\n const part1 = insertGeometryPart([{ pos: 1 }]);\n const part2 = insertGeometryPart([{ pos: 2 }]);\n const elem = insertElement([\n { pos: -1 },\n { partId: part1 },\n { partId: part2, origin: 5 },\n ]);\n\n expect(inlinePartRefs()).to.equal(2);\n\n expectGeom(readElementGeom(elem), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { pos: -1 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 1 },\n { pos: 1 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 7 },\n { pos: 7 },\n ]);\n });\n\n it(\"preserves existing subgraphic ranges\", () => {\n const partId = insertGeometryPart([{ pos: 0 }]);\n const elem = insertElement([\n { appendSubRanges: true },\n { pos: -1 },\n { partId },\n { pos: 1 },\n ]);\n\n expectGeom(readElementGeom(elem), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: -1 },\n { pos: -1 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { partId },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 1 },\n { pos: 1 },\n ]);\n\n expect(inlinePartRefs()).to.equal(1);\n\n expectGeom(readElementGeom(elem), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: -1 },\n { pos: -1 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 0 },\n { pos: 0 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 1 },\n { pos: 1 },\n ]);\n });\n\n it(\"inserts subgraphic ranges geometry following part\", () => {\n const partId = insertGeometryPart([{ pos: 1 }]);\n const elem = insertElement([\n { pos: 0 },\n { partId },\n { pos: 2 },\n ]);\n\n expect(inlinePartRefs()).to.equal(1);\n\n expectGeom(readElementGeom(elem), [\n { categoryId, subCategoryId: blueSubCategoryId },\n { pos: 0 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 1 },\n { pos: 1 },\n { categoryId, subCategoryId: blueSubCategoryId },\n { low: 2 },\n { pos: 2 },\n ]);\n });\n\n it(\"applies transform to patterns\", () => {\n const part1 = insertGeometryPart([{ pos: 1 }]);\n const part2 = insertGeometryPart([{ patternOrigin: 123 }, { pos: 2 }]);\n\n expectGeom(readElementGeom(part2), [\n { categoryId: \"0\", subCategoryId: \"0\", patternOrigin: 123 },\n { pos: 2 },\n ]);\n\n const elemId = insertElement([\n { patternOrigin: 456 },\n { pos: -1 },\n { partId: part1, origin: 8 },\n { pos: -2 },\n { partId: part2, origin: 12 },\n { pos: -3 },\n ]);\n\n expectGeom(readElementGeom(elemId), [\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { pos: -1 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { partId: part1, origin: 8 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { pos: -2 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { partId: part2, origin: 12 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { pos: -3 },\n ]);\n\n expect(inlinePartRefs()).to.equal(2);\n\n expectGeom(readElementGeom(elemId), [\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { pos: -1 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { low: 1 + 8 },\n { pos: 1 + 8 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { low: -2 },\n { pos: -2 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 123 + 12 },\n { low: 2 + 12 },\n { pos: 2 + 12 },\n { categoryId, subCategoryId: blueSubCategoryId, patternOrigin: 456 },\n { low: -3 },\n { pos: -3 },\n ]);\n });\n\n it(\"preserves element header flags\", () => {\n const partId = insertGeometryPart([{ pos: 1 }]);\n const elemId = insertElement([{ partId }], true);\n expect(readElementGeom(elemId).viewIndependent).to.be.true;\n\n expect(inlinePartRefs()).to.equal(1);\n expect(readElementGeom(elemId).viewIndependent).to.be.true;\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrityCheck.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/IntegrityCheck.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { assert, expect } from \"chai\";\r\nimport * as sinon from \"sinon\";\r\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\r\nimport { getIntegrityCheckName, performQuickIntegrityCheck, performSpecificIntegrityCheck, QuickIntegrityCheckResultRow } from \"../../internal/IntegrityCheck\";\r\nimport { DbResult, GuidString, Id64 } from \"@itwin/core-bentley\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { HubWrappers } from \"../IModelTestUtils\";\r\nimport { IModel, IModelError } from \"@itwin/core-common\";\r\nimport { _nativeDb, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\r\n\r\ndescribe(\"Integrity Check Tests\", () => {\r\nlet iModelStub: sinon.SinonStubbedInstance<IModelDb>;\r\n\r\n beforeEach(() => {\r\n iModelStub = sinon.createStubInstance(IModelDb);\r\n });\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n describe(\"getIntegrityCheckName\", () => {\r\n it(\"should return the correct name for a valid check type\", () => {\r\n expect(getIntegrityCheckName(\"checkDataColumns\")).to.equal(\"Check Data Columns\");\r\n expect(getIntegrityCheckName(\"checkECProfile\")).to.equal(\"Check EC Profile\");\r\n expect(getIntegrityCheckName(\"checkNavigationClassIds\")).to.equal(\"Check Navigation Class Ids\");\r\n expect(getIntegrityCheckName(\"checkNavigationIds\")).to.equal(\"Check Navigation Ids\");\r\n expect(getIntegrityCheckName(\"checkLinktableForeignKeyClassIds\")).to.equal(\"Check Link Table Foreign Key Class Ids\");\r\n expect(getIntegrityCheckName(\"checkLinktableForeignKeyIds\")).to.equal(\"Check Link Table Foreign Key Ids\");\r\n expect(getIntegrityCheckName(\"checkClassIds\")).to.equal(\"Check Class Ids\");\r\n expect(getIntegrityCheckName(\"checkDataSchema\")).to.equal(\"Check Data Schema\");\r\n expect(getIntegrityCheckName(\"checkSchemaLoad\")).to.equal(\"Check Schema Load\");\r\n expect(getIntegrityCheckName(\"checkMissingChildRows\")).to.equal(\"Check Missing Child Rows\");\r\n });\r\n\r\n it(\"should return the correct name when sqlCommand string is passed\", () => {\r\n expect(getIntegrityCheckName(\"check_data_columns\")).to.equal(\"Check Data Columns\");\r\n expect(getIntegrityCheckName(\"check_ec_profile\")).to.equal(\"Check EC Profile\");\r\n expect(getIntegrityCheckName(\"check_nav_class_ids\")).to.equal(\"Check Navigation Class Ids\");\r\n expect(getIntegrityCheckName(\"check_nav_ids\")).to.equal(\"Check Navigation Ids\");\r\n expect(getIntegrityCheckName(\"check_linktable_fk_class_ids\")).to.equal(\"Check Link Table Foreign Key Class Ids\");\r\n expect(getIntegrityCheckName(\"check_linktable_fk_ids\")).to.equal(\"Check Link Table Foreign Key Ids\");\r\n expect(getIntegrityCheckName(\"check_class_ids\")).to.equal(\"Check Class Ids\");\r\n expect(getIntegrityCheckName(\"check_data_schema\")).to.equal(\"Check Data Schema\");\r\n expect(getIntegrityCheckName(\"check_schema_load\")).to.equal(\"Check Schema Load\");\r\n expect(getIntegrityCheckName(\"check_missing_child_rows\")).to.equal(\"Check Missing Child Rows\");\r\n });\r\n\r\n it(\"should return the input string if check type is not found\", () => {\r\n expect(getIntegrityCheckName(\"unknownCheck\")).to.equal(\"unknownCheck\");\r\n });\r\n });\r\n\r\n describe(\"performQuickIntegrityCheck\", () => {\r\n it(\"should return quick integrity check results\", async () => {\r\n const mockResults = [\r\n { check: \"check_data_columns\", result: true, elapsed_sec: \"0.5\" },\r\n { check: \"check_ec_profile\", result: false, elapsed_sec: \"0.3\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performQuickIntegrityCheck(iModelStub as any);\r\n\r\n expect(results).to.have.lengthOf(2);\r\n expect(results[0]).to.deep.include({ check: \"Check Data Columns\", passed: true, elapsedSeconds: \"0.5\" });\r\n expect(results[1]).to.deep.include({ check: \"Check EC Profile\", passed: false, elapsedSeconds: \"0.3\" });\r\n });\r\n\r\n it(\"should handle empty results\", async () => {\r\n const asyncIterator = async function* () {};\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performQuickIntegrityCheck(iModelStub as any);\r\n\r\n expect(results).to.be.an(\"array\").that.is.empty;\r\n });\r\n });\r\n\r\n describe(\"performSpecificIntegrityCheck\", () => {\r\n it(\"should return CheckDataColumnsResultRow for checkDataColumns\", async () => {\r\n const mockResults = [\r\n { sno: 1, table: \"ElementProps\", column: \"testColumn\" },\r\n { sno: 2, table: \"ElementTable\", column: \"missingColumn\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkDataColumns\");\r\n\r\n expect(results).to.have.lengthOf(2);\r\n expect(results[0]).to.deep.equal({ sno: 1, table: \"ElementProps\", column: \"testColumn\" });\r\n expect(results[1]).to.deep.equal({ sno: 2, table: \"ElementTable\", column: \"missingColumn\" });\r\n });\r\n\r\n it(\"should return CheckECProfileResultRow for checkECProfile\", async () => {\r\n const mockResults = [\r\n { sno: 1, type: \"Schema\", name: \"BisCore\", issue: \"Invalid schema definition\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkECProfile\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, type: \"Schema\", name: \"BisCore\", issue: \"Invalid schema definition\" });\r\n });\r\n\r\n it(\"should return CheckNavClassIdsResultRow for checkNavigationClassIds\", async () => {\r\n const mockResults = [\r\n { sno: 1, id: \"1\", class: \"Element\", property: \"parent\", nav_id: \"2\", nav_classId: \"3\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkNavigationClassIds\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", class: \"Element\", property: \"parent\", navId: \"2\", navClassId: \"3\" });\r\n });\r\n\r\n it(\"should return CheckNavIdsResultRow for checkNavigationIds\", async () => {\r\n const mockResults = [\r\n { sno: 1, id: \"1\", class: \"Element\", property: \"parent\", nav_id: \"2\", primary_class: \"Element\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkNavigationIds\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", class: \"Element\", property: \"parent\", navId: \"2\", primaryClass: \"Element\" });\r\n });\r\n\r\n it(\"should return CheckLinkTableFkClassIdsResultRow for checkLinktableForeignKeyClassIds\", async () => {\r\n const mockResults = [\r\n { sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", key_id: \"2\", key_classId: \"3\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkLinktableForeignKeyClassIds\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", keyId: \"2\", keyClassId: \"3\" });\r\n });\r\n\r\n it(\"should return CheckLinkTableFkIdsResultRow for checkLinktableForeignKeyIds\", async () => {\r\n const mockResults = [\r\n { sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", key_id: \"2\", primary_class: \"Element\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkLinktableForeignKeyIds\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", keyId: \"2\", primaryClass: \"Element\" });\r\n });\r\n\r\n it(\"should return CheckClassIdsResultRow for checkClassIds\", async () => {\r\n const mockResults = [\r\n { sno: 1, class: \"Element\", id: \"1\", class_id: \"2\", type: \"Element\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkClassIds\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, class: \"Element\", id: \"1\", classId: \"2\", type: \"Element\" });\r\n });\r\n\r\n it(\"should return CheckDataSchemaResultRow for checkDataSchema\", async () => {\r\n const mockResults = [\r\n { sno: 1, type: \"Schema\", name: \"BisCore\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkDataSchema\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, type: \"Schema\", name: \"BisCore\" });\r\n });\r\n\r\n it(\"should return CheckSchemaLoadResultRow for checkSchemaLoad\", async () => {\r\n const mockResults = [\r\n { sno: 1, schema: \"BisCore\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkSchemaLoad\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, schema: \"BisCore\" });\r\n });\r\n\r\n it(\"should return CheckMissingChildRowsResultRow for checkMissingChildRows\", async () => {\r\n const mockResults = [\r\n { sno: 1, class: \"Element\", id: \"1\", class_id: \"2\", MissingRowInTables: \"ElementTable\" },\r\n ];\r\n\r\n const asyncIterator = async function* () {\r\n for (const result of mockResults) {\r\n yield result;\r\n }\r\n };\r\n\r\n iModelStub.createQueryReader.returns(asyncIterator() as any);\r\n\r\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkMissingChildRows\");\r\n\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.deep.equal({ sno: 1, class: \"Element\", id: \"1\", classId: \"2\", missingRowInTables: \"ElementTable\" });\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"iModelDb integrityCheck Tests\", () => {\r\n let iTwinId: GuidString;\r\n let iModel: BriefcaseDb;\r\n\r\n before(() => {\r\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n\r\n after(() => HubMock.shutdown());\r\n\r\n beforeEach(async () => {\r\n // Create new iModel\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"PRAGMA_test\";\r\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(iModelId);\r\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\r\n });\r\n\r\n afterEach(() => {\r\n // Cleanup\r\n iModel.close();\r\n });\r\n\r\n it(\"should call integrityCheck on a new iModel and return no errors\", async () => {\r\n const results = await iModel.integrityCheck();\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\r\n expect(results[0]).to.have.property(\"passed\").that.equals(true);\r\n expect(results[0]).to.have.property(\"results\").that.is.an(\"array\");\r\n expect(results[0].results.length).to.equal(9);\r\n assert(results[0].results.every((row) => (row as QuickIntegrityCheckResultRow).passed === true), \"All specific checks should pass\");\r\n });\r\n\r\n it(\"should call integrityCheck with no options selected and default to quick check\", async () => {\r\n const results = await iModel.integrityCheck({});\r\n expect(results).to.have.lengthOf(1);\r\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\r\n expect(results[0]).to.have.property(\"passed\").that.equals(true);\r\n expect(results[0].results.length).to.equal(9);\r\n\r\n const results2 = await iModel.integrityCheck({ quickCheck: false });\r\n expect(results2).to.have.lengthOf(1);\r\n expect(results2[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\r\n expect(results2[0]).to.have.property(\"passed\").that.equals(true);\r\n expect(results2[0].results.length).to.equal(9);\r\n\r\n const results3 = await iModel.integrityCheck({\r\n quickCheck: false,\r\n specificChecks: {\r\n checkDataColumns: false,\r\n checkECProfile: false,\r\n checkNavigationClassIds: false,\r\n checkNavigationIds: false,\r\n checkLinktableForeignKeyClassIds: false,\r\n checkLinktableForeignKeyIds: false,\r\n checkClassIds: false,\r\n checkDataSchema: false,\r\n checkSchemaLoad: false,\r\n checkMissingChildRows: false,\r\n }});\r\n expect(results3).to.have.lengthOf(1);\r\n expect(results3[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\r\n expect(results3[0]).to.have.property(\"passed\").that.equals(true);\r\n expect(results3[0].results.length).to.equal(9);\r\n });\r\n\r\n it(\"should throw an error when iModel is closed\", async () => {\r\n iModel.close();\r\n\r\n try {\r\n await iModel.integrityCheck();\r\n assert.fail(\"Expected error was not thrown\");\r\n } catch (error) {\r\n expect((error as IModelError).message).to.include(\"IModel is not open\");\r\n }\r\n });\r\n\r\n it(\"should call integrityCheck on a new iModel and run all specific integrity checks and return no errors\", async () => {\r\n const results = await iModel.integrityCheck({\r\n specificChecks: {\r\n checkDataColumns: true,\r\n checkECProfile: true,\r\n checkNavigationClassIds: true,\r\n checkNavigationIds: true,\r\n checkLinktableForeignKeyClassIds: true,\r\n checkLinktableForeignKeyIds: true,\r\n checkClassIds: true,\r\n checkDataSchema: true,\r\n checkSchemaLoad: true,\r\n checkMissingChildRows: true,\r\n },\r\n });\r\n expect(results).to.be.an(\"array\");\r\n expect(results).to.have.lengthOf(10);\r\n\r\n // Verify each check is present and has the expected structure\r\n const checkNames = results.map((r) => r.check);\r\n expect(checkNames).to.include.members([\r\n \"Check Data Columns\",\r\n \"Check EC Profile\",\r\n \"Check Navigation Class Ids\",\r\n \"Check Navigation Ids\",\r\n \"Check Link Table Foreign Key Class Ids\",\r\n \"Check Link Table Foreign Key Ids\",\r\n \"Check Class Ids\",\r\n \"Check Data Schema\",\r\n \"Check Schema Load\",\r\n \"Check Missing Child Rows\",\r\n ]);\r\n\r\n // All checks should pass\r\n results.forEach((result) => {\r\n expect(result.passed).to.equal(true, `${result.check} should pass`);\r\n expect(result.results).to.be.empty;\r\n });\r\n });\r\n\r\n it(\"should call integrityCheck on an iModel with corrupt foreignKey Ids and return results\", async () => {\r\n // Insert two elements\r\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n\r\n const element1Id = iModel.elements.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\r\n });\r\n\r\n const element2Id = iModel.elements.insertElement({\r\n classFullName: Subject.classFullName,\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\r\n });\r\n iModel.saveChanges();\r\n\r\n // Create a relationship between them\r\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\r\n const relationship = iModel.relationships.createInstance({\r\n classFullName: \"BisCore:SubjectRefersToSubject\",\r\n sourceId: element1Id,\r\n targetId: element2Id,\r\n });\r\n const relationshipId = iModel.relationships.insertInstance(relationship.toJSON());\r\n assert.isTrue(Id64.isValidId64(relationshipId));\r\n iModel.saveChanges();\r\n\r\n // Delete one element without deleting the relationship to corrupt the iModel\r\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\r\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\r\n iModel.saveChanges();\r\n\r\n // Run integrity check specifically for linktable foreign key Ids\r\n const results = await iModel.integrityCheck({\r\n quickCheck: true,\r\n specificChecks: {\r\n checkLinktableForeignKeyClassIds: true,\r\n checkLinktableForeignKeyIds: true,\r\n },\r\n });\r\n\r\n // Verify that the checkLinktableForeignKeyIds check reports the corruption\r\n expect(results).to.have.lengthOf(3);\r\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\r\n expect(results[0]).to.have.property(\"passed\").that.equals(false);\r\n expect(results[0]).to.have.property(\"results\").that.is.an(\"array\");\r\n expect(results[0].results.length).to.equal(9);\r\n assert(results[0].results.findIndex((row) => (row as QuickIntegrityCheckResultRow).passed === false) !== -1, \"Quickcheck should report failed specific check\");\r\n expect(results[1]).to.have.property(\"passed\").that.equals(true);\r\n expect(results[1]).to.have.property(\"results\").that.is.an(\"array\").that.is.empty;\r\n expect(results[2]).to.have.property(\"passed\").that.equals(false);\r\n expect(results[2].results).to.have.lengthOf(1);\r\n expect(results[2].results[0]).to.deep.include({\r\n sno: 1,\r\n id: \"0x20000000001\",\r\n relationship: \"BisCore:ElementRefersToElements\",\r\n property: \"TargetECInstanceId\",\r\n keyId: \"0x20000000002\",\r\n primaryClass: \"BisCore:Element\",\r\n });\r\n });\r\n\r\n});"]}
1
+ {"version":3,"file":"IntegrityCheck.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/IntegrityCheck.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { assert, expect } from \"chai\";\nimport * as sinon from \"sinon\";\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\nimport { getIntegrityCheckName, performQuickIntegrityCheck, performSpecificIntegrityCheck, QuickIntegrityCheckResultRow } from \"../../internal/IntegrityCheck\";\nimport { DbResult, GuidString, Id64 } from \"@itwin/core-bentley\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { HubWrappers } from \"../IModelTestUtils\";\nimport { IModel, IModelError } from \"@itwin/core-common\";\nimport { _nativeDb, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\n\ndescribe(\"Integrity Check Tests\", () => {\nlet iModelStub: sinon.SinonStubbedInstance<IModelDb>;\n\n beforeEach(() => {\n iModelStub = sinon.createStubInstance(IModelDb);\n });\n\n afterEach(() => {\n sinon.restore();\n });\n\n describe(\"getIntegrityCheckName\", () => {\n it(\"should return the correct name for a valid check type\", () => {\n expect(getIntegrityCheckName(\"checkDataColumns\")).to.equal(\"Check Data Columns\");\n expect(getIntegrityCheckName(\"checkECProfile\")).to.equal(\"Check EC Profile\");\n expect(getIntegrityCheckName(\"checkNavigationClassIds\")).to.equal(\"Check Navigation Class Ids\");\n expect(getIntegrityCheckName(\"checkNavigationIds\")).to.equal(\"Check Navigation Ids\");\n expect(getIntegrityCheckName(\"checkLinktableForeignKeyClassIds\")).to.equal(\"Check Link Table Foreign Key Class Ids\");\n expect(getIntegrityCheckName(\"checkLinktableForeignKeyIds\")).to.equal(\"Check Link Table Foreign Key Ids\");\n expect(getIntegrityCheckName(\"checkClassIds\")).to.equal(\"Check Class Ids\");\n expect(getIntegrityCheckName(\"checkDataSchema\")).to.equal(\"Check Data Schema\");\n expect(getIntegrityCheckName(\"checkSchemaLoad\")).to.equal(\"Check Schema Load\");\n expect(getIntegrityCheckName(\"checkMissingChildRows\")).to.equal(\"Check Missing Child Rows\");\n });\n\n it(\"should return the correct name when sqlCommand string is passed\", () => {\n expect(getIntegrityCheckName(\"check_data_columns\")).to.equal(\"Check Data Columns\");\n expect(getIntegrityCheckName(\"check_ec_profile\")).to.equal(\"Check EC Profile\");\n expect(getIntegrityCheckName(\"check_nav_class_ids\")).to.equal(\"Check Navigation Class Ids\");\n expect(getIntegrityCheckName(\"check_nav_ids\")).to.equal(\"Check Navigation Ids\");\n expect(getIntegrityCheckName(\"check_linktable_fk_class_ids\")).to.equal(\"Check Link Table Foreign Key Class Ids\");\n expect(getIntegrityCheckName(\"check_linktable_fk_ids\")).to.equal(\"Check Link Table Foreign Key Ids\");\n expect(getIntegrityCheckName(\"check_class_ids\")).to.equal(\"Check Class Ids\");\n expect(getIntegrityCheckName(\"check_data_schema\")).to.equal(\"Check Data Schema\");\n expect(getIntegrityCheckName(\"check_schema_load\")).to.equal(\"Check Schema Load\");\n expect(getIntegrityCheckName(\"check_missing_child_rows\")).to.equal(\"Check Missing Child Rows\");\n });\n\n it(\"should return the input string if check type is not found\", () => {\n expect(getIntegrityCheckName(\"unknownCheck\")).to.equal(\"unknownCheck\");\n });\n });\n\n describe(\"performQuickIntegrityCheck\", () => {\n it(\"should return quick integrity check results\", async () => {\n const mockResults = [\n { check: \"check_data_columns\", result: true, elapsed_sec: \"0.5\" },\n { check: \"check_ec_profile\", result: false, elapsed_sec: \"0.3\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performQuickIntegrityCheck(iModelStub as any);\n\n expect(results).to.have.lengthOf(2);\n expect(results[0]).to.deep.include({ check: \"Check Data Columns\", passed: true, elapsedSeconds: \"0.5\" });\n expect(results[1]).to.deep.include({ check: \"Check EC Profile\", passed: false, elapsedSeconds: \"0.3\" });\n });\n\n it(\"should handle empty results\", async () => {\n const asyncIterator = async function* () {};\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performQuickIntegrityCheck(iModelStub as any);\n\n expect(results).to.be.an(\"array\").that.is.empty;\n });\n });\n\n describe(\"performSpecificIntegrityCheck\", () => {\n it(\"should return CheckDataColumnsResultRow for checkDataColumns\", async () => {\n const mockResults = [\n { sno: 1, table: \"ElementProps\", column: \"testColumn\" },\n { sno: 2, table: \"ElementTable\", column: \"missingColumn\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkDataColumns\");\n\n expect(results).to.have.lengthOf(2);\n expect(results[0]).to.deep.equal({ sno: 1, table: \"ElementProps\", column: \"testColumn\" });\n expect(results[1]).to.deep.equal({ sno: 2, table: \"ElementTable\", column: \"missingColumn\" });\n });\n\n it(\"should return CheckECProfileResultRow for checkECProfile\", async () => {\n const mockResults = [\n { sno: 1, type: \"Schema\", name: \"BisCore\", issue: \"Invalid schema definition\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkECProfile\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, type: \"Schema\", name: \"BisCore\", issue: \"Invalid schema definition\" });\n });\n\n it(\"should return CheckNavClassIdsResultRow for checkNavigationClassIds\", async () => {\n const mockResults = [\n { sno: 1, id: \"1\", class: \"Element\", property: \"parent\", nav_id: \"2\", nav_classId: \"3\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkNavigationClassIds\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", class: \"Element\", property: \"parent\", navId: \"2\", navClassId: \"3\" });\n });\n\n it(\"should return CheckNavIdsResultRow for checkNavigationIds\", async () => {\n const mockResults = [\n { sno: 1, id: \"1\", class: \"Element\", property: \"parent\", nav_id: \"2\", primary_class: \"Element\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkNavigationIds\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", class: \"Element\", property: \"parent\", navId: \"2\", primaryClass: \"Element\" });\n });\n\n it(\"should return CheckLinkTableFkClassIdsResultRow for checkLinktableForeignKeyClassIds\", async () => {\n const mockResults = [\n { sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", key_id: \"2\", key_classId: \"3\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkLinktableForeignKeyClassIds\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", keyId: \"2\", keyClassId: \"3\" });\n });\n\n it(\"should return CheckLinkTableFkIdsResultRow for checkLinktableForeignKeyIds\", async () => {\n const mockResults = [\n { sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", key_id: \"2\", primary_class: \"Element\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkLinktableForeignKeyIds\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, id: \"1\", relationship: \"ElementOwnsChildElements\", property: \"parent\", keyId: \"2\", primaryClass: \"Element\" });\n });\n\n it(\"should return CheckClassIdsResultRow for checkClassIds\", async () => {\n const mockResults = [\n { sno: 1, class: \"Element\", id: \"1\", class_id: \"2\", type: \"Element\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkClassIds\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, class: \"Element\", id: \"1\", classId: \"2\", type: \"Element\" });\n });\n\n it(\"should return CheckDataSchemaResultRow for checkDataSchema\", async () => {\n const mockResults = [\n { sno: 1, type: \"Schema\", name: \"BisCore\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkDataSchema\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, type: \"Schema\", name: \"BisCore\" });\n });\n\n it(\"should return CheckSchemaLoadResultRow for checkSchemaLoad\", async () => {\n const mockResults = [\n { sno: 1, schema: \"BisCore\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkSchemaLoad\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, schema: \"BisCore\" });\n });\n\n it(\"should return CheckMissingChildRowsResultRow for checkMissingChildRows\", async () => {\n const mockResults = [\n { sno: 1, class: \"Element\", id: \"1\", class_id: \"2\", MissingRowInTables: \"ElementTable\" },\n ];\n\n const asyncIterator = async function* () {\n for (const result of mockResults) {\n yield result;\n }\n };\n\n iModelStub.createQueryReader.returns(asyncIterator() as any);\n\n const results = await performSpecificIntegrityCheck(iModelStub as any, \"checkMissingChildRows\");\n\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.deep.equal({ sno: 1, class: \"Element\", id: \"1\", classId: \"2\", missingRowInTables: \"ElementTable\" });\n });\n });\n});\n\ndescribe(\"iModelDb integrityCheck Tests\", () => {\n let iTwinId: GuidString;\n let iModel: BriefcaseDb;\n\n before(() => {\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n\n after(() => HubMock.shutdown());\n\n beforeEach(async () => {\n // Create new iModel\n const adminToken = \"super manager token\";\n const iModelName = \"PRAGMA_test\";\n const iModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\n assert.isNotEmpty(iModelId);\n iModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId, accessToken: adminToken });\n });\n\n afterEach(() => {\n // Cleanup\n iModel.close();\n });\n\n it(\"should call integrityCheck on a new iModel and return no errors\", async () => {\n const results = await iModel.integrityCheck();\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\n expect(results[0]).to.have.property(\"passed\").that.equals(true);\n expect(results[0]).to.have.property(\"results\").that.is.an(\"array\");\n expect(results[0].results.length).to.equal(9);\n assert(results[0].results.every((row) => (row as QuickIntegrityCheckResultRow).passed === true), \"All specific checks should pass\");\n });\n\n it(\"should call integrityCheck with no options selected and default to quick check\", async () => {\n const results = await iModel.integrityCheck({});\n expect(results).to.have.lengthOf(1);\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\n expect(results[0]).to.have.property(\"passed\").that.equals(true);\n expect(results[0].results.length).to.equal(9);\n\n const results2 = await iModel.integrityCheck({ quickCheck: false });\n expect(results2).to.have.lengthOf(1);\n expect(results2[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\n expect(results2[0]).to.have.property(\"passed\").that.equals(true);\n expect(results2[0].results.length).to.equal(9);\n\n const results3 = await iModel.integrityCheck({\n quickCheck: false,\n specificChecks: {\n checkDataColumns: false,\n checkECProfile: false,\n checkNavigationClassIds: false,\n checkNavigationIds: false,\n checkLinktableForeignKeyClassIds: false,\n checkLinktableForeignKeyIds: false,\n checkClassIds: false,\n checkDataSchema: false,\n checkSchemaLoad: false,\n checkMissingChildRows: false,\n }});\n expect(results3).to.have.lengthOf(1);\n expect(results3[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\n expect(results3[0]).to.have.property(\"passed\").that.equals(true);\n expect(results3[0].results.length).to.equal(9);\n });\n\n it(\"should throw an error when iModel is closed\", async () => {\n iModel.close();\n\n try {\n await iModel.integrityCheck();\n assert.fail(\"Expected error was not thrown\");\n } catch (error) {\n expect((error as IModelError).message).to.include(\"IModel is not open\");\n }\n });\n\n it(\"should call integrityCheck on a new iModel and run all specific integrity checks and return no errors\", async () => {\n const results = await iModel.integrityCheck({\n specificChecks: {\n checkDataColumns: true,\n checkECProfile: true,\n checkNavigationClassIds: true,\n checkNavigationIds: true,\n checkLinktableForeignKeyClassIds: true,\n checkLinktableForeignKeyIds: true,\n checkClassIds: true,\n checkDataSchema: true,\n checkSchemaLoad: true,\n checkMissingChildRows: true,\n },\n });\n expect(results).to.be.an(\"array\");\n expect(results).to.have.lengthOf(10);\n\n // Verify each check is present and has the expected structure\n const checkNames = results.map((r) => r.check);\n expect(checkNames).to.include.members([\n \"Check Data Columns\",\n \"Check EC Profile\",\n \"Check Navigation Class Ids\",\n \"Check Navigation Ids\",\n \"Check Link Table Foreign Key Class Ids\",\n \"Check Link Table Foreign Key Ids\",\n \"Check Class Ids\",\n \"Check Data Schema\",\n \"Check Schema Load\",\n \"Check Missing Child Rows\",\n ]);\n\n // All checks should pass\n results.forEach((result) => {\n expect(result.passed).to.equal(true, `${result.check} should pass`);\n expect(result.results).to.be.empty;\n });\n });\n\n it(\"should call integrityCheck on an iModel with corrupt foreignKey Ids and return results\", async () => {\n // Insert two elements\n iModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n await iModel.locks.acquireLocks({ shared: IModel.repositoryModelId });\n\n const element1Id = iModel.elements.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject1\"),\n });\n\n const element2Id = iModel.elements.insertElement({\n classFullName: Subject.classFullName,\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n code: Subject.createCode(iModel, IModel.rootSubjectId, \"Subject2\"),\n });\n iModel.saveChanges();\n\n // Create a relationship between them\n await iModel.locks.acquireLocks({ exclusive: Id64.toIdSet([element1Id, element2Id]) });\n const relationship = iModel.relationships.createInstance({\n classFullName: \"BisCore:SubjectRefersToSubject\",\n sourceId: element1Id,\n targetId: element2Id,\n });\n const relationshipId = iModel.relationships.insertInstance(relationship.toJSON());\n assert.isTrue(Id64.isValidId64(relationshipId));\n iModel.saveChanges();\n\n // Delete one element without deleting the relationship to corrupt the iModel\n const deleteResult = iModel[_nativeDb].executeSql(`DELETE FROM bis_Element WHERE Id=${element2Id}`);\n expect(deleteResult).to.equal(DbResult.BE_SQLITE_OK);\n iModel.saveChanges();\n\n // Run integrity check specifically for linktable foreign key Ids\n const results = await iModel.integrityCheck({\n quickCheck: true,\n specificChecks: {\n checkLinktableForeignKeyClassIds: true,\n checkLinktableForeignKeyIds: true,\n },\n });\n\n // Verify that the checkLinktableForeignKeyIds check reports the corruption\n expect(results).to.have.lengthOf(3);\n expect(results[0]).to.have.property(\"check\").that.equals(\"Quick Check\");\n expect(results[0]).to.have.property(\"passed\").that.equals(false);\n expect(results[0]).to.have.property(\"results\").that.is.an(\"array\");\n expect(results[0].results.length).to.equal(9);\n assert(results[0].results.findIndex((row) => (row as QuickIntegrityCheckResultRow).passed === false) !== -1, \"Quickcheck should report failed specific check\");\n expect(results[1]).to.have.property(\"passed\").that.equals(true);\n expect(results[1]).to.have.property(\"results\").that.is.an(\"array\").that.is.empty;\n expect(results[2]).to.have.property(\"passed\").that.equals(false);\n expect(results[2].results).to.have.lengthOf(1);\n expect(results[2].results[0]).to.deep.include({\n sno: 1,\n id: \"0x20000000001\",\n relationship: \"BisCore:ElementRefersToElements\",\n property: \"TargetECInstanceId\",\n keyId: \"0x20000000002\",\n primaryClass: \"BisCore:Element\",\n });\n });\n\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MergeConflict.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/MergeConflict.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 { GuidString, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n ElementAspectProps,\r\n IModel,\r\n SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { HubWrappers, KnownTestLocations } from \"../\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport {\r\n BriefcaseDb,\r\n ChannelControl,\r\n DictionaryModel,\r\n ExternalSourceAspect,\r\n SpatialCategory,\r\n SqliteChangeOp,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\r\nimport { RebaseChangesetConflictArgs, SqliteConflictCause } from \"../../internal/ChangesetConflictArgs\";\r\nchai.use(chaiAsPromised);\r\nimport * as sinon from \"sinon\";\r\n\r\nexport async function createNewModelAndCategory(rwIModel: BriefcaseDb, parent?: Id64String) {\r\n // Create a new physical model.\r\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\r\n\r\n // Find or create a SpatialCategory.\r\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\r\n const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());\r\n category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));\r\n\r\n return { modelId, spatialCategoryId };\r\n}\r\n\r\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\r\n try {\r\n await test();\r\n } catch (e) {\r\n if (e instanceof Error && msg) {\r\n assert.equal(e.message, msg);\r\n }\r\n return;\r\n }\r\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\r\n}\r\n\r\ndescribe.skip(\"Merge conflict & locking\", () => { // ###TODO FLAKY https://github.com/iTwin/itwinjs-core/issues/7730\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"MergeConflictTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n\r\n it(\"pull/merge causing update conflict - dirty read/modify (with no lock)\", async () => {\r\n /**\r\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\r\n * and when the second briefcase try to push its changes it will fail with following error.\r\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\r\n */\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // to reproduce the issue we will disable locks altogether.\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n const spatialCategoryId = SpatialCategory.insert(\r\n dictionary.iModel,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n\r\n // insert element and aspect\r\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n await b1.pullChanges();\r\n const aspectId1 = b1.elements.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n b1.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\r\n\r\n // b1 same as b2 and now both will modify same aspect\r\n await b2.pullChanges();\r\n\r\n // b1 will change identifier from \"test identifier\" to \"test identifier (modified by b1)\"\r\n b1.elements.updateAspect({\r\n id: aspectId1,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified by b1)\",\r\n } as ElementAspectProps);\r\n b1.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\r\n\r\n // b2 will change identifier from \"test identifier\" to \"test identifier (modified by b2)\"\r\n b2.elements.updateAspect({\r\n id: aspectId1,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified by b2)\",\r\n } as ElementAspectProps);\r\n b2.saveChanges();\r\n\r\n const conflicts: {\r\n cause: SqliteConflictCause,\r\n tableName: string,\r\n opcode?: SqliteChangeOp,\r\n id: Id64String,\r\n }[] = [];\r\n\r\n // we will not handle conflict and let the default conflict handler deal with it.\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n conflicts.push({\r\n cause: arg.cause,\r\n tableName: arg.tableName,\r\n opcode: arg.opcode,\r\n id: arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String,\r\n });\r\n return undefined;\r\n }\r\n });\r\n\r\n await b2.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\r\n\r\n expect(conflicts.length).to.be.equals(3);\r\n\r\n chai.expect(\r\n [\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_Element\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000004\"\r\n },\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_ElementMultiAspect\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000001\"\r\n },\r\n {\r\n \"cause\": \"Data\",\r\n \"tableName\": \"bis_Model\",\r\n \"opcode\": \"Updated\",\r\n \"id\": \"0x20000000001\"\r\n }\r\n ]).to.be.deep.equals(conflicts);\r\n\r\n await b3.pullChanges();\r\n await b1.pullChanges();\r\n\r\n // b2 win as default conflict handler choose Replace to override local changes over master.\r\n (b2.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n (b3.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n (b1.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\r\n\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n it(\"pull/merge causing update conflict - update causing local changes (with no lock)\", async () => {\r\n /**\r\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\r\n * and when the second briefcase try to push its changes it will fail with following error.\r\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\r\n */\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // to reproduce the issue we will disable locks altogether.\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n const spatialCategoryId = SpatialCategory.insert(\r\n dictionary.iModel,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n\r\n // insert element and aspect\r\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n b1.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\r\n\r\n await b2.pullChanges();\r\n const aspectId1 = b2.elements.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n b2.saveChanges();\r\n\r\n b1.elements.deleteElement(el1);\r\n b1.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\r\n\r\n const conflicts: {\r\n cause: SqliteConflictCause,\r\n tableName: string,\r\n opcode?: SqliteChangeOp,\r\n id: Id64String | undefined,\r\n }[] = [];\r\n\r\n // we will not handle conflict and let the default conflict handler deal with it.\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n let id;\r\n if (arg.cause !== \"ForeignKey\") {\r\n id = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\r\n }\r\n conflicts.push({\r\n cause: arg.cause,\r\n tableName: arg.tableName,\r\n opcode: arg.opcode,\r\n id,\r\n });\r\n return undefined;\r\n }\r\n });\r\n\r\n\r\n await assertThrowsAsync(\r\n async () => b2.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` }),\r\n \"Foreign key conflicts in ChangeSet. Aborting rebase.\");\r\n\r\n expect(conflicts.length).to.be.equals(3);\r\n expect(conflicts).to.deep.equal([\r\n {\r\n cause: \"NotFound\",\r\n tableName: \"bis_Element\",\r\n opcode: \"Updated\",\r\n id: \"0x20000000004\"\r\n },\r\n {\r\n cause: \"Data\",\r\n tableName: \"bis_Model\",\r\n opcode: \"Updated\",\r\n id: \"0x20000000001\"\r\n },\r\n {\r\n cause: \"ForeignKey\",\r\n tableName: \"\",\r\n opcode: undefined,\r\n id: undefined\r\n }\r\n ]);\r\n\r\n b2.txns.rebaser.addConflictHandler({\r\n id: \"delete_aspect_when_element_is_deleted\", handler: (arg: RebaseChangesetConflictArgs) => {\r\n if (arg.cause === \"NotFound\" && arg.tableName === \"bis_Element\") {\r\n // if element does not exist any more let delete the aspects as well.\r\n const elId = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\r\n b2.elements.getAspects(elId).forEach((aspect) => {\r\n b2.elements.deleteAspect(aspect.id);\r\n });\r\n }\r\n return undefined;\r\n }\r\n });\r\n\r\n b2.saveChanges();\r\n conflicts.length = 0;\r\n\r\n await b2.pushChanges({ accessToken: accessToken1, description: `nothing is pushed as the only change we made is reverted` });\r\n await b3.pullChanges();\r\n await b1.pullChanges();\r\n\r\n expect(() => b1.elements.getElement(el1)).throws(`Element=${el1}`);\r\n expect(() => b2.elements.getElement(el1)).throws(`Element=${el1}`);\r\n expect(() => b3.elements.getElement(el1)).throws(`Element=${el1}`);\r\n\r\n expect(() => b1.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n expect(() => b2.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n expect(() => b3.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\r\n\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n\r\n it(\"aspect insert, update & delete requires exclusive lock\", async () => {\r\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\r\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\r\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\r\n\r\n // Delete any existing iModels with the same name as the read-write test iModel\r\n const iModelName = \"TestIModel\";\r\n\r\n // Create a new empty iModel on the Hub & obtain a briefcase\r\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId });\r\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId });\r\n\r\n await b1.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n await b2.locks.acquireLocks({ shared: IModel.repositoryModelId });\r\n\r\n // create and insert a new model with code1\r\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\r\n b1,\r\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\r\n true);\r\n\r\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\r\n\r\n await b1.locks.acquireLocks({ shared: dictionary.id });\r\n const spatialCategoryId = SpatialCategory.insert(\r\n dictionary.iModel,\r\n dictionary.id,\r\n newCategoryCode.value,\r\n new SubCategoryAppearance({ color: 0xff0000 }),\r\n );\r\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\r\n b1.saveChanges();\r\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element ${el1}` });\r\n\r\n await b2.pullChanges();\r\n let aspectId: Id64String;\r\n const insertAspectIntoB2 = () => {\r\n aspectId = b2.elements.insertAspect({\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier\",\r\n } as ElementAspectProps);\r\n };\r\n\r\n /* attempt to insert aspect without a lock */\r\n assert.throws(insertAspectIntoB2, \"Error inserting ElementAspect [exclusive lock not held on element for insert aspect (id=0x20000000004)], class: BisCore:ExternalSourceAspect\");\r\n\r\n /* acquire lock and try again */\r\n await b2.locks.acquireLocks({ exclusive: el1 });\r\n insertAspectIntoB2();\r\n\r\n /* b1 cannot acquire lock on el1 as its already taken by b2 */\r\n await expect(b1.locks.acquireLocks({ exclusive: el1 })).to.be.rejectedWith(\"exclusive lock is already held\");\r\n\r\n /* push changes on b2 to release lock on el1 */\r\n b2.saveChanges();\r\n await b2.pushChanges({ accessToken: accessToken2, description: `add aspect to element ${el1}` });\r\n\r\n await b1.pullChanges();\r\n\r\n const updateAspectIntoB1 = () => {\r\n b1.elements.updateAspect({\r\n id: aspectId,\r\n classFullName: \"BisCore:ExternalSourceAspect\",\r\n element: {\r\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\r\n id: el1,\r\n },\r\n kind: \"\",\r\n identifier: \"test identifier (modified)\",\r\n } as ElementAspectProps);\r\n };\r\n\r\n /* attempt to update aspect without a lock */\r\n assert.throws(updateAspectIntoB1, \"Error updating ElementAspect [exclusive lock not held on element for update aspect (id=0x20000000004)], id: 0x30000000001\");\r\n\r\n /* acquire lock and try again */\r\n await b1.locks.acquireLocks({ exclusive: el1 });\r\n updateAspectIntoB1();\r\n\r\n /* delete the element */\r\n b1.elements.deleteElement(el1);\r\n b1.saveChanges();\r\n\r\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\r\n\r\n const onChangesetConflictStub = sinon.stub(BriefcaseDb.prototype, \"onChangesetConflict\" as any);\r\n /* we should be able to apply all changesets */\r\n await b3.pullChanges();\r\n expect(onChangesetConflictStub.callCount).eq(0, \"native conflict handler should not be called BriefcaseDb.onChangesetConflict()\");\r\n onChangesetConflictStub.restore();\r\n b1.close();\r\n b2.close();\r\n b3.close();\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"MergeConflict.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/MergeConflict.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAG/F,OAAO,EAEL,MAAM,EACN,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,cAAc,EAGd,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAqB,EAAE,MAAmB;IACxF,+BAA+B;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,eAAe,CAAC,6CAA6C,CAAC,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElL,oCAAoC;IACpC,MAAM,UAAU,GAAoB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;IACnG,MAAM,eAAe,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,QAAQ,CAAC,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE9E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAI,IAAsB,EAAE,GAAY;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,KAAK,IAAI,GAAG,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;IAC7C,IAAI,OAAmB,CAAC;IAExB,MAAM,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF;;;;WAIG;QACH,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1E,+EAA+E;QAC/E,MAAM,UAAU,GAAG,YAAY,CAAC;QAEhC,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACrJ,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE9B,2DAA2D;QAC3D,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAElI,2CAA2C;QAC3C,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAC1E,EAAE,EACF,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,CAAC,EAC1D,IAAI,CAAC,CAAC;QAER,MAAM,UAAU,GAAoB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,eAAe,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAE5G,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC9C,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,EAAE,EACb,eAAe,CAAC,KAAK,EACrB,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC/C,CAAC;QAEF,4BAA4B;QAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrH,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACzC,aAAa,EAAE,8BAA8B;YAC7C,OAAO,EAAE;gBACP,YAAY,EAAE,0CAA0C;gBACxD,EAAE,EAAE,GAAG;aACR;YACD,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,iBAAiB;SACR,CAAC,CAAC;QACzB,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,gCAAgC,GAAG,EAAE,EAAE,CAAC,CAAC;QAExG,qDAAqD;QACrD,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,0FAA0F;QAC1F,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACvB,EAAE,EAAE,SAAS;YACb,aAAa,EAAE,8BAA8B;YAC7C,OAAO,EAAE;gBACP,YAAY,EAAE,0CAA0C;gBACxD,EAAE,EAAE,GAAG;aACR;YACD,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,kCAAkC;SACzB,CAAC,CAAC;QACzB,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,SAAS,eAAe,EAAE,CAAC,CAAC;QAE5G,yFAAyF;QACzF,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACvB,EAAE,EAAE,SAAS;YACb,aAAa,EAAE,8BAA8B;YAC7C,OAAO,EAAE;gBACP,YAAY,EAAE,0CAA0C;gBACxD,EAAE,EAAE,GAAG;aACR;YACD,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,kCAAkC;SACzB,CAAC,CAAC;QACzB,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjB,MAAM,SAAS,GAKT,EAAE,CAAC;QAET,iFAAiF;QACjF,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACjC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAgC,EAAE,EAAE;gBAC1D,SAAS,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAe;iBAC/E,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,SAAS,eAAe,EAAE,CAAC,CAAC;QAE5G,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CACT;YACE;gBACE,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,aAAa;gBAC1B,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,eAAe;aACtB;YACD;gBACE,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,wBAAwB;gBACrC,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,eAAe;aACtB;YACD;gBACE,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,WAAW;gBACxB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,eAAe;aACtB;SACF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,2FAA2F;QAC1F,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAA0B,CAAC,UAAU,GAAG,kCAAkC,CAAC;QAC1G,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAA0B,CAAC,UAAU,GAAG,kCAAkC,CAAC;QAC1G,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAA0B,CAAC,UAAU,GAAG,kCAAkC,CAAC;QAE3G,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG;;;;WAIG;QACH,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1E,+EAA+E;QAC/E,MAAM,UAAU,GAAG,YAAY,CAAC;QAEhC,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACrJ,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE9B,2DAA2D;QAC3D,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAElI,2CAA2C;QAC3C,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAC1E,EAAE,EACF,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,CAAC,EAC1D,IAAI,CAAC,CAAC;QAER,MAAM,UAAU,GAAoB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,eAAe,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAE5G,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC9C,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,EAAE,EACb,eAAe,CAAC,KAAK,EACrB,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC/C,CAAC;QAEF,4BAA4B;QAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrH,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,gCAAgC,GAAG,EAAE,EAAE,CAAC,CAAC;QAExG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACzC,aAAa,EAAE,8BAA8B;YAC7C,OAAO,EAAE;gBACP,YAAY,EAAE,0CAA0C;gBACxD,EAAE,EAAE,GAAG;aACR;YACD,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,iBAAiB;SACR,CAAC,CAAC;QACzB,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,GAAG,EAAE,EAAE,CAAC,CAAC;QAE3F,MAAM,SAAS,GAKT,EAAE,CAAC;QAET,iFAAiF;QACjF,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACjC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAgC,EAAE,EAAE;gBAC1D,IAAI,EAAE,CAAC;gBACP,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;oBAC/B,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAe,CAAC;gBAClF,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,EAAE;iBACH,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QAGH,MAAM,iBAAiB,CACrB,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,gCAAgC,GAAG,EAAE,EAAE,CAAC,EAC7G,sDAAsD,CAAC,CAAC;QAE1D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9B;gBACE,KAAK,EAAE,UAAU;gBACjB,SAAS,EAAE,aAAa;gBACxB,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,eAAe;aACpB;YACD;gBACE,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,eAAe;aACpB;YACD;gBACE,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,EAAE;gBACb,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,SAAS;aACd;SACF,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;YACjC,EAAE,EAAE,uCAAuC,EAAE,OAAO,EAAE,CAAC,GAAgC,EAAE,EAAE;gBACzF,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;oBAChE,qEAAqE;oBACrE,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAe,CAAC;oBACxF,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;wBAC9C,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAErB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,0DAA0D,EAAE,CAAC,CAAC;QAC7H,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAC9F,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAC9F,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAE9F,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1E,+EAA+E;QAC/E,MAAM,UAAU,GAAG,YAAY,CAAC;QAEhC,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACrJ,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QACpH,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QACpH,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAEpH,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAElE,2CAA2C;QAC3C,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAC1E,EAAE,EACF,eAAe,CAAC,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,CAAC,EAC1D,IAAI,CAAC,CAAC;QAER,MAAM,UAAU,GAAoB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAkB,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,eAAe,GAAG,eAAe,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAE5G,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC9C,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,EAAE,EACb,eAAe,CAAC,KAAK,EACrB,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC/C,CAAC;QACF,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrH,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAC,CAAC;QAE5F,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,IAAI,QAAoB,CAAC;QACzB,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAClC,aAAa,EAAE,8BAA8B;gBAC7C,OAAO,EAAE;oBACP,YAAY,EAAE,0CAA0C;oBACxD,EAAE,EAAE,GAAG;iBACR;gBACD,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,iBAAiB;aACR,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,8IAA8I,CAAC,CAAC;QAElL,gCAAgC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,kBAAkB,EAAE,CAAC;QAErB,8DAA8D;QAC9D,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC;QAE7G,+CAA+C;QAC/C,EAAE,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,yBAAyB,GAAG,EAAE,EAAE,CAAC,CAAC;QAEjG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACvB,EAAE,EAAE,QAAQ;gBACZ,aAAa,EAAE,8BAA8B;gBAC7C,OAAO,EAAE;oBACP,YAAY,EAAE,0CAA0C;oBACxD,EAAE,EAAE,GAAG;iBACR;gBACD,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,4BAA4B;aACnB,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,2HAA2H,CAAC,CAAC;QAE/J,gCAAgC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,kBAAkB,EAAE,CAAC;QAErB,wBAAwB;QACxB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,GAAG,EAAE,EAAE,CAAC,CAAC;QAE3F,MAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,qBAA4B,CAAC,CAAC;QAChG,+CAA+C;QAC/C,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,gFAAgF,CAAC,CAAC;QAClI,uBAAuB,CAAC,OAAO,EAAE,CAAC;QAClC,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,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 { GuidString, Id64String } from \"@itwin/core-bentley\";\nimport {\n ElementAspectProps,\n IModel,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport * as chai from \"chai\";\nimport { assert, expect } from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, KnownTestLocations } from \"../\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport {\n BriefcaseDb,\n ChannelControl,\n DictionaryModel,\n ExternalSourceAspect,\n SpatialCategory,\n SqliteChangeOp,\n} from \"../../core-backend\";\nimport { IModelTestUtils, TestUserType } from \"../IModelTestUtils\";\nimport { RebaseChangesetConflictArgs, SqliteConflictCause } from \"../../internal/ChangesetConflictArgs\";\nchai.use(chaiAsPromised);\nimport * as sinon from \"sinon\";\n\nexport async function createNewModelAndCategory(rwIModel: BriefcaseDb, parent?: Id64String) {\n // Create a new physical model.\n const [, modelId] = await IModelTestUtils.createAndInsertPhysicalPartitionAndModelAsync(rwIModel, IModelTestUtils.getUniqueModelCode(rwIModel, \"newPhysicalModel\"), true, parent);\n\n // Find or create a SpatialCategory.\n const dictionary: DictionaryModel = rwIModel.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n const category = SpatialCategory.create(rwIModel, IModel.dictionaryId, newCategoryCode.value);\n const spatialCategoryId = rwIModel.elements.insertElement(category.toJSON());\n category.setDefaultAppearance(new SubCategoryAppearance({ color: 0xff0000 }));\n\n return { modelId, spatialCategoryId };\n}\n\nasync function assertThrowsAsync<T>(test: () => Promise<T>, msg?: string) {\n try {\n await test();\n } catch (e) {\n if (e instanceof Error && msg) {\n assert.equal(e.message, msg);\n }\n return;\n }\n throw new Error(`Failed to throw error with message: \"${msg}\"`);\n}\n\ndescribe.skip(\"Merge conflict & locking\", () => { // ###TODO FLAKY https://github.com/iTwin/itwinjs-core/issues/7730\n let iTwinId: GuidString;\n\n before(() => {\n HubMock.startup(\"MergeConflictTest\", KnownTestLocations.outputDir);\n iTwinId = HubMock.iTwinId;\n });\n after(() => HubMock.shutdown());\n\n it(\"pull/merge causing update conflict - dirty read/modify (with no lock)\", async () => {\n /**\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\n * and when the second briefcase try to push its changes it will fail with following error.\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\n */\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n // to reproduce the issue we will disable locks altogether.\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n const spatialCategoryId = SpatialCategory.insert(\n dictionary.iModel,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n\n // insert element and aspect\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n await b1.pullChanges();\n const aspectId1 = b1.elements.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n b1.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\n\n // b1 same as b2 and now both will modify same aspect\n await b2.pullChanges();\n\n // b1 will change identifier from \"test identifier\" to \"test identifier (modified by b1)\"\n b1.elements.updateAspect({\n id: aspectId1,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified by b1)\",\n } as ElementAspectProps);\n b1.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\n\n // b2 will change identifier from \"test identifier\" to \"test identifier (modified by b2)\"\n b2.elements.updateAspect({\n id: aspectId1,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified by b2)\",\n } as ElementAspectProps);\n b2.saveChanges();\n\n const conflicts: {\n cause: SqliteConflictCause,\n tableName: string,\n opcode?: SqliteChangeOp,\n id: Id64String,\n }[] = [];\n\n // we will not handle conflict and let the default conflict handler deal with it.\n b2.txns.rebaser.addConflictHandler({\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\n conflicts.push({\n cause: arg.cause,\n tableName: arg.tableName,\n opcode: arg.opcode,\n id: arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String,\n });\n return undefined;\n }\n });\n\n await b2.pushChanges({ accessToken: accessToken1, description: `modify aspect ${aspectId1} with no lock` });\n\n expect(conflicts.length).to.be.equals(3);\n\n chai.expect(\n [\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_Element\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000004\"\n },\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_ElementMultiAspect\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000001\"\n },\n {\n \"cause\": \"Data\",\n \"tableName\": \"bis_Model\",\n \"opcode\": \"Updated\",\n \"id\": \"0x20000000001\"\n }\n ]).to.be.deep.equals(conflicts);\n\n await b3.pullChanges();\n await b1.pullChanges();\n\n // b2 win as default conflict handler choose Replace to override local changes over master.\n (b2.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n (b3.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n (b1.elements.getAspect(aspectId1) as ExternalSourceAspect).identifier = \"test identifier (modified by b2)\";\n\n b1.close();\n b2.close();\n b3.close();\n });\n it(\"pull/merge causing update conflict - update causing local changes (with no lock)\", async () => {\n /**\n * To simulate a a data conflict for dirty read we update same aspect from two different briefcases\n * and when the second briefcase try to push its changes it will fail with following error.\n * \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\"\n */\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n // to reproduce the issue we will disable locks altogether.\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId, noLock: true });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId, noLock: true });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId, noLock: true });\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n const spatialCategoryId = SpatialCategory.insert(\n dictionary.iModel,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n\n // insert element and aspect\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n b1.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` });\n\n await b2.pullChanges();\n const aspectId1 = b2.elements.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n b2.saveChanges();\n\n b1.elements.deleteElement(el1);\n b1.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\n\n const conflicts: {\n cause: SqliteConflictCause,\n tableName: string,\n opcode?: SqliteChangeOp,\n id: Id64String | undefined,\n }[] = [];\n\n // we will not handle conflict and let the default conflict handler deal with it.\n b2.txns.rebaser.addConflictHandler({\n id: \"custom\", handler: (arg: RebaseChangesetConflictArgs) => {\n let id;\n if (arg.cause !== \"ForeignKey\") {\n id = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\n }\n conflicts.push({\n cause: arg.cause,\n tableName: arg.tableName,\n opcode: arg.opcode,\n id,\n });\n return undefined;\n }\n });\n\n\n await assertThrowsAsync(\n async () => b2.pushChanges({ accessToken: accessToken1, description: `inserted element with aspect ${el1}` }),\n \"Foreign key conflicts in ChangeSet. Aborting rebase.\");\n\n expect(conflicts.length).to.be.equals(3);\n expect(conflicts).to.deep.equal([\n {\n cause: \"NotFound\",\n tableName: \"bis_Element\",\n opcode: \"Updated\",\n id: \"0x20000000004\"\n },\n {\n cause: \"Data\",\n tableName: \"bis_Model\",\n opcode: \"Updated\",\n id: \"0x20000000001\"\n },\n {\n cause: \"ForeignKey\",\n tableName: \"\",\n opcode: undefined,\n id: undefined\n }\n ]);\n\n b2.txns.rebaser.addConflictHandler({\n id: \"delete_aspect_when_element_is_deleted\", handler: (arg: RebaseChangesetConflictArgs) => {\n if (arg.cause === \"NotFound\" && arg.tableName === \"bis_Element\") {\n // if element does not exist any more let delete the aspects as well.\n const elId = arg.getValueId(0, arg.opcode === \"Inserted\" ? \"New\" : \"Old\") as Id64String;\n b2.elements.getAspects(elId).forEach((aspect) => {\n b2.elements.deleteAspect(aspect.id);\n });\n }\n return undefined;\n }\n });\n\n b2.saveChanges();\n conflicts.length = 0;\n\n await b2.pushChanges({ accessToken: accessToken1, description: `nothing is pushed as the only change we made is reverted` });\n await b3.pullChanges();\n await b1.pullChanges();\n\n expect(() => b1.elements.getElement(el1)).throws(`Element=${el1}`);\n expect(() => b2.elements.getElement(el1)).throws(`Element=${el1}`);\n expect(() => b3.elements.getElement(el1)).throws(`Element=${el1}`);\n\n expect(() => b1.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n expect(() => b2.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n expect(() => b3.elements.getAspect(aspectId1)).throws(`ElementAspect not found ${aspectId1}`);\n\n b1.close();\n b2.close();\n b3.close();\n });\n\n it(\"aspect insert, update & delete requires exclusive lock\", async () => {\n const accessToken1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);\n const accessToken2 = await HubWrappers.getAccessToken(TestUserType.Regular);\n const accessToken3 = await HubWrappers.getAccessToken(TestUserType.Super);\n\n // Delete any existing iModels with the same name as the read-write test iModel\n const iModelName = \"TestIModel\";\n\n // Create a new empty iModel on the Hub & obtain a briefcase\n const rwIModelId = await HubMock.createNewIModel({ accessToken: accessToken1, iTwinId, iModelName, description: \"TestSubject\", noLocks: undefined });\n assert.isNotEmpty(rwIModelId);\n\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken1, iTwinId, iModelId: rwIModelId });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken2, iTwinId, iModelId: rwIModelId });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: accessToken3, iTwinId, iModelId: rwIModelId });\n\n await b1.locks.acquireLocks({ shared: IModel.repositoryModelId });\n await b2.locks.acquireLocks({ shared: IModel.repositoryModelId });\n\n // create and insert a new model with code1\n const [, modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(\n b1,\n IModelTestUtils.getUniqueModelCode(b1, \"newPhysicalModel\"),\n true);\n\n const dictionary: DictionaryModel = b1.models.getModel<DictionaryModel>(IModel.dictionaryId);\n const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, \"ThisTestSpatialCategory\");\n\n await b1.locks.acquireLocks({ shared: dictionary.id });\n const spatialCategoryId = SpatialCategory.insert(\n dictionary.iModel,\n dictionary.id,\n newCategoryCode.value,\n new SubCategoryAppearance({ color: 0xff0000 }),\n );\n const el1 = b1.elements.insertElement(IModelTestUtils.createPhysicalObject(b1, modelId, spatialCategoryId).toJSON());\n b1.saveChanges();\n await b1.pushChanges({ accessToken: accessToken1, description: `inserted element ${el1}` });\n\n await b2.pullChanges();\n let aspectId: Id64String;\n const insertAspectIntoB2 = () => {\n aspectId = b2.elements.insertAspect({\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier\",\n } as ElementAspectProps);\n };\n\n /* attempt to insert aspect without a lock */\n assert.throws(insertAspectIntoB2, \"Error inserting ElementAspect [exclusive lock not held on element for insert aspect (id=0x20000000004)], class: BisCore:ExternalSourceAspect\");\n\n /* acquire lock and try again */\n await b2.locks.acquireLocks({ exclusive: el1 });\n insertAspectIntoB2();\n\n /* b1 cannot acquire lock on el1 as its already taken by b2 */\n await expect(b1.locks.acquireLocks({ exclusive: el1 })).to.be.rejectedWith(\"exclusive lock is already held\");\n\n /* push changes on b2 to release lock on el1 */\n b2.saveChanges();\n await b2.pushChanges({ accessToken: accessToken2, description: `add aspect to element ${el1}` });\n\n await b1.pullChanges();\n\n const updateAspectIntoB1 = () => {\n b1.elements.updateAspect({\n id: aspectId,\n classFullName: \"BisCore:ExternalSourceAspect\",\n element: {\n relClassName: \"BisCore:ElementOwnsExternalSourceAspects\",\n id: el1,\n },\n kind: \"\",\n identifier: \"test identifier (modified)\",\n } as ElementAspectProps);\n };\n\n /* attempt to update aspect without a lock */\n assert.throws(updateAspectIntoB1, \"Error updating ElementAspect [exclusive lock not held on element for update aspect (id=0x20000000004)], id: 0x30000000001\");\n\n /* acquire lock and try again */\n await b1.locks.acquireLocks({ exclusive: el1 });\n updateAspectIntoB1();\n\n /* delete the element */\n b1.elements.deleteElement(el1);\n b1.saveChanges();\n\n await b1.pushChanges({ accessToken: accessToken1, description: `deleted element ${el1}` });\n\n const onChangesetConflictStub = sinon.stub(BriefcaseDb.prototype, \"onChangesetConflict\" as any);\n /* we should be able to apply all changesets */\n await b3.pullChanges();\n expect(onChangesetConflictStub.callCount).eq(0, \"native conflict handler should not be called BriefcaseDb.onChangesetConflict()\");\n onChangesetConflictStub.restore();\n b1.close();\n b2.close();\n b3.close();\n });\n});\n"]}