@itwin/reports-config-widget-react 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/.rush/temp/operation/rebuild/all.log +9 -0
  2. package/.rush/temp/operation/rebuild/state.json +3 -0
  3. package/.rush/temp/package-deps_rebuild.json +48 -44
  4. package/.rush/temp/shrinkwrap-deps.json +228 -207
  5. package/CHANGELOG.json +44 -0
  6. package/CHANGELOG.md +24 -1
  7. package/coverage/clover.xml +562 -542
  8. package/coverage/coverage-final.json +24 -20
  9. package/coverage/lcov-report/index.html +51 -51
  10. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +22 -22
  11. package/coverage/lcov-report/src/index.html +21 -21
  12. package/coverage/lcov-report/src/test/index.html +11 -11
  13. package/coverage/lcov-report/src/test/test-utils.tsx.html +20 -140
  14. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +14 -35
  15. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +26 -20
  16. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +94 -109
  17. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +55 -52
  18. package/coverage/lcov-report/src/widget/components/Constants.ts.html +1 -1
  19. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +28 -46
  20. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +1 -1
  21. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +1 -1
  22. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +1 -1
  23. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +1 -1
  24. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +1 -1
  25. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
  26. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +1 -1
  27. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +1 -1
  28. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +3 -3
  29. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +8 -8
  30. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +36 -81
  31. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +38 -41
  32. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +46 -46
  33. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +127 -142
  34. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +189 -312
  35. package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +370 -0
  36. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +111 -33
  37. package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +166 -0
  38. package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +274 -0
  39. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +22 -7
  40. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +40 -94
  41. package/coverage/lcov-report/src/widget/components/index.html +142 -97
  42. package/coverage/lcov-report/src/widget/components/utils.tsx.html +22 -19
  43. package/coverage/lcov-report/src/widget/context/{ReportsApiConfigContext.tsx.html → BulkExtractorContext.tsx.html} +23 -26
  44. package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +202 -0
  45. package/coverage/lcov-report/src/widget/context/index.html +30 -15
  46. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  47. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +11 -11
  48. package/coverage/lcov-report/src/widget/index.html +13 -13
  49. package/coverage/lcov.info +1036 -1034
  50. package/jest.config.js +1 -0
  51. package/lib/cjs/ReportsConfigWidget.js +1 -1
  52. package/lib/cjs/ReportsConfigWidget.js.map +1 -1
  53. package/lib/cjs/reports-config-widget-react.d.ts +5 -0
  54. package/lib/cjs/reports-config-widget-react.d.ts.map +1 -1
  55. package/lib/cjs/reports-config-widget-react.js +11 -0
  56. package/lib/cjs/reports-config-widget-react.js.map +1 -1
  57. package/lib/cjs/test/AddMappingModal.test.js +20 -34
  58. package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
  59. package/lib/cjs/test/BulkExtractor.test.js +13 -19
  60. package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
  61. package/lib/cjs/test/DeleteModal.test.d.ts.map +1 -1
  62. package/lib/cjs/test/DeleteModal.test.js +4 -62
  63. package/lib/cjs/test/DeleteModal.test.js.map +1 -1
  64. package/lib/cjs/test/ReportAction.test.js +14 -79
  65. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  66. package/lib/cjs/test/ReportMappingHorizontalTile.test.js +20 -54
  67. package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
  68. package/lib/cjs/test/ReportMappings.test.d.ts.map +1 -1
  69. package/lib/cjs/test/ReportMappings.test.js +51 -106
  70. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  71. package/lib/cjs/test/Reports.test.js +41 -96
  72. package/lib/cjs/test/Reports.test.js.map +1 -1
  73. package/lib/cjs/test/WidgetHeader.test.js +9 -3
  74. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  75. package/lib/cjs/test/test-utils.d.ts +3 -8
  76. package/lib/cjs/test/test-utils.d.ts.map +1 -1
  77. package/lib/cjs/test/test-utils.js +6 -34
  78. package/lib/cjs/test/test-utils.js.map +1 -1
  79. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  80. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +3 -3
  81. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  82. package/lib/cjs/widget/ReportsConfigUiProvider.js +5 -7
  83. package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
  84. package/lib/cjs/widget/components/ActionPanel.d.ts +3 -3
  85. package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
  86. package/lib/cjs/widget/components/ActionPanel.js +4 -4
  87. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  88. package/lib/cjs/widget/components/ActionPanel.scss +2 -3
  89. package/lib/cjs/widget/components/AddMappingsModal.d.ts +4 -4
  90. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  91. package/lib/cjs/widget/components/AddMappingsModal.js +39 -43
  92. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  93. package/lib/cjs/widget/components/AddMappingsModal.scss +1 -2
  94. package/lib/cjs/widget/components/BulkExtractor.d.ts +4 -4
  95. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
  96. package/lib/cjs/widget/components/BulkExtractor.js +8 -8
  97. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
  98. package/lib/cjs/widget/components/DeleteModal.d.ts +4 -5
  99. package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
  100. package/lib/cjs/widget/components/DeleteModal.js +11 -15
  101. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  102. package/lib/cjs/widget/components/DeleteModal.scss +2 -3
  103. package/lib/cjs/widget/components/ExtractionStatus.js +2 -2
  104. package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -1
  105. package/lib/cjs/widget/components/ExtractionStatus.scss +6 -7
  106. package/lib/cjs/widget/components/HorizontalTile.js +2 -2
  107. package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
  108. package/lib/cjs/widget/components/HorizontalTile.scss +11 -14
  109. package/lib/cjs/widget/components/LocalizedTablePaginator.js +2 -2
  110. package/lib/cjs/widget/components/LocalizedTablePaginator.js.map +1 -1
  111. package/lib/cjs/widget/components/ReportAction.d.ts +4 -5
  112. package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
  113. package/lib/cjs/widget/components/ReportAction.js +24 -26
  114. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  115. package/lib/cjs/widget/components/ReportAction.scss +1 -2
  116. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts +4 -4
  117. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  118. package/lib/cjs/widget/components/ReportHorizontalTile.js +33 -20
  119. package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
  120. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
  121. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  122. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +36 -21
  123. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  124. package/lib/cjs/widget/components/ReportMappings.d.ts +4 -6
  125. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  126. package/lib/cjs/widget/components/ReportMappings.js +50 -63
  127. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  128. package/lib/cjs/widget/components/ReportMappings.scss +10 -11
  129. package/lib/cjs/widget/components/Reports.d.ts +6 -1
  130. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  131. package/lib/cjs/widget/components/Reports.js +53 -94
  132. package/lib/cjs/widget/components/Reports.js.map +1 -1
  133. package/lib/cjs/widget/components/Reports.scss +15 -15
  134. package/lib/cjs/widget/components/ReportsConfigContext.d.ts +18 -0
  135. package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -0
  136. package/lib/cjs/widget/components/ReportsConfigContext.js +79 -0
  137. package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -0
  138. package/lib/cjs/widget/components/ReportsContainer.d.ts +14 -0
  139. package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
  140. package/lib/cjs/widget/components/ReportsContainer.js +27 -16
  141. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  142. package/lib/cjs/widget/components/ReportsContainer.scss +1 -3
  143. package/lib/cjs/widget/components/ReportsHeader.d.ts +7 -0
  144. package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -0
  145. package/lib/cjs/widget/components/ReportsHeader.js +20 -0
  146. package/lib/cjs/widget/components/ReportsHeader.js.map +1 -0
  147. package/lib/cjs/widget/components/ReportsRouter.d.ts +8 -0
  148. package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -0
  149. package/lib/cjs/widget/components/ReportsRouter.js +51 -0
  150. package/lib/cjs/widget/components/ReportsRouter.js.map +1 -0
  151. package/lib/cjs/widget/components/SearchBar.d.ts.map +1 -1
  152. package/lib/cjs/widget/components/SearchBar.js +4 -5
  153. package/lib/cjs/widget/components/SearchBar.js.map +1 -1
  154. package/lib/cjs/widget/components/SearchBar.scss +1 -2
  155. package/lib/cjs/widget/components/SelectIModel.d.ts +3 -3
  156. package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
  157. package/lib/cjs/widget/components/SelectIModel.js +10 -30
  158. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  159. package/lib/cjs/widget/components/SelectIModel.scss +2 -3
  160. package/lib/cjs/widget/components/utils.d.ts +1 -1
  161. package/lib/cjs/widget/components/utils.d.ts.map +1 -1
  162. package/lib/cjs/widget/components/utils.js +1 -1
  163. package/lib/cjs/widget/components/utils.js.map +1 -1
  164. package/lib/cjs/widget/components/utils.scss +16 -8
  165. package/lib/cjs/widget/context/BulkExtractorContext.d.ts +10 -0
  166. package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -0
  167. package/lib/cjs/widget/context/{ReportsApiConfigContext.js → BulkExtractorContext.js} +7 -10
  168. package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -0
  169. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts +16 -0
  170. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
  171. package/lib/cjs/widget/context/ReportsConfigApiContext.js +43 -0
  172. package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -0
  173. package/lib/cjs/widget/hooks/useValidator.js +1 -1
  174. package/lib/cjs/widget/hooks/useValidator.js.map +1 -1
  175. package/lib/esm/ReportsConfigWidget.js +1 -1
  176. package/lib/esm/ReportsConfigWidget.js.map +1 -1
  177. package/lib/esm/reports-config-widget-react.d.ts +5 -0
  178. package/lib/esm/reports-config-widget-react.d.ts.map +1 -1
  179. package/lib/esm/reports-config-widget-react.js +5 -0
  180. package/lib/esm/reports-config-widget-react.js.map +1 -1
  181. package/lib/esm/test/AddMappingModal.test.js +17 -31
  182. package/lib/esm/test/AddMappingModal.test.js.map +1 -1
  183. package/lib/esm/test/BulkExtractor.test.js +14 -17
  184. package/lib/esm/test/BulkExtractor.test.js.map +1 -1
  185. package/lib/esm/test/DeleteModal.test.d.ts.map +1 -1
  186. package/lib/esm/test/DeleteModal.test.js +5 -44
  187. package/lib/esm/test/DeleteModal.test.js.map +1 -1
  188. package/lib/esm/test/ReportAction.test.js +14 -60
  189. package/lib/esm/test/ReportAction.test.js.map +1 -1
  190. package/lib/esm/test/ReportMappingHorizontalTile.test.js +4 -38
  191. package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
  192. package/lib/esm/test/ReportMappings.test.d.ts.map +1 -1
  193. package/lib/esm/test/ReportMappings.test.js +43 -98
  194. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  195. package/lib/esm/test/Reports.test.js +24 -60
  196. package/lib/esm/test/Reports.test.js.map +1 -1
  197. package/lib/esm/test/WidgetHeader.test.js +8 -2
  198. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  199. package/lib/esm/test/test-utils.d.ts +3 -8
  200. package/lib/esm/test/test-utils.d.ts.map +1 -1
  201. package/lib/esm/test/test-utils.js +4 -31
  202. package/lib/esm/test/test-utils.js.map +1 -1
  203. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  204. package/lib/esm/widget/ReportsConfigUiProvider.d.ts +3 -3
  205. package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  206. package/lib/esm/widget/ReportsConfigUiProvider.js +2 -4
  207. package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
  208. package/lib/esm/widget/components/ActionPanel.d.ts +3 -3
  209. package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
  210. package/lib/esm/widget/components/ActionPanel.js +4 -4
  211. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  212. package/lib/esm/widget/components/ActionPanel.scss +2 -3
  213. package/lib/esm/widget/components/AddMappingsModal.d.ts +4 -4
  214. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  215. package/lib/esm/widget/components/AddMappingsModal.js +35 -39
  216. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  217. package/lib/esm/widget/components/AddMappingsModal.scss +1 -2
  218. package/lib/esm/widget/components/BulkExtractor.d.ts +4 -4
  219. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
  220. package/lib/esm/widget/components/BulkExtractor.js +7 -8
  221. package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
  222. package/lib/esm/widget/components/DeleteModal.d.ts +4 -5
  223. package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
  224. package/lib/esm/widget/components/DeleteModal.js +11 -15
  225. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  226. package/lib/esm/widget/components/DeleteModal.scss +2 -3
  227. package/lib/esm/widget/components/ExtractionStatus.scss +6 -7
  228. package/lib/esm/widget/components/HorizontalTile.scss +11 -14
  229. package/lib/esm/widget/components/ReportAction.d.ts +4 -5
  230. package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
  231. package/lib/esm/widget/components/ReportAction.js +17 -21
  232. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  233. package/lib/esm/widget/components/ReportAction.scss +1 -2
  234. package/lib/esm/widget/components/ReportHorizontalTile.d.ts +4 -4
  235. package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  236. package/lib/esm/widget/components/ReportHorizontalTile.js +6 -9
  237. package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
  238. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts +1 -1
  239. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  240. package/lib/esm/widget/components/ReportMappingHorizontalTile.js +12 -13
  241. package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  242. package/lib/esm/widget/components/ReportMappings.d.ts +4 -6
  243. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  244. package/lib/esm/widget/components/ReportMappings.js +43 -56
  245. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  246. package/lib/esm/widget/components/ReportMappings.scss +10 -11
  247. package/lib/esm/widget/components/Reports.d.ts +6 -1
  248. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  249. package/lib/esm/widget/components/Reports.js +46 -87
  250. package/lib/esm/widget/components/Reports.js.map +1 -1
  251. package/lib/esm/widget/components/Reports.scss +15 -15
  252. package/lib/esm/widget/components/ReportsConfigContext.d.ts +18 -0
  253. package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -0
  254. package/lib/esm/widget/components/ReportsConfigContext.js +56 -0
  255. package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -0
  256. package/lib/esm/widget/components/ReportsContainer.d.ts +14 -0
  257. package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
  258. package/lib/esm/widget/components/ReportsContainer.js +27 -17
  259. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  260. package/lib/esm/widget/components/ReportsContainer.scss +1 -3
  261. package/lib/esm/widget/components/ReportsHeader.d.ts +7 -0
  262. package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -0
  263. package/lib/esm/widget/components/ReportsHeader.js +13 -0
  264. package/lib/esm/widget/components/ReportsHeader.js.map +1 -0
  265. package/lib/esm/widget/components/ReportsRouter.d.ts +8 -0
  266. package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -0
  267. package/lib/esm/widget/components/ReportsRouter.js +44 -0
  268. package/lib/esm/widget/components/ReportsRouter.js.map +1 -0
  269. package/lib/esm/widget/components/SearchBar.d.ts.map +1 -1
  270. package/lib/esm/widget/components/SearchBar.js +2 -3
  271. package/lib/esm/widget/components/SearchBar.js.map +1 -1
  272. package/lib/esm/widget/components/SearchBar.scss +1 -2
  273. package/lib/esm/widget/components/SelectIModel.d.ts +3 -3
  274. package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
  275. package/lib/esm/widget/components/SelectIModel.js +7 -27
  276. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  277. package/lib/esm/widget/components/SelectIModel.scss +2 -3
  278. package/lib/esm/widget/components/utils.d.ts +1 -1
  279. package/lib/esm/widget/components/utils.d.ts.map +1 -1
  280. package/lib/esm/widget/components/utils.js +2 -2
  281. package/lib/esm/widget/components/utils.js.map +1 -1
  282. package/lib/esm/widget/components/utils.scss +16 -8
  283. package/lib/esm/widget/context/BulkExtractorContext.d.ts +10 -0
  284. package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -0
  285. package/lib/esm/widget/context/BulkExtractorContext.js +11 -0
  286. package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -0
  287. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts +16 -0
  288. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -0
  289. package/lib/esm/widget/context/ReportsConfigApiContext.js +20 -0
  290. package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -0
  291. package/lib/public/locales/en/ReportsConfigWidget.json +6 -1
  292. package/package.json +29 -29
  293. package/public/locales/en/ReportsConfigWidget.json +6 -1
  294. package/reports-config-widget-react.build.error.log +6 -6
  295. package/reports-config-widget-react.build.log +52 -49
  296. package/src/reports-config-widget-react.ts +6 -0
  297. package/src/test/AddMappingModal.test.tsx +20 -37
  298. package/src/test/BulkExtractor.test.ts +15 -17
  299. package/src/test/DeleteModal.test.tsx +4 -73
  300. package/src/test/ReportAction.test.tsx +17 -90
  301. package/src/test/ReportMappingHorizontalTile.test.tsx +3 -54
  302. package/src/test/ReportMappings.test.tsx +50 -135
  303. package/src/test/Reports.test.tsx +21 -80
  304. package/src/test/WidgetHeader.test.tsx +9 -2
  305. package/src/test/test-utils.tsx +9 -49
  306. package/src/widget/ReportsConfigUiProvider.tsx +7 -14
  307. package/src/widget/components/ActionPanel.scss +2 -3
  308. package/src/widget/components/ActionPanel.tsx +17 -15
  309. package/src/widget/components/AddMappingsModal.scss +1 -2
  310. package/src/widget/components/AddMappingsModal.tsx +55 -60
  311. package/src/widget/components/BulkExtractor.ts +11 -10
  312. package/src/widget/components/DeleteModal.scss +2 -3
  313. package/src/widget/components/DeleteModal.tsx +17 -23
  314. package/src/widget/components/ExtractionStatus.scss +6 -7
  315. package/src/widget/components/HorizontalTile.scss +11 -14
  316. package/src/widget/components/ReportAction.scss +1 -2
  317. package/src/widget/components/ReportAction.tsx +18 -33
  318. package/src/widget/components/ReportHorizontalTile.tsx +11 -12
  319. package/src/widget/components/ReportMappingHorizontalTile.tsx +30 -30
  320. package/src/widget/components/ReportMappings.scss +10 -11
  321. package/src/widget/components/ReportMappings.tsx +67 -72
  322. package/src/widget/components/Reports.scss +15 -15
  323. package/src/widget/components/Reports.tsx +140 -181
  324. package/src/widget/components/ReportsConfigContext.tsx +95 -0
  325. package/src/widget/components/ReportsContainer.scss +1 -3
  326. package/src/widget/components/ReportsContainer.tsx +47 -21
  327. package/src/widget/components/ReportsHeader.tsx +27 -0
  328. package/src/widget/components/ReportsRouter.tsx +63 -0
  329. package/src/widget/components/SearchBar.scss +1 -2
  330. package/src/widget/components/SearchBar.tsx +7 -2
  331. package/src/widget/components/SelectIModel.scss +2 -3
  332. package/src/widget/components/SelectIModel.tsx +11 -29
  333. package/src/widget/components/utils.scss +16 -8
  334. package/src/widget/components/utils.tsx +8 -7
  335. package/src/widget/context/{ReportsApiConfigContext.tsx → BulkExtractorContext.tsx} +9 -10
  336. package/src/widget/context/ReportsConfigApiContext.tsx +39 -0
  337. package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts +0 -9
  338. package/lib/cjs/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
  339. package/lib/cjs/widget/context/ReportsApiConfigContext.js.map +0 -1
  340. package/lib/esm/widget/context/ReportsApiConfigContext.d.ts +0 -9
  341. package/lib/esm/widget/context/ReportsApiConfigContext.d.ts.map +0 -1
  342. package/lib/esm/widget/context/ReportsApiConfigContext.js +0 -14
  343. package/lib/esm/widget/context/ReportsApiConfigContext.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsConfigWidget.js","sourceRoot":"","sources":["../../src/ReportsConfigWidget.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,OAAO,mBAAmB;IAIvB,MAAM,KAAK,qBAAqB;QACrC,OAAO,mBAAmB,CAAC,sBAAsB,CAAC;IACpD,CAAC;IAEM,MAAM,KAAK,YAAY;QAC5B,OAAO,mBAAmB,CAAC,aAAa,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA2B;QACxD,mBAAmB,CAAC,aAAa,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,SAAS,CAAC,YAAY,CAAC;QAC3E,qBAAqB;QACrB,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;QAC3D,MAAM,mBAAmB,CAAC,aAAa,CAAC,iBAAiB,CACvD,4BAA4B,CAC7B,CAAC;QAEF,mBAAmB,CAAC,sBAAsB,GAAG,4BAA4B,CAAC;IAC5E,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,CACnD,mBAAmB,CAAC,qBAAqB,CAC1C,CAAC;IACJ,CAAC;CACF","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 type { Localization } from \"@itwin/core-common\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\nexport class ReportsConfigWidget {\n private static _localizationNamespace: string;\n private static _localization: Localization;\n\n public static get localizationNamespace(): string {\n return ReportsConfigWidget._localizationNamespace;\n }\n\n public static get localization(): Localization {\n return ReportsConfigWidget._localization;\n }\n\n public static async initialize(localization?: Localization): Promise<void> {\n ReportsConfigWidget._localization = localization ?? IModelApp.localization;\n // Setup localization\n const ReportsConfigWidgetNamespace = \"ReportsConfigWidget\";\n await ReportsConfigWidget._localization.registerNamespace(\n ReportsConfigWidgetNamespace\n );\n\n ReportsConfigWidget._localizationNamespace = ReportsConfigWidgetNamespace;\n }\n\n public static terminate() {\n ReportsConfigWidget._localization.unregisterNamespace(\n ReportsConfigWidget.localizationNamespace\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ReportsConfigWidget.js","sourceRoot":"","sources":["../../src/ReportsConfigWidget.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,OAAO,mBAAmB;IAIvB,MAAM,KAAK,qBAAqB;QACrC,OAAO,mBAAmB,CAAC,sBAAsB,CAAC;IACpD,CAAC;IAEM,MAAM,KAAK,YAAY;QAC5B,OAAO,mBAAmB,CAAC,aAAa,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA2B;QACxD,mBAAmB,CAAC,aAAa,GAAG,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC;QAC3E,qBAAqB;QACrB,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;QAC3D,MAAM,mBAAmB,CAAC,aAAa,CAAC,iBAAiB,CACvD,4BAA4B,CAC7B,CAAC;QAEF,mBAAmB,CAAC,sBAAsB,GAAG,4BAA4B,CAAC;IAC5E,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,CACnD,mBAAmB,CAAC,qBAAqB,CAC1C,CAAC;IACJ,CAAC;CACF","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 type { Localization } from \"@itwin/core-common\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\nexport class ReportsConfigWidget {\n private static _localizationNamespace: string;\n private static _localization: Localization;\n\n public static get localizationNamespace(): string {\n return ReportsConfigWidget._localizationNamespace;\n }\n\n public static get localization(): Localization {\n return ReportsConfigWidget._localization;\n }\n\n public static async initialize(localization?: Localization): Promise<void> {\n ReportsConfigWidget._localization = localization ?? IModelApp.localization;\n // Setup localization\n const ReportsConfigWidgetNamespace = \"ReportsConfigWidget\";\n await ReportsConfigWidget._localization.registerNamespace(\n ReportsConfigWidgetNamespace\n );\n\n ReportsConfigWidget._localizationNamespace = ReportsConfigWidgetNamespace;\n }\n\n public static terminate() {\n ReportsConfigWidget._localization.unregisterNamespace(\n ReportsConfigWidget.localizationNamespace\n );\n }\n}\n"]}
@@ -1,4 +1,9 @@
1
1
  /** UI Provider for iTwin Viewer Applications */
2
2
  export * from "./widget/ReportsConfigUiProvider";
3
3
  export * from "./ReportsConfigWidget";
4
+ export { Reports, ReportsProps } from "./widget/components/Reports";
5
+ export { ReportMappings, ReportMappingsProps } from "./widget/components/ReportMappings";
6
+ export { ReportsConfigContext, ReportsConfigContextProps } from "./widget/components/ReportsConfigContext";
7
+ export { ReportAction, ReportActionProps } from "./widget/components/ReportAction";
8
+ export { BulkExtractor } from "./widget/components/BulkExtractor";
4
9
  //# sourceMappingURL=reports-config-widget-react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reports-config-widget-react.d.ts","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"reports-config-widget-react.d.ts","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
@@ -5,4 +5,9 @@
5
5
  /** UI Provider for iTwin Viewer Applications */
6
6
  export * from "./widget/ReportsConfigUiProvider";
7
7
  export * from "./ReportsConfigWidget";
8
+ export { Reports } from "./widget/components/Reports";
9
+ export { ReportMappings } from "./widget/components/ReportMappings";
10
+ export { ReportsConfigContext } from "./widget/components/ReportsConfigContext";
11
+ export { ReportAction } from "./widget/components/ReportAction";
12
+ export { BulkExtractor } from "./widget/components/BulkExtractor";
8
13
  //# sourceMappingURL=reports-config-widget-react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reports-config-widget-react.js","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,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/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/ReportsConfigUiProvider\";\nexport * from \"./ReportsConfigWidget\";\n"]}
1
+ {"version":3,"file":"reports-config-widget-react.js","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAgB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAuB,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,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/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/ReportsConfigUiProvider\";\nexport * from \"./ReportsConfigWidget\";\n\nexport { Reports, ReportsProps } from \"./widget/components/Reports\";\nexport { ReportMappings, ReportMappingsProps } from \"./widget/components/ReportMappings\";\nexport { ReportsConfigContext, ReportsConfigContextProps } from \"./widget/components/ReportsConfigContext\";\nexport { ReportAction, ReportActionProps } from \"./widget/components/ReportAction\";\nexport { BulkExtractor } from \"./widget/components/BulkExtractor\";\n"]}
@@ -5,9 +5,8 @@
5
5
  import React from "react";
6
6
  import faker from "@faker-js/faker";
7
7
  import "@testing-library/jest-dom";
8
- import { NoRenderApp } from "@itwin/core-frontend";
9
8
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
10
- import { render, screen, TestUtils, waitFor, within, } from "./test-utils";
9
+ import { render, screen, waitFor, within, } from "./test-utils";
11
10
  import * as moq from "typemoq";
12
11
  import { IModelState } from "@itwin/imodels-client-management";
13
12
  import { AddMappingsModal } from "../widget/components/AddMappingsModal";
@@ -164,52 +163,41 @@ const mockMappingsFactory = (mockReportMappings) => {
164
163
  };
165
164
  const mockReportMappingsAndMappingsFactory = (mockMappings, reportMappings) => {
166
165
  const reportMappingsAndMapping = reportMappings.mappings.map((reportMapping) => {
167
- var _a;
168
166
  const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId).mapping;
169
167
  const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId).displayName;
170
168
  const reportMappingAndMapping = {
171
169
  ...reportMapping,
172
170
  iModelName,
173
171
  mappingName: mapping.mappingName,
174
- mappingDescription: (_a = mapping.description) !== null && _a !== void 0 ? _a : "",
172
+ mappingDescription: mapping.description ?? "",
175
173
  };
176
174
  return reportMappingAndMapping;
177
175
  });
178
176
  return reportMappingsAndMapping;
179
177
  };
180
- const connectionMock = moq.Mock.ofType();
181
- const mockIModelsClient = moq.Mock.ofType();
182
- jest.mock("@itwin/appui-react", () => ({
183
- ...jest.requireActual("@itwin/appui-react"),
184
- useActiveIModelConnection: () => connectionMock.object,
185
- }));
186
178
  jest.mock("@itwin/imodels-client-management", () => ({
187
179
  ...jest.requireActual("@itwin/imodels-client-management"),
188
- IModelsClient: jest.fn().mockImplementation(() => ({
189
- iModels: mockIModelsClient.object,
190
- })),
191
180
  toArray: jest.fn().mockImplementation(async () => {
192
181
  return mockProjectIModels.iModels;
193
182
  }),
194
183
  }));
195
184
  const mockGetMappings = jest.fn();
196
185
  const mockCreateReportMapping = jest.fn();
197
- jest.mock("@itwin/insights-client", () => ({
198
- ...jest.requireActual("@itwin/insights-client"),
199
- MappingsClient: jest.fn().mockImplementation(() => ({
200
- getMappings: mockGetMappings,
201
- })),
202
- ReportsClient: jest.fn().mockImplementation(() => ({
203
- createReportMapping: mockCreateReportMapping,
204
- })),
205
- }));
186
+ const mockIModelsClient = moq.Mock.ofType();
187
+ const mockIModelsClientOperations = moq.Mock.ofType();
188
+ const mockReportsClient = moq.Mock.ofType();
189
+ const mockMappingsClient = moq.Mock.ofType();
206
190
  beforeAll(async () => {
207
- await NoRenderApp.startup({ localization: new EmptyLocalization() });
208
- connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId1);
209
- await ReportsConfigWidget.initialize();
210
- });
211
- afterAll(() => {
212
- TestUtils.terminateUiFramework();
191
+ const localization = new EmptyLocalization();
192
+ await ReportsConfigWidget.initialize(localization);
193
+ mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
194
+ .returns(async () => mockIModelsResponse[0].iModel);
195
+ mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
196
+ .returns(async () => mockIModelsResponse[1].iModel);
197
+ mockIModelsClient.setup((x) => x.iModels)
198
+ .returns(() => mockIModelsClientOperations.object);
199
+ mockReportsClient.setup(async (x) => x.createReportMapping(moq.It.isAny(), moq.It.isAny(), moq.It.isAny())).returns(mockCreateReportMapping);
200
+ mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);
213
201
  });
214
202
  afterEach(() => {
215
203
  mockGetMappings.mockReset();
@@ -221,7 +209,7 @@ describe("Add Mapping Modal", () => {
221
209
  const mockMappings = mockMappingsFactory(mockReportMappings);
222
210
  const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory(mockMappings, mockReportMappings);
223
211
  mockGetMappings.mockReturnValueOnce(mockMappings.map((m) => m.mapping));
224
- const { user } = render(React.createElement(AddMappingsModal, { show: true, reportId: mockReportId, existingMappings: mockReportMappingsAndMappings, returnFn: jest.fn() }));
212
+ const { user } = render(React.createElement(AddMappingsModal, { show: true, reportId: mockReportId, existingMappings: mockReportMappingsAndMappings, onClose: jest.fn(), defaultIModelId: mockIModelId1 }), { iTwinId: mockITwinId, reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object });
225
213
  expect(screen.getByRole("dialog")).toBeInTheDocument();
226
214
  const modal = screen.getByRole("dialog");
227
215
  const withinModal = within(modal);
@@ -229,8 +217,6 @@ describe("Add Mapping Modal", () => {
229
217
  const addButton = withinModal.getByRole("button", {
230
218
  name: /add/i,
231
219
  });
232
- // Add button should be disabled
233
- expect(addButton).toBeDisabled();
234
220
  await waitFor(() => screen.getByRole("row"));
235
221
  // Already mapped mappings are disabled
236
222
  for (let i = 0; i < mockMappings.length - 1; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"AddMappingModal.test.js","sourceRoot":"","sources":["../../../src/test/AddMappingModal.test.tsx"],"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 React from \"react\";\nimport faker from \"@faker-js/faker\";\nimport \"@testing-library/jest-dom\";\nimport type {\n IModelConnection,\n} from \"@itwin/core-frontend\";\nimport { NoRenderApp } from \"@itwin/core-frontend\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport {\n render,\n screen,\n TestUtils,\n waitFor,\n within,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type {\n MappingSingle,\n ReportMappingCollection,\n} from \"@itwin/insights-client\";\nimport type { ReportMappingAndMapping } from \"../widget/components/ReportMappings\";\nimport type { IModelOperations, OperationOptions } from \"@itwin/imodels-client-management\";\nimport { IModelState } from \"@itwin/imodels-client-management\";\nimport { AddMappingsModal } from \"../widget/components/AddMappingsModal\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId1 = faker.datatype.uuid();\nconst mockIModelId2 = faker.datatype.uuid();\n\nconst mockReportId = faker.datatype.uuid();\n\nconst mockIModelsResponse = [\n {\n iModel: {\n id: mockIModelId1,\n displayName: \"rAnDoMdIsPlAynAmE1\",\n name: \"rAnDomName1\",\n description: \"rAnDoMDeScRiPtIoN1\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n {\n iModel: {\n id: mockIModelId2,\n displayName: \"rAnDoMdIsPlAynAmE2\",\n name: \"rAnDomName2\",\n description: \"rAnDoMDeScRiPtIoN2\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n];\n\nconst mockProjectIModels = {\n iModels: mockIModelsResponse.map((iModel) => ({\n id: iModel.iModel.id,\n displayName: iModel.iModel.displayName,\n })),\n _links: {\n self: {\n href: \"\",\n },\n prev: null,\n next: null,\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId2,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (\n mockReportMappings: ReportMappingCollection\n): MappingSingle[] => {\n const mockMappings: MappingSingle[] = mockReportMappings.mappings.map(\n (mapping, index) => ({\n mapping: {\n id: mapping.mappingId,\n mappingName: `mOcKMaPpIngNaMe${index}`,\n description: `mOcKmApPInGDeScRiPtIoN${index}`,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n imodel: {\n // Tie the mapping to to the iModel Id\n href: mapping.imodelId,\n },\n },\n },\n })\n );\n\n const extraMappingId = faker.datatype.uuid();\n const extraMappingName = \"mOcKNaMeExTrA\";\n const extraMappingDescription = \"mOcKDeScRiPtIoNeXtRa\";\n\n mockMappings.push({\n mapping: {\n id: extraMappingId,\n mappingName: extraMappingName,\n description: extraMappingDescription,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n imodel: {\n href: \"\",\n },\n },\n },\n });\n\n return mockMappings;\n};\n\nconst mockReportMappingsAndMappingsFactory = (mockMappings: MappingSingle[], reportMappings: ReportMappingCollection): ReportMappingAndMapping[] => {\n const reportMappingsAndMapping =\n reportMappings.mappings.map((reportMapping) => {\n const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;\n const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mappingName,\n mappingDescription: mapping.description ?? \"\",\n };\n return reportMappingAndMapping;\n });\n return reportMappingsAndMapping;\n};\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst mockIModelsClient = moq.Mock.ofType<IModelOperations<OperationOptions>>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/imodels-client-management\", () => ({\n ...jest.requireActual(\"@itwin/imodels-client-management\"),\n IModelsClient: jest.fn().mockImplementation(() => ({\n iModels: mockIModelsClient.object,\n })),\n toArray: jest.fn().mockImplementation(async () => {\n return mockProjectIModels.iModels;\n }),\n}));\n\nconst mockGetMappings = jest.fn();\nconst mockCreateReportMapping = jest.fn();\n\njest.mock(\"@itwin/insights-client\", () => ({\n ...jest.requireActual(\"@itwin/insights-client\"),\n MappingsClient: jest.fn().mockImplementation(() => ({\n getMappings: mockGetMappings,\n })),\n ReportsClient: jest.fn().mockImplementation(() => ({\n createReportMapping: mockCreateReportMapping,\n })),\n}));\n\nbeforeAll(async () => {\n await NoRenderApp.startup({localization: new EmptyLocalization()});\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId1);\n await ReportsConfigWidget.initialize();\n});\n\nafterAll(() => {\n TestUtils.terminateUiFramework();\n});\n\nafterEach(() => {\n mockGetMappings.mockReset();\n mockIModelsClient.reset();\n});\n\ndescribe(\"Add Mapping Modal\", () => {\n it(\"Adding mapping sends create request\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory(mockMappings, mockReportMappings);\n\n mockGetMappings.mockReturnValueOnce(mockMappings.map((m: MappingSingle) => m.mapping));\n\n const { user } = render(\n <AddMappingsModal\n show={true}\n reportId={mockReportId}\n existingMappings={mockReportMappingsAndMappings}\n returnFn={jest.fn()}\n />\n );\n\n expect(screen.getByRole(\"dialog\")).toBeInTheDocument();\n const modal = screen.getByRole(\"dialog\");\n const withinModal = within(modal);\n expect(withinModal.getByText(/addmappings/i)).toBeInTheDocument();\n\n const addButton = withinModal.getByRole(\"button\", {\n name: /add/i,\n });\n // Add button should be disabled\n expect(addButton).toBeDisabled();\n\n await waitFor(() => screen.getByRole(\"row\"));\n\n // Already mapped mappings are disabled\n for (let i = 0; i < mockMappings.length - 1; i++) {\n const row = screen.getByRole(\"row\", {\n name: new RegExp(\n `${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`,\n \"i\"\n ),\n });\n\n const checkbox = within(row).getByRole(\"checkbox\");\n expect(checkbox).toBeDisabled();\n }\n\n // Click on checkbox on new mapping\n const unmappedRow = screen.getByRole(\"row\", {\n name: new RegExp(\n `${mockMappings[mockMappings.length - 1].mapping.mappingName\n } ${mockMappings[mockMappings.length - 1].mapping.description}`,\n \"i\"\n ),\n });\n\n const enabledCheckbox = within(unmappedRow).getByRole(\"checkbox\");\n\n await user.click(enabledCheckbox);\n await user.click(addButton);\n\n expect(mockCreateReportMapping).toBeCalledTimes(1);\n });\n});\n"]}
1
+ {"version":3,"file":"AddMappingModal.test.js","sourceRoot":"","sources":["../../../src/test/AddMappingModal.test.tsx"],"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 React from \"react\";\nimport faker from \"@faker-js/faker\";\nimport \"@testing-library/jest-dom\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport {\n render,\n screen,\n waitFor,\n within,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type {\n MappingsClient,\n MappingSingle,\n ReportMappingCollection,\n ReportsClient,\n} from \"@itwin/insights-client\";\nimport type { ReportMappingAndMapping } from \"../widget/components/ReportMappings\";\nimport type { GetSingleIModelParams, IModelOperations, IModelsClient, OperationOptions } from \"@itwin/imodels-client-management\";\nimport { IModelState } from \"@itwin/imodels-client-management\";\nimport { AddMappingsModal } from \"../widget/components/AddMappingsModal\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId1 = faker.datatype.uuid();\nconst mockIModelId2 = faker.datatype.uuid();\n\nconst mockReportId = faker.datatype.uuid();\n\nconst mockIModelsResponse = [\n {\n iModel: {\n id: mockIModelId1,\n displayName: \"rAnDoMdIsPlAynAmE1\",\n name: \"rAnDomName1\",\n description: \"rAnDoMDeScRiPtIoN1\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n {\n iModel: {\n id: mockIModelId2,\n displayName: \"rAnDoMdIsPlAynAmE2\",\n name: \"rAnDomName2\",\n description: \"rAnDoMDeScRiPtIoN2\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n];\n\nconst mockProjectIModels = {\n iModels: mockIModelsResponse.map((iModel) => ({\n id: iModel.iModel.id,\n displayName: iModel.iModel.displayName,\n })),\n _links: {\n self: {\n href: \"\",\n },\n prev: null,\n next: null,\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId2,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (\n mockReportMappings: ReportMappingCollection\n): MappingSingle[] => {\n const mockMappings: MappingSingle[] = mockReportMappings.mappings.map(\n (mapping, index) => ({\n mapping: {\n id: mapping.mappingId,\n mappingName: `mOcKMaPpIngNaMe${index}`,\n description: `mOcKmApPInGDeScRiPtIoN${index}`,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n imodel: {\n // Tie the mapping to to the iModel Id\n href: mapping.imodelId,\n },\n },\n },\n })\n );\n\n const extraMappingId = faker.datatype.uuid();\n const extraMappingName = \"mOcKNaMeExTrA\";\n const extraMappingDescription = \"mOcKDeScRiPtIoNeXtRa\";\n\n mockMappings.push({\n mapping: {\n id: extraMappingId,\n mappingName: extraMappingName,\n description: extraMappingDescription,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n imodel: {\n href: \"\",\n },\n },\n },\n });\n\n return mockMappings;\n};\n\nconst mockReportMappingsAndMappingsFactory = (mockMappings: MappingSingle[], reportMappings: ReportMappingCollection): ReportMappingAndMapping[] => {\n const reportMappingsAndMapping =\n reportMappings.mappings.map((reportMapping) => {\n const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;\n const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mappingName,\n mappingDescription: mapping.description ?? \"\",\n };\n return reportMappingAndMapping;\n });\n return reportMappingsAndMapping;\n};\n\njest.mock(\"@itwin/imodels-client-management\", () => ({\n ...jest.requireActual(\"@itwin/imodels-client-management\"),\n toArray: jest.fn().mockImplementation(async () => {\n return mockProjectIModels.iModels;\n }),\n}));\n\nconst mockGetMappings = jest.fn();\nconst mockCreateReportMapping = jest.fn();\n\nconst mockIModelsClient = moq.Mock.ofType<IModelsClient>();\nconst mockIModelsClientOperations = moq.Mock.ofType<IModelOperations<OperationOptions>>();\nconst mockReportsClient = moq.Mock.ofType<ReportsClient>();\nconst mockMappingsClient = moq.Mock.ofType<MappingsClient>();\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))\n .returns(async () => mockIModelsResponse[0].iModel);\n mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId2 })))\n .returns(async () => mockIModelsResponse[1].iModel);\n mockIModelsClient.setup((x) => x.iModels)\n .returns(() => mockIModelsClientOperations.object);\n mockReportsClient.setup(async (x) => x.createReportMapping(moq.It.isAny(), moq.It.isAny(), moq.It.isAny())).returns(mockCreateReportMapping);\n mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);\n});\n\nafterEach(() => {\n mockGetMappings.mockReset();\n mockIModelsClient.reset();\n});\n\ndescribe(\"Add Mapping Modal\", () => {\n it(\"Adding mapping sends create request\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory(mockMappings, mockReportMappings);\n\n mockGetMappings.mockReturnValueOnce(mockMappings.map((m: MappingSingle) => m.mapping));\n\n const { user } = render(\n <AddMappingsModal\n show={true}\n reportId={mockReportId}\n existingMappings={mockReportMappingsAndMappings}\n onClose={jest.fn()}\n defaultIModelId={mockIModelId1}\n />, { iTwinId: mockITwinId, reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object }\n );\n\n expect(screen.getByRole(\"dialog\")).toBeInTheDocument();\n const modal = screen.getByRole(\"dialog\");\n const withinModal = within(modal);\n expect(withinModal.getByText(/addmappings/i)).toBeInTheDocument();\n\n const addButton = withinModal.getByRole(\"button\", {\n name: /add/i,\n });\n\n await waitFor(() => screen.getByRole(\"row\"));\n\n // Already mapped mappings are disabled\n for (let i = 0; i < mockMappings.length - 1; i++) {\n const row = screen.getByRole(\"row\", {\n name: new RegExp(\n `${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`,\n \"i\"\n ),\n });\n\n const checkbox = within(row).getByRole(\"checkbox\");\n expect(checkbox).toBeDisabled();\n }\n\n // Click on checkbox on new mapping\n const unmappedRow = screen.getByRole(\"row\", {\n name: new RegExp(\n `${mockMappings[mockMappings.length - 1].mapping.mappingName\n } ${mockMappings[mockMappings.length - 1].mapping.description}`,\n \"i\"\n ),\n });\n\n const enabledCheckbox = within(unmappedRow).getByRole(\"checkbox\");\n\n await user.click(enabledCheckbox);\n await user.click(addButton);\n\n expect(mockCreateReportMapping).toBeCalledTimes(1);\n });\n});\n"]}
@@ -2,11 +2,11 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import BulkExtractor from "../widget/components/BulkExtractor";
5
+ import { BulkExtractor } from "../widget/components/BulkExtractor";
6
6
  import { ExtractionStates } from "../widget/components/ExtractionStatus";
7
7
  import { assert } from "chai";
8
8
  import * as moq from "typemoq";
9
- import { ExtractorState } from "@itwin/insights-client";
9
+ import { ExtractionClient, ExtractorState, ReportsClient } from "@itwin/insights-client";
10
10
  jest.mock("../widget/components/Constants.ts", () => ({
11
11
  STATUS_CHECK_INTERVAL: -1,
12
12
  }));
@@ -32,25 +32,22 @@ afterEach(() => {
32
32
  mockGetStatus.reset();
33
33
  });
34
34
  const mockToastCallback = jest.fn();
35
+ const mockGetAccessToken = async () => "mockAccessToken";
35
36
  const mockIModelId = "mockIModelId";
36
37
  const mockIModelId1 = "mockIModelId1";
37
38
  const mockReportId = "mockReportId";
38
39
  const mockRunId = "mockRunId";
39
40
  const mockRunId1 = "mockRunId1";
40
41
  describe("BulkExtractor", () => {
41
- const mockApiConfig = {
42
- getAccessToken: async () => "mockAccessToken",
43
- baseUrl: "",
44
- };
45
42
  it("should return status none for unknown iModel", async () => {
46
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
43
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
47
44
  const result = await sut.getIModelState(mockIModelId, "", "");
48
45
  assert.strictEqual(result, ExtractionStates.None);
49
46
  });
50
47
  it("should return running status for started extraction", async () => {
51
48
  mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(async () => ({ id: mockRunId }));
52
49
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
53
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
50
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
54
51
  await sut.runIModelExtraction(mockIModelId);
55
52
  const result = await sut.getIModelState(mockIModelId, "", "");
56
53
  assert.strictEqual(result, ExtractionStates.Running);
@@ -58,7 +55,7 @@ describe("BulkExtractor", () => {
58
55
  it("should return failed status for failed extraction", async () => {
59
56
  mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(async () => ({ id: mockRunId }));
60
57
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Failed }));
61
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
58
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
62
59
  await sut.runIModelExtraction(mockIModelId);
63
60
  const result = await sut.getIModelState(mockIModelId, "", "");
64
61
  assert.strictEqual(result, ExtractionStates.Failed);
@@ -68,7 +65,7 @@ describe("BulkExtractor", () => {
68
65
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Queued }));
69
66
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
70
67
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Succeeded }));
71
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
68
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
72
69
  await sut.runIModelExtraction(mockIModelId);
73
70
  let result = await sut.getIModelState(mockIModelId, "", "");
74
71
  assert.strictEqual(result, ExtractionStates.Queued);
@@ -83,7 +80,7 @@ describe("BulkExtractor", () => {
83
80
  mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(async () => ({ id: mockRunId1 }));
84
81
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Queued }));
85
82
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractorState.Queued }));
86
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
83
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
87
84
  await sut.runIModelExtractions(mockIModelIds);
88
85
  const result1 = await sut.getIModelState(mockIModelId, "", "");
89
86
  const result2 = await sut.getIModelState(mockIModelId1, "", "");
@@ -91,7 +88,7 @@ describe("BulkExtractor", () => {
91
88
  assert.strictEqual(result2, ExtractionStates.Queued);
92
89
  });
93
90
  it("should return status none for unknown report", async () => {
94
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
91
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
95
92
  const result = await sut.getReportState(mockReportId);
96
93
  assert.strictEqual(result, ExtractionStates.None);
97
94
  });
@@ -99,7 +96,7 @@ describe("BulkExtractor", () => {
99
96
  mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(async () => ({ id: mockRunId }));
100
97
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
101
98
  mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => ([{ imodelId: mockIModelId }]));
102
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
99
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
103
100
  await sut.runReportExtractions([mockReportId]);
104
101
  const result = await sut.getReportState(mockReportId);
105
102
  assert.strictEqual(result, ExtractionStates.Running);
@@ -110,7 +107,7 @@ describe("BulkExtractor", () => {
110
107
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
111
108
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractorState.Running }));
112
109
  mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }]));
113
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
110
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
114
111
  await sut.runReportExtractions([mockReportId]);
115
112
  const result1 = await sut.getIModelState(mockIModelId, "", "");
116
113
  const result2 = await sut.getIModelState(mockIModelId1, "", "");
@@ -123,7 +120,7 @@ describe("BulkExtractor", () => {
123
120
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
124
121
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractorState.Queued }));
125
122
  mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }]));
126
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
123
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
127
124
  await sut.runReportExtractions([mockReportId]);
128
125
  const result = await sut.getReportState(mockReportId);
129
126
  assert.strictEqual(result, ExtractionStates.Queued);
@@ -134,7 +131,7 @@ describe("BulkExtractor", () => {
134
131
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Succeeded }));
135
132
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(async () => ({ state: ExtractorState.Failed }));
136
133
  mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => ([{ imodelId: mockIModelId1 }, { imodelId: mockIModelId1 }]));
137
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
134
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
138
135
  await sut.runReportExtractions([mockReportId]);
139
136
  const result = await sut.getReportState(mockReportId);
140
137
  assert.strictEqual(result, ExtractionStates.Failed);
@@ -145,7 +142,7 @@ describe("BulkExtractor", () => {
145
142
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Running }));
146
143
  mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(async () => ({ state: ExtractorState.Succeeded }));
147
144
  mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(async () => ([{ imodelId: mockIModelId }]));
148
- const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);
145
+ const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);
149
146
  await sut.runReportExtractions([mockReportId]);
150
147
  let result = await sut.getReportState(mockReportId);
151
148
  assert.strictEqual(result, ExtractionStates.Queued);
@@ -1 +1 @@
1
- {"version":3,"file":"BulkExtractor.test.js","sourceRoot":"","sources":["../../../src/test/BulkExtractor.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 BulkExtractor from \"../widget/components/BulkExtractor\";\nimport { ExtractionStates } from \"../widget/components/ExtractionStatus\";\nimport { assert } from \"chai\";\nimport * as moq from \"typemoq\";\nimport { ExtractorState } from \"@itwin/insights-client\";\nimport type { AccessToken } from \"@itwin/core-bentley\";\n\njest.mock(\"../widget/components/Constants.ts\", () => ({\n STATUS_CHECK_INTERVAL: -1,\n}));\n\njest.mock(\"../widget/components/ExtractionToast.tsx\", () => ({\n FailedExtractionToast: jest.fn(),\n SuccessfulExtractionToast: jest.fn(),\n}));\n\nconst mockRunExtraction = moq.Mock.ofType<(accessToken: AccessToken, iModelId: string) => Promise<{ id: string }>>();\nconst mockGetStatus = moq.Mock.ofType<(accessToken: AccessToken, jobId: string) => Promise<{ state: ExtractorState }>>();\nconst mockGetReportMappings = moq.Mock.ofType<(accessToken: AccessToken, reportId: string) => Promise<{ imodelId: string }[]>>();\n\njest.mock(\"@itwin/insights-client\", () => ({\n ...jest.requireActual(\"@itwin/insights-client\"),\n ReportsClient: jest.fn().mockImplementation(() => ({\n getReportMappings: mockGetReportMappings.object,\n })),\n ExtractionClient: jest.fn().mockImplementation(() => ({\n runExtraction: mockRunExtraction.object,\n getExtractionStatus: mockGetStatus.object,\n })),\n}));\n\nafterEach(() => {\n mockRunExtraction.reset();\n mockGetStatus.reset();\n});\n\nconst mockToastCallback = jest.fn();\n\nconst mockIModelId = \"mockIModelId\";\nconst mockIModelId1 = \"mockIModelId1\";\nconst mockReportId = \"mockReportId\";\nconst mockRunId = \"mockRunId\";\nconst mockRunId1 = \"mockRunId1\";\n\ndescribe(\"BulkExtractor\", () => {\n const mockApiConfig = {\n getAccessToken: async () => \"mockAccessToken\",\n baseUrl: \"\",\n };\n\n it(\"should return status none for unknown iModel\", async () => {\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.None);\n });\n\n it(\"should return running status for started extraction\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Running);\n });\n\n it(\"should return failed status for failed extraction\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Failed })\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Failed);\n });\n\n it(\"full status check cycle\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n\n let result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Queued);\n\n result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Running);\n\n result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Succeeded);\n });\n\n it(\"two started jobs should return status\", async () => {\n const mockIModelIds = [mockIModelId, mockIModelId1];\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n\n await sut.runIModelExtractions(mockIModelIds);\n\n const result1 = await sut.getIModelState(mockIModelId, \"\", \"\");\n const result2 = await sut.getIModelState(mockIModelId1, \"\", \"\");\n\n assert.strictEqual(result1, ExtractionStates.Queued);\n assert.strictEqual(result2, ExtractionStates.Queued);\n });\n\n it(\"should return status none for unknown report\", async () => {\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.None);\n });\n\n it(\"should return status running for running report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }])\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Running);\n });\n\n it(\"should return status running for both iModels in report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result1 = await sut.getIModelState(mockIModelId, \"\", \"\");\n const result2 = await sut.getIModelState(mockIModelId1, \"\", \"\");\n\n assert.strictEqual(result1, ExtractionStates.Running);\n assert.strictEqual(result2, ExtractionStates.Running);\n });\n\n it(\"should return lowest progress status for extractions in report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Queued);\n });\n\n it(\"should return status failed if one of the extractions in report failed\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Failed })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId1 }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Failed);\n });\n\n it(\"full report extraction status check cycle\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }])\n );\n\n const sut = new BulkExtractor(mockApiConfig, mockToastCallback, mockToastCallback);\n await sut.runReportExtractions([mockReportId]);\n\n let result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Queued);\n\n result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Running);\n\n result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Succeeded);\n });\n});\n"]}
1
+ {"version":3,"file":"BulkExtractor.test.js","sourceRoot":"","sources":["../../../src/test/BulkExtractor.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 { BulkExtractor } from \"../widget/components/BulkExtractor\";\nimport { ExtractionStates } from \"../widget/components/ExtractionStatus\";\nimport { assert } from \"chai\";\nimport * as moq from \"typemoq\";\nimport { ExtractionClient, ExtractorState, ReportsClient } from \"@itwin/insights-client\";\nimport type { AccessToken } from \"@itwin/core-bentley\";\n\njest.mock(\"../widget/components/Constants.ts\", () => ({\n STATUS_CHECK_INTERVAL: -1,\n}));\n\njest.mock(\"../widget/components/ExtractionToast.tsx\", () => ({\n FailedExtractionToast: jest.fn(),\n SuccessfulExtractionToast: jest.fn(),\n}));\n\nconst mockRunExtraction = moq.Mock.ofType<(accessToken: AccessToken, iModelId: string) => Promise<{ id: string }>>();\nconst mockGetStatus = moq.Mock.ofType<(accessToken: AccessToken, jobId: string) => Promise<{ state: ExtractorState }>>();\nconst mockGetReportMappings = moq.Mock.ofType<(accessToken: AccessToken, reportId: string) => Promise<{ imodelId: string }[]>>();\n\njest.mock(\"@itwin/insights-client\", () => ({\n ...jest.requireActual(\"@itwin/insights-client\"),\n ReportsClient: jest.fn().mockImplementation(() => ({\n getReportMappings: mockGetReportMappings.object,\n })),\n ExtractionClient: jest.fn().mockImplementation(() => ({\n runExtraction: mockRunExtraction.object,\n getExtractionStatus: mockGetStatus.object,\n })),\n}));\n\nafterEach(() => {\n mockRunExtraction.reset();\n mockGetStatus.reset();\n});\n\nconst mockToastCallback = jest.fn();\n\nconst mockGetAccessToken = async () => \"mockAccessToken\";\n\nconst mockIModelId = \"mockIModelId\";\nconst mockIModelId1 = \"mockIModelId1\";\nconst mockReportId = \"mockReportId\";\nconst mockRunId = \"mockRunId\";\nconst mockRunId1 = \"mockRunId1\";\n\ndescribe(\"BulkExtractor\", () => {\n\n it(\"should return status none for unknown iModel\", async () => {\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.None);\n });\n\n it(\"should return running status for started extraction\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Running);\n });\n\n it(\"should return failed status for failed extraction\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Failed })\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n const result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Failed);\n });\n\n it(\"full status check cycle\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n await sut.runIModelExtraction(mockIModelId);\n\n let result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Queued);\n\n result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Running);\n\n result = await sut.getIModelState(mockIModelId, \"\", \"\");\n assert.strictEqual(result, ExtractionStates.Succeeded);\n });\n\n it(\"two started jobs should return status\", async () => {\n const mockIModelIds = [mockIModelId, mockIModelId1];\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n\n await sut.runIModelExtractions(mockIModelIds);\n\n const result1 = await sut.getIModelState(mockIModelId, \"\", \"\");\n const result2 = await sut.getIModelState(mockIModelId1, \"\", \"\");\n\n assert.strictEqual(result1, ExtractionStates.Queued);\n assert.strictEqual(result2, ExtractionStates.Queued);\n });\n\n it(\"should return status none for unknown report\", async () => {\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.None);\n });\n\n it(\"should return status running for running report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }])\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Running);\n });\n\n it(\"should return status running for both iModels in report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result1 = await sut.getIModelState(mockIModelId, \"\", \"\");\n const result2 = await sut.getIModelState(mockIModelId1, \"\", \"\");\n\n assert.strictEqual(result1, ExtractionStates.Running);\n assert.strictEqual(result2, ExtractionStates.Running);\n });\n\n it(\"should return lowest progress status for extractions in report\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Queued);\n });\n\n it(\"should return status failed if one of the extractions in report failed\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId1)).returns(\n async () => ({ id: mockRunId1 })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId1)).returns(\n async () => ({ state: ExtractorState.Failed })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId1 }, { imodelId: mockIModelId1 }])\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n\n await sut.runReportExtractions([mockReportId]);\n\n const result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Failed);\n });\n\n it(\"full report extraction status check cycle\", async () => {\n mockRunExtraction.setup(async (x) => x(moq.It.isAny(), mockIModelId)).returns(\n async () => ({ id: mockRunId })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Queued })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Running })\n );\n\n mockGetStatus.setup(async (x) => x(moq.It.isAny(), mockRunId)).returns(\n async () => ({ state: ExtractorState.Succeeded })\n );\n\n mockGetReportMappings.setup(async (x) => x(moq.It.isAny(), mockReportId)).returns(\n async () => ([{ imodelId: mockIModelId }])\n );\n\n const sut = new BulkExtractor(new ReportsClient(), new ExtractionClient(), mockGetAccessToken, mockToastCallback, mockToastCallback);\n await sut.runReportExtractions([mockReportId]);\n\n let result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Queued);\n\n result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Running);\n\n result = await sut.getReportState(mockReportId);\n assert.strictEqual(result, ExtractionStates.Succeeded);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteModal.test.d.ts","sourceRoot":"","sources":["../../../src/test/DeleteModal.test.tsx"],"names":[],"mappings":"AAMA,OAAO,2BAA2B,CAAC"}
1
+ {"version":3,"file":"DeleteModal.test.d.ts","sourceRoot":"","sources":["../../../src/test/DeleteModal.test.tsx"],"names":[],"mappings":"AAKA,OAAO,2BAA2B,CAAC"}
@@ -3,67 +3,28 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
- import faker from "@faker-js/faker";
7
6
  import "@testing-library/jest-dom";
8
- import { NoRenderApp } from "@itwin/core-frontend";
9
- import { render, screen, TestUtils, } from "./test-utils";
10
- import * as moq from "typemoq";
11
- import { Presentation, SelectionChangeEvent, } from "@itwin/presentation-frontend";
7
+ import { render, screen, } from "./test-utils";
12
8
  import DeleteModal from "../widget/components/DeleteModal";
13
9
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
14
10
  import { EmptyLocalization } from "@itwin/core-common";
15
- const mockITwinId = faker.datatype.uuid();
16
- const mockIModelId1 = faker.datatype.uuid();
17
- const connectionMock = moq.Mock.ofType();
18
- const selectionManagerMock = moq.Mock.ofType();
19
- const selectionScopesManagerMock = moq.Mock.ofType();
20
11
  beforeAll(async () => {
21
- await NoRenderApp.startup({ localization: new EmptyLocalization() });
22
- await Presentation.initialize();
23
- const selectionSet = moq.Mock.ofType();
24
- const onChanged = moq.Mock.ofType();
25
- selectionSet.setup((x) => x.elements).returns(() => new Set([]));
26
- selectionSet.setup((x) => x.onChanged).returns(() => onChanged.object);
27
- connectionMock
28
- .setup((x) => x.selectionSet)
29
- .returns(() => selectionSet.object);
30
- connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId1);
31
- connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);
32
- selectionManagerMock
33
- .setup((x) => x.selectionChange)
34
- .returns(() => new SelectionChangeEvent());
35
- selectionScopesManagerMock
36
- .setup(async (x) => x.getSelectionScopes(connectionMock.object))
37
- .returns(async () => []);
38
- selectionManagerMock
39
- .setup((x) => x.scopes)
40
- .returns(() => selectionScopesManagerMock.object);
41
- Presentation.setSelectionManager(selectionManagerMock.object);
42
- await TestUtils.initializeUiFramework(connectionMock.object);
43
- await ReportsConfigWidget.initialize();
12
+ const localization = new EmptyLocalization();
13
+ await ReportsConfigWidget.initialize(localization);
44
14
  });
45
15
  describe("Delete modal", () => {
46
16
  it("should render", () => {
47
- const { container } = render(React.createElement(DeleteModal, { entityName: "test", show: true, setShow: jest.fn(), onDelete: jest.fn(), refresh: jest.fn() }));
17
+ const { container } = render(React.createElement(DeleteModal, { entityName: "test", onDelete: jest.fn(), refresh: jest.fn(), onClose: jest.fn() }));
48
18
  expect(container).toBeTruthy();
49
19
  });
50
20
  it("should call onDelete when delete button is clicked", async () => {
51
21
  const onDelete = jest.fn();
52
- const { user } = render(React.createElement(DeleteModal, { entityName: "test", show: true, setShow: jest.fn(), onDelete: onDelete, refresh: jest.fn() }));
22
+ const { user } = render(React.createElement(DeleteModal, { entityName: "test", onDelete: onDelete, refresh: jest.fn(), onClose: jest.fn() }));
53
23
  const deleteButton = screen.getByRole("button", {
54
24
  name: /delete/i,
55
25
  });
56
26
  await user.click(deleteButton);
57
27
  expect(onDelete).toHaveBeenCalled();
58
28
  });
59
- it("should call setShow when cancel button is clicked", async () => {
60
- const setShow = jest.fn();
61
- const { user } = render(React.createElement(DeleteModal, { entityName: "test", show: true, setShow: setShow, onDelete: jest.fn(), refresh: jest.fn() }));
62
- const cancelButton = screen.getByRole("button", {
63
- name: /cancel/i,
64
- });
65
- await user.click(cancelButton);
66
- expect(setShow).toHaveBeenCalled();
67
- });
68
29
  });
69
30
  //# sourceMappingURL=DeleteModal.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteModal.test.js","sourceRoot":"","sources":["../../../src/test/DeleteModal.test.tsx"],"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 React from \"react\";\nimport faker from \"@faker-js/faker\";\nimport \"@testing-library/jest-dom\";\nimport type {\n IModelConnection,\n SelectionSet,\n SelectionSetEvent,\n} from \"@itwin/core-frontend\";\nimport { NoRenderApp } from \"@itwin/core-frontend\";\nimport {\n render,\n screen,\n TestUtils,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type {\n SelectionManager,\n SelectionScopesManager,\n} from \"@itwin/presentation-frontend\";\nimport {\n Presentation,\n SelectionChangeEvent,\n} from \"@itwin/presentation-frontend\";\nimport type { BeEvent } from \"@itwin/core-bentley\";\nimport DeleteModal from \"../widget/components/DeleteModal\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId1 = faker.datatype.uuid();\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst selectionManagerMock = moq.Mock.ofType<SelectionManager>();\nconst selectionScopesManagerMock = moq.Mock.ofType<SelectionScopesManager>();\n\nbeforeAll(async () => {\n await NoRenderApp.startup({localization: new EmptyLocalization()});\n await Presentation.initialize();\n const selectionSet = moq.Mock.ofType<SelectionSet>();\n const onChanged = moq.Mock.ofType<BeEvent<(ev: SelectionSetEvent) => void>>();\n selectionSet.setup((x) => x.elements).returns(() => new Set([]));\n selectionSet.setup((x) => x.onChanged).returns(() => onChanged.object);\n connectionMock\n .setup((x) => x.selectionSet)\n .returns(() => selectionSet.object);\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId1);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n selectionManagerMock\n .setup((x) => x.selectionChange)\n .returns(() => new SelectionChangeEvent());\n\n selectionScopesManagerMock\n .setup(async (x) => x.getSelectionScopes(connectionMock.object))\n .returns(async () => []);\n selectionManagerMock\n .setup((x) => x.scopes)\n .returns(() => selectionScopesManagerMock.object);\n\n Presentation.setSelectionManager(selectionManagerMock.object);\n await TestUtils.initializeUiFramework(connectionMock.object);\n await ReportsConfigWidget.initialize();\n});\n\ndescribe(\"Delete modal\", () => {\n it(\"should render\", () => {\n const { container } = render(\n <DeleteModal\n entityName=\"test\"\n show={true}\n setShow={jest.fn()}\n onDelete={jest.fn()}\n refresh={jest.fn()}\n />\n );\n expect(container).toBeTruthy();\n });\n\n it(\"should call onDelete when delete button is clicked\", async () => {\n const onDelete = jest.fn();\n const { user } = render(\n <DeleteModal\n entityName=\"test\"\n show={true}\n setShow={jest.fn()}\n onDelete={onDelete}\n refresh={jest.fn()}\n />\n );\n const deleteButton = screen.getByRole(\"button\", {\n name: /delete/i,\n });\n await user.click(deleteButton);\n expect(onDelete).toHaveBeenCalled();\n });\n\n it(\"should call setShow when cancel button is clicked\", async () => {\n const setShow = jest.fn();\n const { user } = render(\n <DeleteModal\n entityName=\"test\"\n show={true}\n setShow={setShow}\n onDelete={jest.fn()}\n refresh={jest.fn()}\n />\n );\n const cancelButton = screen.getByRole(\"button\", {\n name: /cancel/i,\n });\n await user.click(cancelButton);\n expect(setShow).toHaveBeenCalled();\n });\n});\n"]}
1
+ {"version":3,"file":"DeleteModal.test.js","sourceRoot":"","sources":["../../../src/test/DeleteModal.test.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,2BAA2B,CAAC;AACnC,OAAO,EACL,MAAM,EACN,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC7C,MAAM,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,oBAAC,WAAW,IACV,UAAU,EAAC,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,EACnB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAClB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,GAClB,CACH,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CACrB,oBAAC,WAAW,IACV,UAAU,EAAC,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAClB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,GAClB,CACH,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC9C,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtC,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*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport {\n render,\n screen,\n} from \"./test-utils\";\nimport DeleteModal from \"../widget/components/DeleteModal\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n});\n\ndescribe(\"Delete modal\", () => {\n it(\"should render\", () => {\n const { container } = render(\n <DeleteModal\n entityName=\"test\"\n onDelete={jest.fn()}\n refresh={jest.fn()}\n onClose={jest.fn()}\n />\n );\n expect(container).toBeTruthy();\n });\n\n it(\"should call onDelete when delete button is clicked\", async () => {\n const onDelete = jest.fn();\n const { user } = render(\n <DeleteModal\n entityName=\"test\"\n onDelete={onDelete}\n refresh={jest.fn()}\n onClose={jest.fn()}\n />\n );\n const deleteButton = screen.getByRole(\"button\", {\n name: /delete/i,\n });\n await user.click(deleteButton);\n expect(onDelete).toHaveBeenCalled();\n });\n});\n"]}