@itwin/core-backend 5.13.0-dev.7 → 5.13.0-dev.8

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 (451) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  18. package/lib/cjs/CheckpointManager.js +5 -1
  19. package/lib/cjs/CheckpointManager.js.map +1 -1
  20. package/lib/cjs/ClassRegistry.js +5 -5
  21. package/lib/cjs/ClassRegistry.js.map +1 -1
  22. package/lib/cjs/CloudSqlite.js.map +1 -1
  23. package/lib/cjs/CodeService.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.js.map +1 -1
  25. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  26. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.js.map +1 -1
  29. package/lib/cjs/ECDb.js.map +1 -1
  30. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  31. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  32. package/lib/cjs/ECSqlStatement.js.map +1 -1
  33. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  34. package/lib/cjs/EditTxn.js.map +1 -1
  35. package/lib/cjs/Element.js.map +1 -1
  36. package/lib/cjs/ElementAspect.js.map +1 -1
  37. package/lib/cjs/ElementGraphics.js.map +1 -1
  38. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  39. package/lib/cjs/Entity.js.map +1 -1
  40. package/lib/cjs/EntityReferences.js.map +1 -1
  41. package/lib/cjs/ExportGraphics.js.map +1 -1
  42. package/lib/cjs/ExternalSource.js.map +1 -1
  43. package/lib/cjs/FontFile.js.map +1 -1
  44. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  45. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  46. package/lib/cjs/GeometrySummary.js +47 -47
  47. package/lib/cjs/GeometrySummary.js.map +1 -1
  48. package/lib/cjs/IModelDb.js +25 -25
  49. package/lib/cjs/IModelDb.js.map +1 -1
  50. package/lib/cjs/IModelDbFonts.js.map +1 -1
  51. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  52. package/lib/cjs/IModelHost.js.map +1 -1
  53. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  54. package/lib/cjs/IModelJsFs.js.map +1 -1
  55. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  56. package/lib/cjs/IpcHost.js.map +1 -1
  57. package/lib/cjs/LineStyle.js.map +1 -1
  58. package/lib/cjs/LocalHub.js +1 -1
  59. package/lib/cjs/LocalHub.js.map +1 -1
  60. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  61. package/lib/cjs/LockControl.js.map +1 -1
  62. package/lib/cjs/Material.js.map +1 -1
  63. package/lib/cjs/Model.js.map +1 -1
  64. package/lib/cjs/NativeAppStorage.js.map +1 -1
  65. package/lib/cjs/NativeHost.js.map +1 -1
  66. package/lib/cjs/NavigationRelationship.js.map +1 -1
  67. package/lib/cjs/PartialChangeUnifier.js +7 -7
  68. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  69. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  70. package/lib/cjs/PropertyStore.js.map +1 -1
  71. package/lib/cjs/Relationship.js.map +1 -1
  72. package/lib/cjs/RpcBackend.js.map +1 -1
  73. package/lib/cjs/SQLiteDb.js.map +1 -1
  74. package/lib/cjs/Schema.js.map +1 -1
  75. package/lib/cjs/SchemaSync.js.map +1 -1
  76. package/lib/cjs/SchemaUtils.js.map +1 -1
  77. package/lib/cjs/SheetIndex.js.map +1 -1
  78. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  79. package/lib/cjs/SqliteStatement.js.map +1 -1
  80. package/lib/cjs/StashManager.js.map +1 -1
  81. package/lib/cjs/Texture.js.map +1 -1
  82. package/lib/cjs/TileStorage.js.map +1 -1
  83. package/lib/cjs/TxnManager.js.map +1 -1
  84. package/lib/cjs/ViewDefinition.js.map +1 -1
  85. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  86. package/lib/cjs/ViewStore.js.map +1 -1
  87. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  88. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  89. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  91. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  92. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  93. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  94. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  95. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  96. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  97. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  98. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  99. package/lib/cjs/core-backend.js.map +1 -1
  100. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  101. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  102. package/lib/cjs/domains/GenericElements.js.map +1 -1
  103. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  104. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  105. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  106. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -1
  107. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  108. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  109. package/lib/cjs/internal/HubMock.js.map +1 -1
  110. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  111. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  112. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  113. package/lib/cjs/internal/NoLocks.js.map +1 -1
  114. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  115. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  116. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  117. package/lib/cjs/internal/Symbols.js.map +1 -1
  118. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  119. package/lib/cjs/internal/cross-package.js.map +1 -1
  120. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  122. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  123. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  124. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  125. package/lib/cjs/rpc/multipart.js.map +1 -1
  126. package/lib/cjs/rpc/tracing.js.map +1 -1
  127. package/lib/cjs/rpc/web/logging.js.map +1 -1
  128. package/lib/cjs/rpc/web/request.js.map +1 -1
  129. package/lib/cjs/rpc/web/response.js.map +1 -1
  130. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  131. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  132. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  133. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  134. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  135. package/lib/cjs/workspace/Settings.js.map +1 -1
  136. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  137. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  138. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  139. package/lib/cjs/workspace/Workspace.js.map +1 -1
  140. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  141. package/lib/esm/BackendHubAccess.js.map +1 -1
  142. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  143. package/lib/esm/BisCoreSchema.js.map +1 -1
  144. package/lib/esm/BlobContainerService.js.map +1 -1
  145. package/lib/esm/BriefcaseManager.js.map +1 -1
  146. package/lib/esm/CatalogDb.js.map +1 -1
  147. package/lib/esm/Category.js.map +1 -1
  148. package/lib/esm/ChangeSummaryManager.js +2 -2
  149. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  150. package/lib/esm/ChangedElementsDb.js.map +1 -1
  151. package/lib/esm/ChangesetECAdaptor.js +248 -248
  152. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  153. package/lib/esm/ChangesetReader.js +3 -3
  154. package/lib/esm/ChangesetReader.js.map +1 -1
  155. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  156. package/lib/esm/ChannelControl.js.map +1 -1
  157. package/lib/esm/CheckpointManager.d.ts.map +1 -1
  158. package/lib/esm/CheckpointManager.js +5 -1
  159. package/lib/esm/CheckpointManager.js.map +1 -1
  160. package/lib/esm/ClassRegistry.js +5 -5
  161. package/lib/esm/ClassRegistry.js.map +1 -1
  162. package/lib/esm/CloudSqlite.js.map +1 -1
  163. package/lib/esm/CodeService.js.map +1 -1
  164. package/lib/esm/CodeSpecs.js.map +1 -1
  165. package/lib/esm/ConcurrentQuery.js.map +1 -1
  166. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  167. package/lib/esm/DevTools.js.map +1 -1
  168. package/lib/esm/DisplayStyle.js.map +1 -1
  169. package/lib/esm/ECDb.js.map +1 -1
  170. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  171. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  172. package/lib/esm/ECSqlStatement.js.map +1 -1
  173. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  174. package/lib/esm/EditTxn.js.map +1 -1
  175. package/lib/esm/Element.js.map +1 -1
  176. package/lib/esm/ElementAspect.js.map +1 -1
  177. package/lib/esm/ElementGraphics.js.map +1 -1
  178. package/lib/esm/ElementTreeWalker.js.map +1 -1
  179. package/lib/esm/Entity.js.map +1 -1
  180. package/lib/esm/EntityReferences.js.map +1 -1
  181. package/lib/esm/ExportGraphics.js.map +1 -1
  182. package/lib/esm/ExternalSource.js.map +1 -1
  183. package/lib/esm/FontFile.js.map +1 -1
  184. package/lib/esm/GeoCoordConfig.js.map +1 -1
  185. package/lib/esm/GeographicCRSServices.js.map +1 -1
  186. package/lib/esm/GeometrySummary.js +47 -47
  187. package/lib/esm/GeometrySummary.js.map +1 -1
  188. package/lib/esm/IModelDb.js +25 -25
  189. package/lib/esm/IModelDb.js.map +1 -1
  190. package/lib/esm/IModelDbFonts.js.map +1 -1
  191. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  192. package/lib/esm/IModelHost.js.map +1 -1
  193. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  194. package/lib/esm/IModelJsFs.js.map +1 -1
  195. package/lib/esm/ImageSourceConversion.js.map +1 -1
  196. package/lib/esm/IpcHost.js.map +1 -1
  197. package/lib/esm/LineStyle.js.map +1 -1
  198. package/lib/esm/LocalHub.js +1 -1
  199. package/lib/esm/LocalHub.js.map +1 -1
  200. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  201. package/lib/esm/LockControl.js.map +1 -1
  202. package/lib/esm/Material.js.map +1 -1
  203. package/lib/esm/Model.js.map +1 -1
  204. package/lib/esm/NativeAppStorage.js.map +1 -1
  205. package/lib/esm/NativeHost.js.map +1 -1
  206. package/lib/esm/NavigationRelationship.js.map +1 -1
  207. package/lib/esm/PartialChangeUnifier.js +7 -7
  208. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  209. package/lib/esm/PromiseMemoizer.js.map +1 -1
  210. package/lib/esm/PropertyStore.js.map +1 -1
  211. package/lib/esm/Relationship.js.map +1 -1
  212. package/lib/esm/RpcBackend.js.map +1 -1
  213. package/lib/esm/SQLiteDb.js.map +1 -1
  214. package/lib/esm/Schema.js.map +1 -1
  215. package/lib/esm/SchemaSync.js.map +1 -1
  216. package/lib/esm/SchemaUtils.js.map +1 -1
  217. package/lib/esm/SheetIndex.js.map +1 -1
  218. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  219. package/lib/esm/SqliteStatement.js.map +1 -1
  220. package/lib/esm/StashManager.js.map +1 -1
  221. package/lib/esm/Texture.js.map +1 -1
  222. package/lib/esm/TileStorage.js.map +1 -1
  223. package/lib/esm/TxnManager.js.map +1 -1
  224. package/lib/esm/ViewDefinition.js.map +1 -1
  225. package/lib/esm/ViewStateHydrator.js.map +1 -1
  226. package/lib/esm/ViewStore.js.map +1 -1
  227. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  228. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  229. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  230. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  231. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  232. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  233. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  234. package/lib/esm/core-backend.js.map +1 -1
  235. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  236. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  237. package/lib/esm/domains/GenericElements.js.map +1 -1
  238. package/lib/esm/domains/GenericSchema.js.map +1 -1
  239. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  240. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  241. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -1
  242. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  243. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  244. package/lib/esm/internal/HubMock.js.map +1 -1
  245. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  246. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  247. package/lib/esm/internal/NativePlatform.js.map +1 -1
  248. package/lib/esm/internal/NoLocks.js.map +1 -1
  249. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  250. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  251. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  252. package/lib/esm/internal/Symbols.js.map +1 -1
  253. package/lib/esm/internal/annotations/fields.js.map +1 -1
  254. package/lib/esm/internal/cross-package.js.map +1 -1
  255. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  256. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  257. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  258. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  259. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  260. package/lib/esm/rpc/multipart.js.map +1 -1
  261. package/lib/esm/rpc/tracing.js.map +1 -1
  262. package/lib/esm/rpc/web/logging.js.map +1 -1
  263. package/lib/esm/rpc/web/request.js.map +1 -1
  264. package/lib/esm/rpc/web/response.js.map +1 -1
  265. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  266. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  267. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  268. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  269. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  270. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  271. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  272. package/lib/esm/test/AttachDb.test.js +11 -11
  273. package/lib/esm/test/AttachDb.test.js.map +1 -1
  274. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  275. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  276. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  277. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  278. package/lib/esm/test/IModelHost.test.js.map +1 -1
  279. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  280. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  281. package/lib/esm/test/IpcHost.test.js.map +1 -1
  282. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  283. package/lib/esm/test/PrintElementTree.js.map +1 -1
  284. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  285. package/lib/esm/test/RevisionUtility.js.map +1 -1
  286. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  287. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  288. package/lib/esm/test/SchemaUtils.test.js +25 -25
  289. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  290. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  291. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  292. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  293. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  294. package/lib/esm/test/TestEditTxn.js.map +1 -1
  295. package/lib/esm/test/TestUtils.js.map +1 -1
  296. package/lib/esm/test/annotations/Fields.test.js +53 -53
  297. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  298. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  299. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  300. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  301. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  302. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  303. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  304. package/lib/esm/test/categories/Category.test.js.map +1 -1
  305. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  307. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  309. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  311. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  313. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  315. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  317. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  318. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  319. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  320. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  321. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  322. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +4 -4
  323. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  324. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  325. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  326. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  327. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  328. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  329. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  330. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  331. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  332. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  333. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  334. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  335. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  336. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  337. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  338. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  339. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  340. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  341. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  342. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  343. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  344. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  345. package/lib/esm/test/example-code/EditTxn.test.js.map +1 -1
  346. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  347. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  348. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  349. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  350. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  351. package/lib/esm/test/hubaccess/CheckpointManager.test.js +43 -1
  352. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  353. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  354. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  355. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  356. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  357. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  358. package/lib/esm/test/imageData.js.map +1 -1
  359. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  360. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  361. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  362. package/lib/esm/test/imodel/IModel.test.js +44 -44
  363. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  364. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  365. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  366. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  367. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  368. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  369. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  370. package/lib/esm/test/index.js.map +1 -1
  371. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +32 -32
  372. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -1
  373. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  374. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  375. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  376. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  377. package/lib/esm/test/rpc/response.test.js.map +1 -1
  378. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  379. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  380. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  381. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  382. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  383. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  384. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  385. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  386. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +21 -21
  387. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -1
  388. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  389. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  390. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  391. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  392. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  393. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  394. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  395. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  396. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  397. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  398. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  399. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  400. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  401. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  402. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  403. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  404. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  405. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  406. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  407. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  408. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  409. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  410. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  411. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  412. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  413. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  414. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  415. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  416. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  417. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  418. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  419. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  420. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  421. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  422. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  423. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  424. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  425. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  426. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  427. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  428. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  429. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  430. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  431. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  432. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  433. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  434. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  435. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  436. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  437. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  438. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  439. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  440. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  441. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  442. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  443. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  444. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  445. package/lib/esm/workspace/Settings.js.map +1 -1
  446. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  447. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  448. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  449. package/lib/esm/workspace/Workspace.js.map +1 -1
  450. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  451. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.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 * as fs from \"fs\";\nimport * as sinon from \"sinon\";\nimport { StandaloneDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\nimport { FontFile } from \"../../FontFile\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\nimport { CodeService } from \"../../CodeService\";\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\n\ndescribe(\"IModelDbFonts\", () => {\n let db: StandaloneDb | undefined;\n\n class MockCodeService {\n public static enable = false;\n public static nextFaceDataId = 10;\n public static nextFontId = 100;\n\n public static reset() {\n this.enable = false;\n this.nextFaceDataId = 10;\n this.nextFontId = 100;\n }\n\n public static get internalCodes() {\n if (!MockCodeService.enable) {\n return undefined;\n }\n\n const obj = {\n reserveFontId: () => MockCodeService.nextFontId++,\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\n };\n\n (obj as any).writeLocker = obj;\n return obj;\n }\n\n public static close() { }\n\n }\n\n beforeEach(async () => {\n CodeService.createForIModel = () => MockCodeService as any;\n db = StandaloneDb.createEmpty(\n IModelTestUtils.prepareOutputFile(\"IModelDbFonts\", \"IModelDbFontsTest.bim\"),\n { rootSubject: { name: \"IModelDbFontsTest\" }, enableTransactions: true }\n );\n (db as any)._codeService = await CodeService.createForIModel(db);\n });\n\n afterEach(() => {\n if (db) {\n if (db.txns.hasLocalChanges)\n db.txns.deleteAllTxns();\n\n db.close();\n db = undefined;\n }\n\n MockCodeService.reset();\n CodeService.createForIModel = undefined;\n });\n\n function createTTFile(fontName: string): FontFile {\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\n }\n\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\n return { familyName, faceName, type: FontType.TrueType, subId };\n }\n\n function getDb(): StandaloneDb {\n if (!db)\n throw new Error(\"Test iModel was not initialized\");\n\n return db;\n }\n\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\n const iModel = getDb();\n const fonts = Array.from(iModel.fonts.queryEmbeddedFontFiles());\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\n\n expect(actualFaceProps).to.deep.equal(expected);\n\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\n return list.map((x) => {\n return {\n familyName: x.familyName,\n isBold: x.faceName.startsWith(\"bold\"),\n isItalic: x.faceName.endsWith(\"italic\"),\n };\n });\n });\n\n const actualFaces = fonts.map((x) => x.faces);\n expect(actualFaces).to.deep.equal(expectedFaces);\n }\n\n describe(\"embedFontFile\", () => {\n it(\"embeds font files\", async () => {\n expectEmbeddedFontFiles([]);\n\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\n\n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\n const iModel = getDb();\n await iModel.fonts.embedFontFile({ file });\n expectedFiles.push(expectedFaces);\n expectEmbeddedFontFiles(expectedFiles);\n }\n\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const blob = fs.readFileSync(fileName);\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\n familyName: \"Cdm\",\n type: FontType.Shx,\n faceName: \"regular\",\n subId: 0,\n }]);\n\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\n\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]);\n\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\n\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\n const encoding: RscFontEncodingProps = {\n degree: 5,\n plusMinus: 100,\n };\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\n familyName: \"ENGINEERING\",\n type: FontType.Rsc,\n faceName: \"regular\",\n subId: 0,\n encoding: {\n ...encoding,\n // omitted properties get default values\n diameter: 216,\n codePage: -1,\n }\n }]);\n });\n\n it(\"is a no-op if file is already embedded\", async () => {\n const iModel = getDb();\n expectEmbeddedFontFiles([]);\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n });\n\n it(\"throws if font is not embeddable\", async () => {\n const iModel = getDb();\n await expect(iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n await expect(iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n });\n\n it(\"allocates font Ids unless otherwise specified\", async () => {\n const iModel = getDb();\n await iModel.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\n expect(iModel.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\n\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\n for (const name of sitkaFamilies) {\n expect(iModel.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\n }\n\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(iModel.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const iModel = getDb();\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(spy.callCount).to.equal(1);\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"obtains face data Ids from CodeService if configured\", async () => {\n const iModel = getDb();\n MockCodeService.enable = true;\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\n\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n\n expect(spy.callCount).to.equal(0);\n expect(MockCodeService.nextFaceDataId).to.equal(12);\n });\n\n it(\"round-trips font data\", async () => {\n const iModel = getDb();\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\n await iModel.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\n\n const embeddedFiles = Array.from(iModel.fonts.queryEmbeddedFontFiles());\n expect(embeddedFiles.length).to.equal(1);\n const embeddedFile = embeddedFiles[0];\n\n const embeddedData = embeddedFile[_getData]();\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\n });\n });\n\n describe(\"acquireId\", () => {\n it(\"assigns font Ids\", async () => {\n const iModel = getDb();\n expect(iModel.fonts.findDescriptor(1)).to.be.undefined;\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n expect(iModel.fonts.findId(cdmShx)).to.be.undefined;\n\n const cdmShxId = await iModel.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(1);\n\n const cdmShxId2 = await iModel.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n expect(iModel.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\n expect(iModel.fonts.findId(cdmShx)).to.equal(cdmShxId);\n\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\n expect(iModel.fonts.findId(cdmRsc)).to.be.undefined;\n\n const cdmRscId = await iModel.fonts.acquireId(cdmRsc);\n expect(cdmRscId).to.equal(2);\n\n expect(iModel.fonts.findId(cdmRsc)).to.equal(cdmRscId);\n expect(iModel.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\n\n const arial = { name: \"Arial\", type: FontType.TrueType };\n const arialId = await iModel.fonts.acquireId(arial);\n expect(arialId).to.equal(3);\n expect(iModel.fonts.findId(arial)).to.equal(arialId);\n expect(iModel.fonts.findDescriptor(arialId)).to.deep.equal(arial);\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const iModel = getDb();\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n await iModel.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await iModel.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"acquires font Ids from CodeService if configured\", async () => {\n const iModel = getDb();\n MockCodeService.enable = true;\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n const cdmShxId = await iModel.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(100);\n\n const cdmShxId2 = await iModel.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n const arialId = await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(arialId).to.equal(101);\n\n expect(spy.callCount).to.equal(0);\n });\n });\n\n describe(\"findId\", () => {\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\n const iModel = getDb();\n const shx = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.be.undefined;\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.be.undefined;\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(shx);\n\n const tt = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.be.undefined;\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(tt);\n\n const rsc = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.equal(rsc);\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(tt);\n });\n });\n\n describe(\"queryMappedFamilies\", () => {\n it(\"omits entries with no embedded face data by default\", async () => {\n const iModel = getDb();\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\n await iModel.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\n await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\n const actual = Array.from(iModel.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\n expect(actual).to.deep.equal(expected.sort());\n }\n\n expectFamilies([\"Karla\"]);\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.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 * as fs from \"fs\";\r\nimport * as sinon from \"sinon\";\r\nimport { StandaloneDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\r\nimport { CodeService } from \"../../CodeService\";\r\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\r\n\r\ndescribe(\"IModelDbFonts\", () => {\r\n let db: StandaloneDb | undefined;\r\n\r\n class MockCodeService {\r\n public static enable = false;\r\n public static nextFaceDataId = 10;\r\n public static nextFontId = 100;\r\n\r\n public static reset() {\r\n this.enable = false;\r\n this.nextFaceDataId = 10;\r\n this.nextFontId = 100;\r\n }\r\n\r\n public static get internalCodes() {\r\n if (!MockCodeService.enable) {\r\n return undefined;\r\n }\r\n\r\n const obj = {\r\n reserveFontId: () => MockCodeService.nextFontId++,\r\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\r\n };\r\n\r\n (obj as any).writeLocker = obj;\r\n return obj;\r\n }\r\n\r\n public static close() { }\r\n\r\n }\r\n\r\n beforeEach(async () => {\r\n CodeService.createForIModel = () => MockCodeService as any;\r\n db = StandaloneDb.createEmpty(\r\n IModelTestUtils.prepareOutputFile(\"IModelDbFonts\", \"IModelDbFontsTest.bim\"),\r\n { rootSubject: { name: \"IModelDbFontsTest\" }, enableTransactions: true }\r\n );\r\n (db as any)._codeService = await CodeService.createForIModel(db);\r\n });\r\n\r\n afterEach(() => {\r\n if (db) {\r\n if (db.txns.hasLocalChanges)\r\n db.txns.deleteAllTxns();\r\n\r\n db.close();\r\n db = undefined;\r\n }\r\n\r\n MockCodeService.reset();\r\n CodeService.createForIModel = undefined;\r\n });\r\n\r\n function createTTFile(fontName: string): FontFile {\r\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\r\n }\r\n\r\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\r\n return { familyName, faceName, type: FontType.TrueType, subId };\r\n }\r\n\r\n function getDb(): StandaloneDb {\r\n if (!db)\r\n throw new Error(\"Test iModel was not initialized\");\r\n\r\n return db;\r\n }\r\n\r\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\r\n const iModel = getDb();\r\n const fonts = Array.from(iModel.fonts.queryEmbeddedFontFiles());\r\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\r\n\r\n expect(actualFaceProps).to.deep.equal(expected);\r\n\r\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\r\n return list.map((x) => {\r\n return {\r\n familyName: x.familyName,\r\n isBold: x.faceName.startsWith(\"bold\"),\r\n isItalic: x.faceName.endsWith(\"italic\"),\r\n };\r\n });\r\n });\r\n\r\n const actualFaces = fonts.map((x) => x.faces);\r\n expect(actualFaces).to.deep.equal(expectedFaces);\r\n }\r\n\r\n describe(\"embedFontFile\", () => {\r\n it(\"embeds font files\", async () => {\r\n expectEmbeddedFontFiles([]);\r\n\r\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\r\n\r\n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\r\n const iModel = getDb();\r\n await iModel.fonts.embedFontFile({ file });\r\n expectedFiles.push(expectedFaces);\r\n expectEmbeddedFontFiles(expectedFiles);\r\n }\r\n\r\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const blob = fs.readFileSync(fileName);\r\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\r\n familyName: \"Cdm\",\r\n type: FontType.Shx,\r\n faceName: \"regular\",\r\n subId: 0,\r\n }]);\r\n\r\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\r\n\r\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]);\r\n\r\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\r\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\r\n\r\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\r\n const encoding: RscFontEncodingProps = {\r\n degree: 5,\r\n plusMinus: 100,\r\n };\r\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\r\n familyName: \"ENGINEERING\",\r\n type: FontType.Rsc,\r\n faceName: \"regular\",\r\n subId: 0,\r\n encoding: {\r\n ...encoding,\r\n // omitted properties get default values\r\n diameter: 216,\r\n codePage: -1,\r\n }\r\n }]);\r\n });\r\n\r\n it(\"is a no-op if file is already embedded\", async () => {\r\n const iModel = getDb();\r\n expectEmbeddedFontFiles([]);\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\r\n expectEmbeddedFontFiles([[\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]]);\r\n\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\r\n expectEmbeddedFontFiles([[\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]]);\r\n });\r\n\r\n it(\"throws if font is not embeddable\", async () => {\r\n const iModel = getDb();\r\n await expect(iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\r\n await expect(iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\r\n });\r\n\r\n it(\"allocates font Ids unless otherwise specified\", async () => {\r\n const iModel = getDb();\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\r\n expect(iModel.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\r\n\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\r\n for (const name of sitkaFamilies) {\r\n expect(iModel.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\r\n }\r\n\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n expect(iModel.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\r\n });\r\n\r\n it(\"requires schema lock if CodeService is not configured\", async () => {\r\n const iModel = getDb();\r\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n expect(spy.callCount).to.equal(1);\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n expect(spy.callCount).to.equal(2);\r\n });\r\n\r\n it(\"obtains face data Ids from CodeService if configured\", async () => {\r\n const iModel = getDb();\r\n MockCodeService.enable = true;\r\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\r\n\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n\r\n expect(spy.callCount).to.equal(0);\r\n expect(MockCodeService.nextFaceDataId).to.equal(12);\r\n });\r\n\r\n it(\"round-trips font data\", async () => {\r\n const iModel = getDb();\r\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\r\n await iModel.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\r\n\r\n const embeddedFiles = Array.from(iModel.fonts.queryEmbeddedFontFiles());\r\n expect(embeddedFiles.length).to.equal(1);\r\n const embeddedFile = embeddedFiles[0];\r\n\r\n const embeddedData = embeddedFile[_getData]();\r\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\r\n });\r\n });\r\n\r\n describe(\"acquireId\", () => {\r\n it(\"assigns font Ids\", async () => {\r\n const iModel = getDb();\r\n expect(iModel.fonts.findDescriptor(1)).to.be.undefined;\r\n\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n expect(iModel.fonts.findId(cdmShx)).to.be.undefined;\r\n\r\n const cdmShxId = await iModel.fonts.acquireId(cdmShx);\r\n expect(cdmShxId).to.equal(1);\r\n\r\n const cdmShxId2 = await iModel.fonts.acquireId(cdmShx);\r\n expect(cdmShxId2).to.equal(cdmShxId);\r\n\r\n expect(iModel.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\r\n expect(iModel.fonts.findId(cdmShx)).to.equal(cdmShxId);\r\n\r\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\r\n expect(iModel.fonts.findId(cdmRsc)).to.be.undefined;\r\n\r\n const cdmRscId = await iModel.fonts.acquireId(cdmRsc);\r\n expect(cdmRscId).to.equal(2);\r\n\r\n expect(iModel.fonts.findId(cdmRsc)).to.equal(cdmRscId);\r\n expect(iModel.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\r\n\r\n const arial = { name: \"Arial\", type: FontType.TrueType };\r\n const arialId = await iModel.fonts.acquireId(arial);\r\n expect(arialId).to.equal(3);\r\n expect(iModel.fonts.findId(arial)).to.equal(arialId);\r\n expect(iModel.fonts.findDescriptor(arialId)).to.deep.equal(arial);\r\n });\r\n\r\n it(\"requires schema lock if CodeService is not configured\", async () => {\r\n const iModel = getDb();\r\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n await iModel.fonts.acquireId(cdmShx);\r\n expect(spy.callCount).to.equal(1);\r\n\r\n await iModel.fonts.acquireId(cdmShx);\r\n expect(spy.callCount).to.equal(1);\r\n\r\n await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n expect(spy.callCount).to.equal(2);\r\n });\r\n\r\n it(\"acquires font Ids from CodeService if configured\", async () => {\r\n const iModel = getDb();\r\n MockCodeService.enable = true;\r\n const spy = sinon.spy(iModel, \"acquireSchemaLock\");\r\n\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n const cdmShxId = await iModel.fonts.acquireId(cdmShx);\r\n expect(cdmShxId).to.equal(100);\r\n\r\n const cdmShxId2 = await iModel.fonts.acquireId(cdmShx);\r\n expect(cdmShxId2).to.equal(cdmShxId);\r\n\r\n const arialId = await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n expect(arialId).to.equal(101);\r\n\r\n expect(spy.callCount).to.equal(0);\r\n });\r\n });\r\n\r\n describe(\"findId\", () => {\r\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\r\n const iModel = getDb();\r\n const shx = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.be.undefined;\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.be.undefined;\r\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(shx);\r\n\r\n const tt = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.be.undefined;\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\r\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(tt);\r\n\r\n const rsc = await iModel.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Rsc })).to.equal(rsc);\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\r\n expect(iModel.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\r\n expect(iModel.fonts.findId({ name: \"Font\" })).to.equal(tt);\r\n });\r\n });\r\n\r\n describe(\"queryMappedFamilies\", () => {\r\n it(\"omits entries with no embedded face data by default\", async () => {\r\n const iModel = getDb();\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\r\n await iModel.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\r\n await iModel.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n\r\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\r\n const actual = Array.from(iModel.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\r\n expect(actual).to.deep.equal(expected.sort());\r\n }\r\n\r\n expectFamilies([\"Karla\"]);\r\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\r\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\r\n });\r\n });\r\n});\r\n"]}
@@ -39,22 +39,22 @@ describe("apply changesets", function () {
39
39
  withEditTxn(b3Db, "apply changeset b3", () => {
40
40
  b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);
41
41
  });
42
- const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
43
- <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
44
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
45
- <ECEntityClass typeName="a1">
46
- <BaseClass>bis:GraphicalElement2d</BaseClass>
47
- </ECEntityClass>
48
- <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
49
- <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
50
- <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
51
- <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
52
- <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
53
- <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
54
- <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
55
- <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
56
- <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
57
- <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
42
+ const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
43
+ <ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
44
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
45
+ <ECEntityClass typeName="a1">
46
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
47
+ </ECEntityClass>
48
+ <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
49
+ <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
50
+ <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
51
+ <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
52
+ <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
53
+ <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
54
+ <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
55
+ <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
56
+ <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
57
+ <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
58
58
  </ECSchema>`;
59
59
  await b1.importSchemaStrings([schema1]);
60
60
  chai.expect(b1.txns.hasPendingTxns).to.be.true;
@@ -63,22 +63,22 @@ describe("apply changesets", function () {
63
63
  chai.expect(b2.txns.hasPendingTxns).to.be.false;
64
64
  await b2.pullChanges();
65
65
  chai.expect(b2.txns.hasPendingTxns).to.be.false;
66
- const schema2 = `<?xml version="1.0" encoding="UTF-8"?>
67
- <ECSchema schemaName="TestDomain2" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
68
- <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
69
- <ECEntityClass typeName="a1">
70
- <BaseClass>bis:GraphicalElement2d</BaseClass>
71
- </ECEntityClass>
72
- <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
73
- <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
74
- <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
75
- <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
76
- <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
77
- <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
78
- <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
79
- <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
80
- <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
81
- <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
66
+ const schema2 = `<?xml version="1.0" encoding="UTF-8"?>
67
+ <ECSchema schemaName="TestDomain2" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
68
+ <ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
69
+ <ECEntityClass typeName="a1">
70
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
71
+ </ECEntityClass>
72
+ <ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
73
+ <ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
74
+ <ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
75
+ <ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
76
+ <ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
77
+ <ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
78
+ <ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
79
+ <ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
80
+ <ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
81
+ <ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
82
82
  </ECSchema>`;
83
83
  await b1.importSchemaStrings([schema2]);
84
84
  chai.expect(b1.txns.hasPendingTxns).to.be.true;
@@ -1 +1 @@
1
- {"version":3,"file":"ApplyChangeset.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/ApplyChangeset.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { Suite } from \"mocha\";\nimport { IModel, SchemaState, SubjectProps } from \"@itwin/core-common\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { TestUtils } from \"../TestUtils\";\nchai.use(chaiAsPromised);\n\ndescribe(\"apply changesets\", function (this: Suite) {\n before(async () => {\n await TestUtils.startBackend();\n });\n\n it(\"Apply changeset with no local changes, should not create new local changes\", async () => {\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let b2: BriefcaseDb | undefined;\n let b3: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n iModelId = await HubMock.createNewIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b1Db = b1;\n withEditTxn(b1Db, \"apply changeset b1\", () => {\n b1Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b2Db = b2;\n withEditTxn(b2Db, \"apply changeset b2\", () => {\n b2Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n const b3Db = b3;\n withEditTxn(b3Db, \"apply changeset b3\", () => {\n b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema1]);\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\n await b1.pushChanges({ description: \"schema1\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n const schema2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain2\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema2]);\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\n await b1.pushChanges({ description: \"schema2\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\n await b3.pullChanges();\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\n } finally {\n b1?.close();\n b2?.close();\n b3?.close();\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n\n it(\"Pulling profile upgrade before inserting element should pass\", async () => {\n // startup\n HubMock.startup(\"ProfileUpgradeBeforeInsertElement\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\n\n // inserting and updating elements in one briefcase\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n const briefcase = b1;\n withEditTxn(briefcase, \"profile upgrade before insert\", () => {\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n // upgrading schemas in second briefcase\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\n await b1.pullChanges();\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\n\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\n // See https://github.com/iTwin/itwinjs-core/issues/9302\n await b1.locks.acquireLocks({\n exclusive: subjectId,\n });\n\n const existingCode = b1.elements.getElementProps(subjectId).code;\n withEditTxn(b1, \"Updated Subject\", (txn) => {\n txn.updateElement({\n id: subjectId,\n code: { ...existingCode, value: \"code value 2\" },\n });\n });\n await b1.pushChanges({ description: \"Updated Subject\" });\n await b1.locks.releaseAllLocks();\n\n } finally {\n if (b1) {\n await b1.locks.releaseAllLocks().catch(() => { });\n b1.close();\n }\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n\n it(\"Pulling profile upgrade after inserting element should pass\", async () => {\n // startup\n HubMock.startup(\"ProfileUpgradeAfterInsertElement\", KnownTestLocations.outputDir);\n let b1: BriefcaseDb | undefined;\n let iModelId: string | undefined;\n\n try {\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\n\n // inserting and updating elements in one briefcase\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n const briefcase = b1;\n withEditTxn(briefcase, \"profile upgrade after insert\", () => {\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n });\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\n\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\n // See https://github.com/iTwin/itwinjs-core/issues/9302\n await b1.locks.acquireLocks({\n exclusive: subjectId,\n });\n\n const existingCode = b1.elements.getElementProps(subjectId).code;\n withEditTxn(b1, \"Updated Subject\", (txn) => {\n txn.updateElement({\n id: subjectId,\n code: { ...existingCode, value: \"code value 2\" },\n });\n });\n await b1.pushChanges({ description: \"Updated Subject\" });\n await b1.locks.releaseAllLocks();\n\n // upgrading schemas in second briefcase\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\n await b1.pullChanges();\n\n await b1.locks.acquireLocks({\n shared: IModel.repositoryModelId,\n });\n const subjectProps2: SubjectProps = {\n classFullName: Subject.classFullName,\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 3\"),\n federationGuid: Guid.createValue(),\n model: IModel.repositoryModelId,\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\n };\n withEditTxn(b1, \"Inserted Subject 2\", (txn) => {\n txn.insertElement(subjectProps2);\n });\n await b1.pushChanges({ description: \"Inserted Subject 2\", retainLocks: true });\n await b1.locks.releaseAllLocks();\n\n } finally {\n if (b1) {\n await b1.locks.releaseAllLocks().catch(() => { });\n b1.close();\n }\n if (iModelId)\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\n HubMock.shutdown();\n }\n });\n});\n"]}
1
+ {"version":3,"file":"ApplyChangeset.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/ApplyChangeset.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { HubWrappers, IModelTestUtils, KnownTestLocations } from \"..\";\r\nimport { _nativeDb, BriefcaseDb, BriefcaseManager, ChannelControl, Subject, SubjectOwnsSubjects } from \"../../core-backend\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { Suite } from \"mocha\";\r\nimport { IModel, SchemaState, SubjectProps } from \"@itwin/core-common\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nchai.use(chaiAsPromised);\r\n\r\ndescribe(\"apply changesets\", function (this: Suite) {\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n });\r\n\r\n it(\"Apply changeset with no local changes, should not create new local changes\", async () => {\r\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let b2: BriefcaseDb | undefined;\r\n let b3: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n iModelId = await HubMock.createNewIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\r\n\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b1Db = b1;\r\n withEditTxn(b1Db, \"apply changeset b1\", () => {\r\n b1Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b2Db = b2;\r\n withEditTxn(b2Db, \"apply changeset b2\", () => {\r\n b2Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\r\n const b3Db = b3;\r\n withEditTxn(b3Db, \"apply changeset b3\", () => {\r\n b3Db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"a1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await b1.importSchemaStrings([schema1]);\r\n\r\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\r\n await b1.pushChanges({ description: \"schema1\" });\r\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\r\n\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n await b2.pullChanges();\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n\r\n const schema2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain2\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"a1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await b1.importSchemaStrings([schema2]);\r\n\r\n chai.expect(b1.txns.hasPendingTxns).to.be.true;\r\n await b1.pushChanges({ description: \"schema2\" });\r\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\r\n\r\n\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n await b2.pullChanges();\r\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\r\n\r\n\r\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\r\n await b3.pullChanges();\r\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\r\n } finally {\r\n b1?.close();\r\n b2?.close();\r\n b3?.close();\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n\r\n it(\"Pulling profile upgrade before inserting element should pass\", async () => {\r\n // startup\r\n HubMock.startup(\"ProfileUpgradeBeforeInsertElement\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\r\n\r\n // inserting and updating elements in one briefcase\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n const briefcase = b1;\r\n withEditTxn(briefcase, \"profile upgrade before insert\", () => {\r\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n // upgrading schemas in second briefcase\r\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\r\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\r\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\r\n await b1.pullChanges();\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\r\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\r\n\r\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\r\n // See https://github.com/iTwin/itwinjs-core/issues/9302\r\n await b1.locks.acquireLocks({\r\n exclusive: subjectId,\r\n });\r\n\r\n const existingCode = b1.elements.getElementProps(subjectId).code;\r\n withEditTxn(b1, \"Updated Subject\", (txn) => {\r\n txn.updateElement({\r\n id: subjectId,\r\n code: { ...existingCode, value: \"code value 2\" },\r\n });\r\n });\r\n await b1.pushChanges({ description: \"Updated Subject\" });\r\n await b1.locks.releaseAllLocks();\r\n\r\n } finally {\r\n if (b1) {\r\n await b1.locks.releaseAllLocks().catch(() => { });\r\n b1.close();\r\n }\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n\r\n it(\"Pulling profile upgrade after inserting element should pass\", async () => {\r\n // startup\r\n HubMock.startup(\"ProfileUpgradeAfterInsertElement\", KnownTestLocations.outputDir);\r\n let b1: BriefcaseDb | undefined;\r\n let iModelId: string | undefined;\r\n\r\n try {\r\n const pathname = IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\");\r\n iModelId = await HubWrappers.pushIModel(\"user1\", HubMock.iTwinId, pathname, \"Test\", true);\r\n\r\n // inserting and updating elements in one briefcase\r\n b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\r\n const briefcase = b1;\r\n withEditTxn(briefcase, \"profile upgrade after insert\", () => {\r\n briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 1\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n const subjectId = withEditTxn(b1, \"Inserted Subject\", (txn) => txn.insertElement(subjectProps));\r\n await b1.pushChanges({ description: \"Inserted Subject\", retainLocks: true });\r\n\r\n // FIXME: We should not need to reacquire this element lock, since we pushed with `retainLocks: true`.\r\n // See https://github.com/iTwin/itwinjs-core/issues/9302\r\n await b1.locks.acquireLocks({\r\n exclusive: subjectId,\r\n });\r\n\r\n const existingCode = b1.elements.getElementProps(subjectId).code;\r\n withEditTxn(b1, \"Updated Subject\", (txn) => {\r\n txn.updateElement({\r\n id: subjectId,\r\n code: { ...existingCode, value: \"code value 2\" },\r\n });\r\n });\r\n await b1.pushChanges({ description: \"Updated Subject\" });\r\n await b1.locks.releaseAllLocks();\r\n\r\n // upgrading schemas in second briefcase\r\n const props = await BriefcaseManager.downloadBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId });\r\n const schemaState = BriefcaseDb.validateSchemas(props.fileName, true);\r\n chai.assert(schemaState === SchemaState.UpgradeRecommended);\r\n await BriefcaseDb.upgradeSchemas({ fileName: props.fileName });\r\n await b1.pullChanges();\r\n\r\n await b1.locks.acquireLocks({\r\n shared: IModel.repositoryModelId,\r\n });\r\n const subjectProps2: SubjectProps = {\r\n classFullName: Subject.classFullName,\r\n code: Subject.createCode(b1, IModel.rootSubjectId, \"code value 3\"),\r\n federationGuid: Guid.createValue(),\r\n model: IModel.repositoryModelId,\r\n parent: new SubjectOwnsSubjects(IModel.rootSubjectId),\r\n };\r\n withEditTxn(b1, \"Inserted Subject 2\", (txn) => {\r\n txn.insertElement(subjectProps2);\r\n });\r\n await b1.pushChanges({ description: \"Inserted Subject 2\", retainLocks: true });\r\n await b1.locks.releaseAllLocks();\r\n\r\n } finally {\r\n if (b1) {\r\n await b1.locks.releaseAllLocks().catch(() => { });\r\n b1.close();\r\n }\r\n if (iModelId)\r\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId }).catch(() => { });\r\n HubMock.shutdown();\r\n }\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\nimport { Element } from \"../../Element\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"BriefcaseManager\", async () => {\n const testITwinId: string = Guid.createValue();\n const managerAccessToken = \"manager mock token\";\n const accessToken = \"access token\";\n\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\n afterEach(() => HubMock.shutdown());\n\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\n let iModelName = \"iModel Name With Spaces\";\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n const args = { accessToken, iTwinId: testITwinId, iModelId };\n assert.isDefined(iModelId);\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name With :\\/<>?* Characters\";\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name Thats Excessively Long \" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\n // Note: iModelHub does not accept a name that's longer than 255 characters.\n assert.equal(255, iModelName.length);\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n iModel.close();\n });\n\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\n\n try {\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\n\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\n try {\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"db not open\"), \"iModel2Dup failure must be due to db not being open\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId1 = iModel1.briefcaseId;\n iModel1.close(); // Keeps the briefcase by default\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId3 = iModel3.briefcaseId;\n assert.strictEqual(briefcaseId3, briefcaseId1);\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\";\n const userToken2 = \"super manager token\";\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\n await testUtility.createTestIModel();\n\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\n const changesetPullAndPush = iModelPullAndPush.changeset;\n iModelPullAndPush.close();\n\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\n const changesetPullOnly = iModelPullOnly.changeset;\n iModelPullOnly.close();\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\n\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\n const changesetPullOnly2 = iModelPullOnly2.changeset;\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\n\n // Delete iModel from the Hub and disk\n await testUtility.deleteTestIModel();\n });\n\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\n const userToken2 = \"super manager token\"; // User2 is used for the test\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\n await testUtility.createTestIModel();\n\n // User2 opens the iModel pullAndPush and is able to edit and save changes\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.exists(iModelPullAndPush);\n const briefcaseId = iModelPullAndPush.briefcaseId;\n const pathname = iModelPullAndPush.pathName;\n\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\n rootEl.userLabel = `${rootEl.userLabel}changed`;\n withEditTxn(iModelPullAndPush, (txn) => txn.updateElement(rootEl.toJSON()));\n\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n iModelPullAndPush.close();\n\n // User2 should be able to re-open the iModel pullAndPush again\n // - the changes will still be there\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush = iModelPullAndPush.changeset;\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User2 should be able to re-open the iModel\n await HubWrappers.openBriefcaseUsingRpc(args);\n\n // User2 closes and reopens the iModel pullAndPush as of the newer version\n // - the changes will still be there, AND\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\n iModelPullAndPush.close();\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User2 should be able to push the changes now\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\n\n // Delete iModel from the Hub and disk\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\n await testUtility.deleteTestIModel();\n });\n});\n"]}
1
+ {"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\r\nimport { Element } from \"../../Element\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\r\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"BriefcaseManager\", async () => {\r\n const testITwinId: string = Guid.createValue();\r\n const managerAccessToken = \"manager mock token\";\r\n const accessToken = \"access token\";\r\n\r\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\r\n afterEach(() => HubMock.shutdown());\r\n\r\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\r\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\r\n let iModelName = \"iModel Name With Spaces\";\r\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n const args = { accessToken, iTwinId: testITwinId, iModelId };\r\n assert.isDefined(iModelId);\r\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name With :\\/<>?* Characters\";\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name Thats Excessively Long \" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\r\n // Note: iModelHub does not accept a name that's longer than 255 characters.\r\n assert.equal(255, iModelName.length);\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n iModel.close();\r\n });\r\n\r\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\r\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\r\n\r\n try {\r\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\r\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\r\n } catch (err: any) {\r\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\r\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\r\n\r\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\r\n try {\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\r\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\r\n } catch (err: any) {\r\n assert.isTrue(err.message.includes(\"db not open\"), \"iModel2Dup failure must be due to db not being open\");\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\r\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId1 = iModel1.briefcaseId;\r\n iModel1.close(); // Keeps the briefcase by default\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId3 = iModel3.briefcaseId;\r\n assert.strictEqual(briefcaseId3, briefcaseId1);\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\r\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\";\r\n const userToken2 = \"super manager token\";\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n iModelPullAndPush.close();\r\n\r\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\r\n const changesetPullOnly = iModelPullOnly.changeset;\r\n iModelPullOnly.close();\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\r\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\r\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\r\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\r\n\r\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\r\n const changesetPullOnly2 = iModelPullOnly2.changeset;\r\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\r\n\r\n // Delete iModel from the Hub and disk\r\n await testUtility.deleteTestIModel();\r\n });\r\n\r\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\r\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\r\n const userToken2 = \"super manager token\"; // User2 is used for the test\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens the iModel pullAndPush and is able to edit and save changes\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.exists(iModelPullAndPush);\r\n const briefcaseId = iModelPullAndPush.briefcaseId;\r\n const pathname = iModelPullAndPush.pathName;\r\n\r\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\r\n rootEl.userLabel = `${rootEl.userLabel}changed`;\r\n withEditTxn(iModelPullAndPush, (txn) => txn.updateElement(rootEl.toJSON()));\r\n\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n iModelPullAndPush.close();\r\n\r\n // User2 should be able to re-open the iModel pullAndPush again\r\n // - the changes will still be there\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User2 should be able to re-open the iModel\r\n await HubWrappers.openBriefcaseUsingRpc(args);\r\n\r\n // User2 closes and reopens the iModel pullAndPush as of the newer version\r\n // - the changes will still be there, AND\r\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\r\n iModelPullAndPush.close();\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User2 should be able to push the changes now\r\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\r\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\r\n\r\n // Delete iModel from the Hub and disk\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\r\n await testUtility.deleteTestIModel();\r\n });\r\n});\r\n"]}
@@ -5,9 +5,12 @@
5
5
  import { assert } from "chai";
6
6
  import * as path from "path";
7
7
  import * as sinon from "sinon";
8
- import { Guid } from "@itwin/core-bentley";
8
+ import { Guid, Logger } from "@itwin/core-bentley";
9
9
  import { V2CheckpointManager } from "../../CheckpointManager";
10
+ import { CloudSqlite } from "../../CloudSqlite";
11
+ import { IModelHost } from "../../IModelHost";
10
12
  import { IModelJsFs } from "../../IModelJsFs";
13
+ import { _hubAccess } from "../../internal/Symbols";
11
14
  import { IModelTestUtils } from "../IModelTestUtils";
12
15
  describe("Checkpoint Manager", () => {
13
16
  afterEach(() => {
@@ -48,5 +51,44 @@ describe("Checkpoint Manager", () => {
48
51
  const db = IModelTestUtils.tryOpenLocalFile(request);
49
52
  assert.isUndefined(db);
50
53
  });
54
+ it("should redact the sasToken when logging that prefetch was skipped", async () => {
55
+ const checkpoint = {
56
+ iTwinId: Guid.createValue(),
57
+ iModelId: Guid.createValue(),
58
+ changeset: { id: "1234", index: 1 },
59
+ accessToken: "userAccessToken",
60
+ };
61
+ const v2props = {
62
+ accountName: "testAccount",
63
+ containerId: Guid.createValue(), // unique so this test doesn't reuse a container cached by another test
64
+ sasToken: "?sv=2018-03-28&sr=c&sp=rl&sig=superSecretSignature",
65
+ dbName: "testDb",
66
+ storageType: "azure",
67
+ };
68
+ sinon.stub(IModelHost, _hubAccess).get(() => ({ queryV2Checkpoint: async () => v2props }));
69
+ sinon.stub(IModelHost, "appWorkspace").get(() => ({
70
+ settings: {
71
+ getBoolean: (name, defaultVal) => name === "Checkpoints/prefetch" ? true : defaultVal,
72
+ getNumber: (_name, defaultVal) => defaultVal,
73
+ },
74
+ }));
75
+ sinon.stub(CloudSqlite, "createCloudContainer").returns({
76
+ containerId: v2props.containerId,
77
+ accessToken: v2props.sasToken,
78
+ isConnected: true,
79
+ checkForChanges: () => { },
80
+ disconnect: () => { }, // V2CheckpointManager caches this container, and disconnects it when IModelHost shuts down
81
+ queryDatabase: () => ({ totalBlocks: 1, nPrefetch: 1 }), // an in-progress prefetch forces the "skipping prefetch" path
82
+ });
83
+ const logInfo = sinon.stub(Logger, "logInfo");
84
+ await V2CheckpointManager.attach(checkpoint);
85
+ const skipped = logInfo.args.find((args) => args[1].includes("Skipping prefetch"));
86
+ if (undefined === skipped)
87
+ assert.fail("expected a log message about skipping prefetch");
88
+ const metaData = skipped[2];
89
+ assert.equal(metaData.v2props.sasToken, "...");
90
+ assert.equal(metaData.v2props.containerId, v2props.containerId);
91
+ assert.notInclude(JSON.stringify(metaData), "superSecretSignature");
92
+ });
51
93
  });
52
94
  //# sourceMappingURL=CheckpointManager.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"Checkpoint Manager\", () => {\n\n afterEach(() => {\n sinon.restore();\n });\n\n it(\"open missing local file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n const request = {\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"open a bad bim file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n\n // Setup a local file\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\n if (!IModelJsFs.existsSync(folder))\n IModelJsFs.recursiveMkDirSync(folder);\n\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\n\n // Attempt to open the file\n const request = {\n localFile: outputFile,\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n});\n"]}
1
+ {"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid, Logger } from \"@itwin/core-bentley\";\r\nimport { CheckpointProps, V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { CloudSqlite } from \"../../CloudSqlite\";\r\nimport { IModelHost } from \"../../IModelHost\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"Checkpoint Manager\", () => {\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n it(\"open missing local file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n const request = {\r\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"open a bad bim file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n\r\n // Setup a local file\r\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\r\n if (!IModelJsFs.existsSync(folder))\r\n IModelJsFs.recursiveMkDirSync(folder);\r\n\r\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\r\n if (IModelJsFs.existsSync(outputFile))\r\n IModelJsFs.unlinkSync(outputFile);\r\n\r\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\r\n\r\n // Attempt to open the file\r\n const request = {\r\n localFile: outputFile,\r\n checkpoint,\r\n };\r\n const db = IModelTestUtils.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"should redact the sasToken when logging that prefetch was skipped\", async () => {\r\n const checkpoint: CheckpointProps = {\r\n iTwinId: Guid.createValue(),\r\n iModelId: Guid.createValue(),\r\n changeset: { id: \"1234\", index: 1 },\r\n accessToken: \"userAccessToken\",\r\n };\r\n const v2props = {\r\n accountName: \"testAccount\",\r\n containerId: Guid.createValue(), // unique so this test doesn't reuse a container cached by another test\r\n sasToken: \"?sv=2018-03-28&sr=c&sp=rl&sig=superSecretSignature\",\r\n dbName: \"testDb\",\r\n storageType: \"azure\",\r\n };\r\n\r\n sinon.stub(IModelHost, _hubAccess).get(() => ({ queryV2Checkpoint: async () => v2props } as any));\r\n sinon.stub(IModelHost, \"appWorkspace\").get(() => ({\r\n settings: {\r\n getBoolean: (name: string, defaultVal: boolean) => name === \"Checkpoints/prefetch\" ? true : defaultVal,\r\n getNumber: (_name: string, defaultVal: number) => defaultVal,\r\n },\r\n } as any));\r\n sinon.stub(CloudSqlite, \"createCloudContainer\").returns({\r\n containerId: v2props.containerId,\r\n accessToken: v2props.sasToken,\r\n isConnected: true,\r\n checkForChanges: () => { },\r\n disconnect: () => { }, // V2CheckpointManager caches this container, and disconnects it when IModelHost shuts down\r\n queryDatabase: () => ({ totalBlocks: 1, nPrefetch: 1 }), // an in-progress prefetch forces the \"skipping prefetch\" path\r\n } as any);\r\n const logInfo = sinon.stub(Logger, \"logInfo\");\r\n\r\n await V2CheckpointManager.attach(checkpoint);\r\n\r\n const skipped = logInfo.args.find((args) => args[1].includes(\"Skipping prefetch\"));\r\n if (undefined === skipped)\r\n assert.fail(\"expected a log message about skipping prefetch\");\r\n\r\n const metaData = skipped[2] as any;\r\n assert.equal(metaData.v2props.sasToken, \"...\");\r\n assert.equal(metaData.v2props.containerId, v2props.containerId);\r\n assert.notInclude(JSON.stringify(metaData), \"superSecretSignature\");\r\n });\r\n});\r\n"]}