@itwin/reports-config-widget-react 0.0.8 → 0.2.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 (317) hide show
  1. package/.rush/temp/package-deps_rebuild.json +46 -32
  2. package/.rush/temp/shrinkwrap-deps.json +14 -6
  3. package/CHANGELOG.json +27 -0
  4. package/CHANGELOG.md +16 -1
  5. package/coverage/clover.xml +648 -427
  6. package/coverage/coverage-final.json +28 -18
  7. package/coverage/lcov-report/index.html +34 -19
  8. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +10 -10
  9. package/coverage/lcov-report/src/index.html +1 -1
  10. package/coverage/lcov-report/src/test/index.html +1 -1
  11. package/coverage/lcov-report/src/test/test-utils.tsx.html +22 -22
  12. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +7 -7
  13. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +29 -41
  14. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +31 -37
  15. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +661 -0
  16. package/coverage/lcov-report/src/widget/components/Constants.ts.html +106 -0
  17. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +21 -21
  18. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +187 -0
  19. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +145 -0
  20. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +139 -0
  21. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +151 -0
  22. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +190 -0
  23. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +176 -0
  24. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +295 -0
  25. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +208 -0
  26. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +77 -44
  27. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +8 -8
  28. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +14 -20
  29. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +475 -0
  30. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +469 -0
  31. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +184 -250
  32. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +180 -132
  33. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +10 -10
  34. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +11 -11
  35. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +31 -31
  36. package/coverage/lcov-report/src/widget/components/index.html +134 -59
  37. package/coverage/lcov-report/src/widget/components/utils.tsx.html +32 -32
  38. package/coverage/lcov-report/src/widget/context/ReportsApiConfigContext.tsx.html +8 -8
  39. package/coverage/lcov-report/src/widget/context/index.html +1 -1
  40. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  41. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +7 -7
  42. package/coverage/lcov-report/src/widget/index.html +1 -1
  43. package/coverage/lcov.info +1137 -738
  44. package/jest.config.js +7 -0
  45. package/lib/cjs/test/AddMappingModal.test.d.ts +2 -0
  46. package/lib/cjs/test/AddMappingModal.test.d.ts.map +1 -0
  47. package/lib/cjs/test/AddMappingModal.test.js +277 -0
  48. package/lib/cjs/test/AddMappingModal.test.js.map +1 -0
  49. package/lib/cjs/test/BulkExtractor.test.d.ts +2 -0
  50. package/lib/cjs/test/BulkExtractor.test.d.ts.map +1 -0
  51. package/lib/cjs/test/BulkExtractor.test.js +182 -0
  52. package/lib/cjs/test/BulkExtractor.test.js.map +1 -0
  53. package/lib/cjs/test/DeleteModal.test.d.ts +2 -0
  54. package/lib/cjs/test/DeleteModal.test.d.ts.map +1 -0
  55. package/lib/cjs/test/DeleteModal.test.js +93 -0
  56. package/lib/cjs/test/DeleteModal.test.js.map +1 -0
  57. package/lib/cjs/test/ReportAction.test.js +2 -3
  58. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  59. package/lib/cjs/test/ReportMappingHorizontalTile.test.d.ts +2 -0
  60. package/lib/cjs/test/ReportMappingHorizontalTile.test.d.ts.map +1 -0
  61. package/lib/cjs/test/ReportMappingHorizontalTile.test.js +340 -0
  62. package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -0
  63. package/lib/cjs/test/ReportMappings.test.js +115 -267
  64. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  65. package/lib/cjs/test/Reports.test.js +1 -1
  66. package/lib/cjs/test/Reports.test.js.map +1 -1
  67. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  68. package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
  69. package/lib/cjs/widget/components/ActionPanel.js +4 -5
  70. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  71. package/lib/cjs/widget/components/AddMappingsModal.d.ts +2 -2
  72. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  73. package/lib/cjs/widget/components/AddMappingsModal.js +5 -4
  74. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  75. package/lib/cjs/widget/components/AddMappingsModal.scss +4 -3
  76. package/lib/cjs/widget/components/BulkExtractor.d.ts +37 -0
  77. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -0
  78. package/lib/cjs/widget/components/BulkExtractor.js +155 -0
  79. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -0
  80. package/lib/cjs/widget/components/Constants.d.ts +4 -0
  81. package/lib/cjs/widget/components/Constants.d.ts.map +1 -0
  82. package/lib/cjs/widget/components/Constants.js +11 -0
  83. package/lib/cjs/widget/components/Constants.js.map +1 -0
  84. package/lib/cjs/widget/components/DeleteModal.js +1 -1
  85. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  86. package/lib/cjs/widget/components/DeleteModal.scss +4 -3
  87. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.d.ts +8 -0
  88. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -0
  89. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js +23 -0
  90. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -0
  91. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.d.ts +3 -0
  92. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -0
  93. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js +18 -0
  94. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -0
  95. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.d.ts +3 -0
  96. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -0
  97. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js +17 -0
  98. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -0
  99. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.d.ts +3 -0
  100. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -0
  101. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js +18 -0
  102. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -0
  103. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts +8 -0
  104. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -0
  105. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js +23 -0
  106. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -0
  107. package/lib/cjs/widget/components/ExtractionStatus.d.ts +17 -0
  108. package/lib/cjs/widget/components/ExtractionStatus.d.ts.map +1 -0
  109. package/lib/cjs/widget/components/ExtractionStatus.js +76 -0
  110. package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -0
  111. package/lib/cjs/widget/components/{Extraction.scss → ExtractionStatus.scss} +17 -15
  112. package/lib/cjs/widget/components/ExtractionToast.d.ts +11 -0
  113. package/lib/cjs/widget/components/ExtractionToast.d.ts.map +1 -0
  114. package/lib/cjs/widget/components/ExtractionToast.js +33 -0
  115. package/lib/cjs/widget/components/ExtractionToast.js.map +1 -0
  116. package/lib/cjs/widget/components/HorizontalTile.d.ts +8 -7
  117. package/lib/cjs/widget/components/HorizontalTile.d.ts.map +1 -1
  118. package/lib/cjs/widget/components/HorizontalTile.js +10 -6
  119. package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
  120. package/lib/cjs/widget/components/HorizontalTile.scss +42 -22
  121. package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
  122. package/lib/cjs/widget/components/ReportAction.js +3 -3
  123. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  124. package/lib/cjs/widget/components/ReportAction.scss +2 -2
  125. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts +16 -0
  126. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -0
  127. package/lib/cjs/widget/components/ReportHorizontalTile.js +71 -0
  128. package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -0
  129. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts +13 -0
  130. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -0
  131. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +82 -0
  132. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -0
  133. package/lib/cjs/widget/components/ReportMappings.d.ts +3 -1
  134. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  135. package/lib/cjs/widget/components/ReportMappings.js +39 -40
  136. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  137. package/lib/cjs/widget/components/ReportMappings.scss +7 -7
  138. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  139. package/lib/cjs/widget/components/Reports.js +43 -28
  140. package/lib/cjs/widget/components/Reports.js.map +1 -1
  141. package/lib/cjs/widget/components/Reports.scss +8 -4
  142. package/lib/cjs/widget/components/ReportsContainer.js +1 -1
  143. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  144. package/lib/cjs/widget/components/ReportsContainer.scss +2 -2
  145. package/lib/cjs/widget/components/SearchBar.js +1 -1
  146. package/lib/cjs/widget/components/SearchBar.js.map +1 -1
  147. package/lib/cjs/widget/components/SearchBar.scss +6 -0
  148. package/lib/cjs/widget/components/SelectIModel.js +2 -2
  149. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  150. package/lib/cjs/widget/components/SelectIModel.scss +4 -3
  151. package/lib/cjs/widget/components/utils.js +1 -1
  152. package/lib/cjs/widget/components/utils.js.map +1 -1
  153. package/lib/cjs/widget/components/utils.scss +2 -2
  154. package/lib/esm/test/AddMappingModal.test.d.ts +2 -0
  155. package/lib/esm/test/AddMappingModal.test.d.ts.map +1 -0
  156. package/lib/esm/test/AddMappingModal.test.js +253 -0
  157. package/lib/esm/test/AddMappingModal.test.js.map +1 -0
  158. package/lib/esm/test/BulkExtractor.test.d.ts +2 -0
  159. package/lib/esm/test/BulkExtractor.test.d.ts.map +1 -0
  160. package/lib/esm/test/BulkExtractor.test.js +158 -0
  161. package/lib/esm/test/BulkExtractor.test.js.map +1 -0
  162. package/lib/esm/test/DeleteModal.test.d.ts +2 -0
  163. package/lib/esm/test/DeleteModal.test.d.ts.map +1 -0
  164. package/lib/esm/test/DeleteModal.test.js +69 -0
  165. package/lib/esm/test/DeleteModal.test.js.map +1 -0
  166. package/lib/esm/test/ReportAction.test.js +2 -3
  167. package/lib/esm/test/ReportAction.test.js.map +1 -1
  168. package/lib/esm/test/ReportMappingHorizontalTile.test.d.ts +2 -0
  169. package/lib/esm/test/ReportMappingHorizontalTile.test.d.ts.map +1 -0
  170. package/lib/esm/test/ReportMappingHorizontalTile.test.js +316 -0
  171. package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -0
  172. package/lib/esm/test/ReportMappings.test.js +117 -269
  173. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  174. package/lib/esm/test/Reports.test.js +1 -1
  175. package/lib/esm/test/Reports.test.js.map +1 -1
  176. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  177. package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
  178. package/lib/esm/widget/components/ActionPanel.js +4 -5
  179. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  180. package/lib/esm/widget/components/AddMappingsModal.d.ts +2 -2
  181. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  182. package/lib/esm/widget/components/AddMappingsModal.js +4 -5
  183. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  184. package/lib/esm/widget/components/AddMappingsModal.scss +4 -3
  185. package/lib/esm/widget/components/BulkExtractor.d.ts +37 -0
  186. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -0
  187. package/lib/esm/widget/components/BulkExtractor.js +152 -0
  188. package/lib/esm/widget/components/BulkExtractor.js.map +1 -0
  189. package/lib/esm/widget/components/Constants.d.ts +4 -0
  190. package/lib/esm/widget/components/Constants.d.ts.map +1 -0
  191. package/lib/esm/widget/components/Constants.js +8 -0
  192. package/lib/esm/widget/components/Constants.js.map +1 -0
  193. package/lib/esm/widget/components/DeleteModal.js +1 -1
  194. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  195. package/lib/esm/widget/components/DeleteModal.scss +4 -3
  196. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.d.ts +8 -0
  197. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -0
  198. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js +16 -0
  199. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -0
  200. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.d.ts +3 -0
  201. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -0
  202. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js +11 -0
  203. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -0
  204. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.d.ts +3 -0
  205. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -0
  206. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js +10 -0
  207. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -0
  208. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.d.ts +3 -0
  209. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -0
  210. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js +11 -0
  211. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -0
  212. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts +8 -0
  213. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -0
  214. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js +16 -0
  215. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -0
  216. package/lib/esm/widget/components/ExtractionStatus.d.ts +17 -0
  217. package/lib/esm/widget/components/ExtractionStatus.d.ts.map +1 -0
  218. package/lib/esm/widget/components/ExtractionStatus.js +53 -0
  219. package/lib/esm/widget/components/ExtractionStatus.js.map +1 -0
  220. package/{src/widget/components/Extraction.scss → lib/esm/widget/components/ExtractionStatus.scss} +17 -15
  221. package/lib/esm/widget/components/ExtractionToast.d.ts +11 -0
  222. package/lib/esm/widget/components/ExtractionToast.d.ts.map +1 -0
  223. package/lib/esm/widget/components/ExtractionToast.js +25 -0
  224. package/lib/esm/widget/components/ExtractionToast.js.map +1 -0
  225. package/lib/esm/widget/components/HorizontalTile.d.ts +8 -7
  226. package/lib/esm/widget/components/HorizontalTile.d.ts.map +1 -1
  227. package/lib/esm/widget/components/HorizontalTile.js +10 -6
  228. package/lib/esm/widget/components/HorizontalTile.js.map +1 -1
  229. package/lib/esm/widget/components/HorizontalTile.scss +42 -22
  230. package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
  231. package/lib/esm/widget/components/ReportAction.js +3 -3
  232. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  233. package/lib/esm/widget/components/ReportAction.scss +2 -2
  234. package/lib/esm/widget/components/ReportHorizontalTile.d.ts +16 -0
  235. package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -0
  236. package/lib/esm/widget/components/ReportHorizontalTile.js +64 -0
  237. package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -0
  238. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts +13 -0
  239. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -0
  240. package/lib/esm/widget/components/ReportMappingHorizontalTile.js +75 -0
  241. package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -0
  242. package/lib/esm/widget/components/ReportMappings.d.ts +3 -1
  243. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  244. package/lib/esm/widget/components/ReportMappings.js +40 -41
  245. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  246. package/lib/esm/widget/components/ReportMappings.scss +7 -7
  247. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  248. package/lib/esm/widget/components/Reports.js +45 -30
  249. package/lib/esm/widget/components/Reports.js.map +1 -1
  250. package/lib/esm/widget/components/Reports.scss +8 -4
  251. package/lib/esm/widget/components/ReportsContainer.js +1 -1
  252. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  253. package/lib/esm/widget/components/ReportsContainer.scss +2 -2
  254. package/lib/esm/widget/components/SearchBar.js +1 -1
  255. package/lib/esm/widget/components/SearchBar.js.map +1 -1
  256. package/lib/esm/widget/components/SearchBar.scss +6 -0
  257. package/lib/esm/widget/components/SelectIModel.js +2 -2
  258. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  259. package/lib/esm/widget/components/SelectIModel.scss +4 -3
  260. package/lib/esm/widget/components/utils.js +1 -1
  261. package/lib/esm/widget/components/utils.js.map +1 -1
  262. package/lib/esm/widget/components/utils.scss +2 -2
  263. package/lib/public/locales/en/ReportsConfigWidget.json +7 -1
  264. package/package.json +9 -3
  265. package/public/locales/en/ReportsConfigWidget.json +7 -1
  266. package/reports-config-widget-react.build.error.log +10 -6
  267. package/reports-config-widget-react.build.log +51 -36
  268. package/src/test/AddMappingModal.test.tsx +315 -0
  269. package/src/test/BulkExtractor.test.ts +301 -0
  270. package/src/test/DeleteModal.test.tsx +118 -0
  271. package/src/test/ReportAction.test.tsx +2 -4
  272. package/src/test/ReportMappingHorizontalTile.test.tsx +451 -0
  273. package/src/test/ReportMappings.test.tsx +154 -549
  274. package/src/test/Reports.test.tsx +1 -1
  275. package/src/widget/components/ActionPanel.tsx +19 -23
  276. package/src/widget/components/AddMappingsModal.scss +4 -3
  277. package/src/widget/components/AddMappingsModal.tsx +4 -6
  278. package/src/widget/components/BulkExtractor.ts +192 -0
  279. package/src/widget/components/Constants.ts +7 -0
  280. package/src/widget/components/DeleteModal.scss +4 -3
  281. package/src/widget/components/DeleteModal.tsx +1 -1
  282. package/src/widget/components/ExtractionStates/FailedExtractionState.tsx +34 -0
  283. package/src/widget/components/ExtractionStates/QueuedExtractionState.tsx +20 -0
  284. package/src/widget/components/ExtractionStates/RunningExtractionState.tsx +18 -0
  285. package/src/widget/components/ExtractionStates/StartingExtractionState.tsx +22 -0
  286. package/src/widget/components/ExtractionStates/SucceededExtractionState.tsx +35 -0
  287. package/{lib/esm/widget/components/Extraction.scss → src/widget/components/ExtractionStatus.scss} +17 -15
  288. package/src/widget/components/ExtractionStatus.tsx +70 -0
  289. package/src/widget/components/ExtractionToast.tsx +41 -0
  290. package/src/widget/components/HorizontalTile.scss +42 -22
  291. package/src/widget/components/HorizontalTile.tsx +45 -34
  292. package/src/widget/components/ReportAction.scss +2 -2
  293. package/src/widget/components/ReportAction.tsx +1 -3
  294. package/src/widget/components/ReportHorizontalTile.tsx +130 -0
  295. package/src/widget/components/ReportMappingHorizontalTile.tsx +128 -0
  296. package/src/widget/components/ReportMappings.scss +7 -7
  297. package/src/widget/components/ReportMappings.tsx +91 -113
  298. package/src/widget/components/Reports.scss +8 -4
  299. package/src/widget/components/Reports.tsx +78 -62
  300. package/src/widget/components/ReportsContainer.scss +2 -2
  301. package/src/widget/components/ReportsContainer.tsx +1 -1
  302. package/src/widget/components/SearchBar.scss +6 -0
  303. package/src/widget/components/SearchBar.tsx +1 -1
  304. package/src/widget/components/SelectIModel.scss +4 -3
  305. package/src/widget/components/SelectIModel.tsx +2 -2
  306. package/src/widget/components/utils.scss +2 -2
  307. package/src/widget/components/utils.tsx +1 -1
  308. package/coverage/lcov-report/src/widget/components/Extraction.tsx.html +0 -1030
  309. package/lib/cjs/widget/components/Extraction.d.ts +0 -28
  310. package/lib/cjs/widget/components/Extraction.d.ts.map +0 -1
  311. package/lib/cjs/widget/components/Extraction.js +0 -190
  312. package/lib/cjs/widget/components/Extraction.js.map +0 -1
  313. package/lib/esm/widget/components/Extraction.d.ts +0 -28
  314. package/lib/esm/widget/components/Extraction.d.ts.map +0 -1
  315. package/lib/esm/widget/components/Extraction.js +0 -166
  316. package/lib/esm/widget/components/Extraction.js.map +0 -1
  317. package/src/widget/components/Extraction.tsx +0 -315
@@ -31,19 +31,13 @@ const faker_1 = __importDefault(require("@faker-js/faker"));
31
31
  require("@testing-library/jest-dom");
32
32
  const core_frontend_1 = require("@itwin/core-frontend");
33
33
  const ReportsConfigWidget_1 = require("../ReportsConfigWidget");
34
- const node_1 = require("msw/node");
35
34
  const test_utils_1 = require("./test-utils");
36
- const user_event_1 = __importDefault(require("@testing-library/user-event"));
37
35
  const moq = __importStar(require("typemoq"));
38
- const msw_1 = require("msw");
39
- const insights_client_1 = require("@itwin/insights-client");
40
36
  const ReportMappings_1 = require("../widget/components/ReportMappings");
41
37
  const imodels_client_management_1 = require("@itwin/imodels-client-management");
42
- const ReportsConfigUiProvider_1 = require("../widget/ReportsConfigUiProvider");
43
- const Extraction_1 = require("../widget/components/Extraction");
44
38
  const presentation_frontend_1 = require("@itwin/presentation-frontend");
45
- // For the extraction test
46
- jest.setTimeout(20000);
39
+ const itwinui_react_1 = require("@itwin/itwinui-react");
40
+ const core_common_1 = require("@itwin/core-common");
47
41
  const mockITwinId = faker_1.default.datatype.uuid();
48
42
  // Lets work with two iModels for now.
49
43
  const mockIModelId1 = faker_1.default.datatype.uuid();
@@ -184,23 +178,61 @@ const mockMappingsFactory = (mockReportMappings) => {
184
178
  },
185
179
  },
186
180
  }));
187
- const iModelHandlers = mockMappings.map((mapping) => msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mapping.mapping._links.imodel.href}/mappings/${mapping.mapping.id}`, async (_req, res, ctx) => {
188
- return res(ctx.delay(), ctx.status(200), ctx.json(mapping));
189
- }));
190
- return [mockMappings, iModelHandlers];
181
+ return mockMappings;
191
182
  };
192
183
  const connectionMock = moq.Mock.ofType();
184
+ const mockBulkExtractor = moq.Mock.ofType();
193
185
  const selectionManagerMock = moq.Mock.ofType();
194
186
  const selectionScopesManagerMock = moq.Mock.ofType();
187
+ const mockIModelsClient = moq.Mock.ofType();
188
+ jest.mock("../widget/components/Constants.ts", () => ({
189
+ STATUS_CHECK_INTERVAL: 10,
190
+ }));
191
+ jest.mock("../widget/components/ReportMappingHorizontalTile", () => ({
192
+ ReportMappingHorizontalTile: (props) => {
193
+ return (react_1.default.createElement("div", { "data-testid": "horizontal-tile" },
194
+ react_1.default.createElement(itwinui_react_1.Text, null, props.mapping.mappingName),
195
+ react_1.default.createElement(itwinui_react_1.Text, { title: props.mapping.mappingDescription }, props.mapping.iModelName)));
196
+ },
197
+ }));
195
198
  jest.mock("@itwin/appui-react", () => ({
196
199
  ...jest.requireActual("@itwin/appui-react"),
197
200
  useActiveIModelConnection: () => connectionMock.object,
198
201
  }));
199
- const server = node_1.setupServer();
202
+ let returnFn;
203
+ jest.mock("../widget/components/AddMappingsModal", () => ({
204
+ ...jest.requireActual("../widget/components/AddMappingsModal"),
205
+ AddMappingsModal: (props) => {
206
+ returnFn = props.returnFn;
207
+ return react_1.default.createElement("div", { "data-testid": "add-mappings-modal" });
208
+ },
209
+ }));
210
+ jest.mock("@itwin/imodels-client-management", () => ({
211
+ ...jest.requireActual("@itwin/imodels-client-management"),
212
+ IModelsClient: jest.fn().mockImplementation(() => ({
213
+ iModels: mockIModelsClient.object,
214
+ })),
215
+ toArray: jest.fn().mockImplementation(async () => {
216
+ return mockProjectIModels.iModels;
217
+ }),
218
+ }));
219
+ const mockGetMapping = jest.fn();
220
+ const mockGetMappings = jest.fn();
221
+ const mockGetReportMappings = jest.fn();
222
+ const mockDeleteReportMapping = jest.fn();
223
+ jest.mock("@itwin/insights-client", () => ({
224
+ ...jest.requireActual("@itwin/insights-client"),
225
+ MappingsClient: jest.fn().mockImplementation(() => ({
226
+ getMapping: mockGetMapping,
227
+ getMappings: mockGetMappings,
228
+ })),
229
+ ReportsClient: jest.fn().mockImplementation(() => ({
230
+ getReportMappings: mockGetReportMappings,
231
+ deleteReportMapping: mockDeleteReportMapping,
232
+ })),
233
+ }));
200
234
  beforeAll(async () => {
201
- // This is required by the i18n module within iTwin.js
202
- global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; // eslint-disable-line @typescript-eslint/no-var-requires
203
- await core_frontend_1.NoRenderApp.startup();
235
+ await core_frontend_1.NoRenderApp.startup({ localization: new core_common_1.EmptyLocalization() });
204
236
  await presentation_frontend_1.Presentation.initialize();
205
237
  const selectionSet = moq.Mock.ofType();
206
238
  const onChanged = moq.Mock.ofType();
@@ -223,53 +255,46 @@ beforeAll(async () => {
223
255
  presentation_frontend_1.Presentation.setSelectionManager(selectionManagerMock.object);
224
256
  await test_utils_1.TestUtils.initializeUiFramework(connectionMock.object);
225
257
  await ReportsConfigWidget_1.ReportsConfigWidget.initialize();
226
- server.listen();
227
258
  });
228
259
  afterAll(() => {
229
260
  test_utils_1.TestUtils.terminateUiFramework();
230
- server.close();
231
261
  });
232
262
  afterEach(() => {
233
- server.resetHandlers();
263
+ mockGetMapping.mockReset();
264
+ mockGetMappings.mockReset();
265
+ mockGetReportMappings.mockReset();
266
+ mockDeleteReportMapping.mockReset();
267
+ mockIModelsClient.reset();
268
+ mockBulkExtractor.reset();
234
269
  });
235
270
  describe("Report Mappings View", () => {
236
271
  it("shows all report mappings", async () => {
237
- var _a, _b;
238
272
  const mockReportMappings = mockReportMappingsFactory();
239
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
240
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
241
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
242
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
243
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
244
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
245
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
246
- }), ...iModelHandlers);
247
- test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
273
+ const mockMappings = mockMappingsFactory(mockReportMappings);
274
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
275
+ .returns(async () => mockIModelsResponse[0].iModel);
276
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
277
+ .returns(async () => mockIModelsResponse[1].iModel);
278
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
279
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
280
+ test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
248
281
  await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
249
282
  const horizontalTiles = test_utils_1.screen.getAllByTestId("horizontal-tile");
250
- expect(horizontalTiles).toHaveLength(mockMappings.length);
251
- for (const [index, horizontalTile] of horizontalTiles.entries()) {
252
- const reportMappingTile = test_utils_1.within(horizontalTile);
253
- const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.imodel.href);
254
- expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();
255
- expect(reportMappingTile.getByTitle((_a = mockMappings[index].mapping.description) !== null && _a !== void 0 ? _a : "")).toBeInTheDocument();
256
- expect(reportMappingTile.getByText((_b = mockiModel === null || mockiModel === void 0 ? void 0 : mockiModel.iModel.displayName) !== null && _b !== void 0 ? _b : "")).toBeInTheDocument();
257
- }
283
+ assertHorizontalTiles(horizontalTiles, mockMappings);
258
284
  });
259
285
  it("search for a report mapping", async () => {
260
286
  var _a, _b, _c, _d;
261
287
  const mockReportMappings = mockReportMappingsFactory();
262
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
263
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
264
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
265
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
266
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
267
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
268
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
269
- }), ...iModelHandlers);
270
- const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
288
+ const mockMappings = mockMappingsFactory(mockReportMappings);
289
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
290
+ .returns(async () => mockIModelsResponse[0].iModel);
291
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
292
+ .returns(async () => mockIModelsResponse[1].iModel);
293
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
294
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
295
+ const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
271
296
  await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
272
- const searchButton = test_utils_1.within(test_utils_1.screen.getByTestId(/search-bar/i)).getByRole("button");
297
+ const searchButton = test_utils_1.within(test_utils_1.screen.getByTestId(/rcw-search-bar/i)).getByRole("button");
273
298
  await user.click(searchButton);
274
299
  const searchInput = test_utils_1.screen.getByRole("textbox", {
275
300
  name: /search\-textbox/i,
@@ -290,133 +315,33 @@ describe("Report Mappings View", () => {
290
315
  expect(test_utils_1.screen.getAllByTestId("horizontal-tile")).toHaveLength(1);
291
316
  expect(test_utils_1.screen.getByText((_d = iModel === null || iModel === void 0 ? void 0 : iModel.iModel.displayName) !== null && _d !== void 0 ? _d : "")).toBeInTheDocument();
292
317
  });
293
- it("remove a report mapping", async () => {
294
- const mockReportMappings = mockReportMappingsFactory();
295
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
296
- const mockReportMappingsOriginalSize = mockReportMappings.mappings.length;
297
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
298
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
299
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
300
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
301
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
302
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
303
- }), ...iModelHandlers, msw_1.rest.delete(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings/${mockReportMappings.mappings[0].mappingId}`, async (_req, res, ctx) => {
304
- mockReportMappings.mappings = mockReportMappings.mappings.filter((mapping) => mapping.mappingId !== mockReportMappings.mappings[0].mappingId);
305
- return res(ctx.delay(100), ctx.status(204));
306
- }));
307
- const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
308
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
309
- const firstMenuDropdown = test_utils_1.within(test_utils_1.screen.getAllByTestId(/tile-action-button/i)[0]).getByRole("button");
310
- await user.click(firstMenuDropdown);
311
- const removeButton = test_utils_1.screen.getByRole("menuitem", { name: /remove/i });
312
- await user.click(removeButton);
313
- // Delete modal dialog should appear
314
- expect(test_utils_1.screen.getByRole("dialog")).toBeInTheDocument();
315
- const deleteButton = test_utils_1.screen.getByRole("button", {
316
- name: /delete/i,
317
- });
318
- await user.click(deleteButton);
319
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByTestId(/rcw-loading-delete/i));
320
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByRole("dialog"));
321
- // Should be one less mapping
322
- expect(test_utils_1.screen.getAllByTestId("horizontal-tile")).toHaveLength(mockReportMappingsOriginalSize - 1);
323
- });
324
318
  it("add mapping", async () => {
325
319
  const mockReportMappings = mockReportMappingsFactory();
326
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
327
- // Adding an extra unmapped mapping.
328
- const extraMappingId = faker_1.default.datatype.uuid();
329
- const extraMappingName = "mOcKNaMeExTrA";
330
- const extraMappingDescription = "mOcKDeScRiPtIoNeXtRa";
331
- mockMappings.push({
332
- mapping: {
333
- id: extraMappingId,
334
- mappingName: extraMappingName,
335
- description: extraMappingDescription,
336
- extractionEnabled: false,
337
- createdOn: "",
338
- createdBy: "",
339
- modifiedOn: "",
340
- modifiedBy: "",
341
- _links: {
342
- imodel: {
343
- href: "",
344
- },
345
- },
346
- },
347
- });
348
- const mockMappingsResponse = {
349
- // Type guarding
350
- mappings: mockMappings
351
- .map((mapping) => mapping.mapping)
352
- .filter((mapping) => !!mapping),
353
- _links: {
354
- next: undefined,
355
- self: {
356
- href: "",
357
- },
358
- },
359
- };
360
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
361
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
362
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}`, async (_req, res, ctx) => {
363
- return res(ctx.delay(), ctx.status(200), ctx.json(mockProjectIModels));
364
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
365
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
366
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
367
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
368
- }), msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mockProjectIModels.iModels[0].id}/mappings`, async (_req, res, ctx) => {
369
- return res(ctx.delay(), ctx.status(200), ctx.json(mockMappingsResponse));
370
- }), msw_1.rest.post(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
371
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
372
- }), ...iModelHandlers);
373
- const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
320
+ const mockMappings = mockMappingsFactory(mockReportMappings);
321
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
322
+ .returns(async () => mockIModelsResponse[0].iModel);
323
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
324
+ .returns(async () => mockIModelsResponse[1].iModel);
325
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
326
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
327
+ const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
374
328
  await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
329
+ mockGetMappings.mockReturnValueOnce(mockMappings.map((m) => m.mapping));
375
330
  const addMappingButton = test_utils_1.screen.getByRole("button", {
376
331
  name: /addmapping/i,
377
332
  });
378
333
  await user.click(addMappingButton);
379
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByTestId(/rcw-action-loading-spinner/i));
380
- // Add modal dialog should appear
381
- const modal = test_utils_1.screen.getByRole("dialog");
382
- expect(test_utils_1.screen.getByRole("dialog")).toBeInTheDocument();
383
- const withinModal = test_utils_1.within(modal);
384
- expect(withinModal.getByText(/addmappings/i)).toBeInTheDocument();
385
- const addButton = withinModal.getByRole("button", {
386
- name: /add/i,
387
- });
388
- // Add button should be disabled
389
- expect(addButton).toBeDisabled();
390
- // Already mapped mappings are disabled
391
- for (let i = 0; i < mockMappings.length - 1; i++) {
392
- const row = test_utils_1.screen.getByRole("row", {
393
- name: new RegExp(`${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`, "i"),
394
- });
395
- const checkbox = test_utils_1.within(row).getByRole("checkbox");
396
- expect(checkbox).toBeDisabled();
397
- }
398
- // Click on checkbox on new mapping
399
- const unmappedRow = test_utils_1.screen.getByRole("row", {
400
- name: new RegExp(`${mockMappings[mockMappings.length - 1].mapping.mappingName} ${mockMappings[mockMappings.length - 1].mapping.description}`, "i"),
334
+ const addMappingsModal = await test_utils_1.screen.findByTestId("add-mappings-modal");
335
+ expect(addMappingsModal).toBeInTheDocument();
336
+ await test_utils_1.act(async () => {
337
+ await returnFn();
401
338
  });
402
- const enabledCheckbox = test_utils_1.within(unmappedRow).getByRole("checkbox");
403
- await user.click(enabledCheckbox);
404
- await user.click(addButton);
405
- // Modal should go away
406
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByTestId(/rcw-action-loading-spinner/i));
407
- await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByRole("dialog"));
339
+ const horizontalTiles = test_utils_1.screen.getAllByTestId("horizontal-tile");
340
+ assertHorizontalTiles(horizontalTiles, mockMappings);
341
+ expect(mockGetReportMappings).toBeCalledTimes(2);
408
342
  });
409
343
  it("odata feed url", async () => {
410
- const mockReportMappings = mockReportMappingsFactory();
411
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
412
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
413
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
414
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
415
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
416
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
417
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
418
- }), ...iModelHandlers);
419
- const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
344
+ const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
420
345
  await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
421
346
  const urlTextbox = test_utils_1.screen.getByRole("textbox", {
422
347
  name: /odatafeedurl/i,
@@ -429,111 +354,34 @@ describe("Report Mappings View", () => {
429
354
  await user.click(copyButton);
430
355
  expect(test_utils_1.screen.getByText(/copiedtoclipboard/i)).toBeInTheDocument();
431
356
  });
432
- it("full extraction", async () => {
357
+ it("update all datasets", async () => {
433
358
  const mockReportMappings = mockReportMappingsFactory();
434
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
435
- const delay = Extraction_1.REFRESH_DELAY + 1000;
436
- // Faking timers currently makes all promise based queries from RTL become unpredictable.
437
- // https://github.com/testing-library/dom-testing-library/issues/988
438
- // Should come back to this later.
439
- // Consequently, this test will be a bit slower.
440
- // jest.useFakeTimers()
441
- Element.prototype.scrollIntoView = jest.fn();
442
- const mockIModel = mockIModelsResponse[0].iModel;
443
- const mockRunId = faker_1.default.datatype.uuid();
444
- const mockExtractionResponse = {
445
- run: {
446
- id: mockRunId,
447
- _links: {
448
- status: {
449
- href: "",
450
- },
451
- },
452
- },
453
- };
454
- let mockStatusResponse = {
455
- status: {
456
- state: insights_client_1.ExtractorState.Queued,
457
- reason: "",
458
- containsIssues: false,
459
- _links: {
460
- logs: {
461
- href: "",
462
- },
463
- },
464
- },
465
- };
466
- server.use(msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
467
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
468
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
469
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
470
- }), msw_1.rest.get(`${imodels_client_management_1.Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
471
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
472
- }), ...iModelHandlers, msw_1.rest.post(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mockIModel.id}/extraction/run`, async (_req, res, ctx) => {
473
- return res(ctx.delay(800), ctx.status(200), ctx.json(mockExtractionResponse));
474
- }), msw_1.rest.get(`${ReportsConfigUiProvider_1.REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/extraction/status/${mockRunId}`, async (_req, res, ctx) => {
475
- return res(ctx.delay(), ctx.status(200), ctx.json(mockStatusResponse));
476
- }));
477
- test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, goBack: jest.fn() }));
478
- // https://github.com/testing-library/user-event/issues/833
479
- const user = user_event_1.default.setup({ delay: null });
359
+ const mockMappings = mockMappingsFactory(mockReportMappings);
360
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
361
+ .returns(async () => mockIModelsResponse[0].iModel);
362
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
363
+ .returns(async () => mockIModelsResponse[1].iModel);
364
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
365
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
366
+ const iModels = mockIModelsResponse.map((iModel) => iModel.iModel.id);
367
+ mockBulkExtractor.setup(async (x) => x.runIModelExtractions(iModels)).returns(async () => Promise.resolve());
368
+ const { user } = test_utils_1.render(react_1.default.createElement(ReportMappings_1.ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
480
369
  await test_utils_1.waitForElementToBeRemoved(() => test_utils_1.screen.getByText(/loading/i));
481
- const comboBox = test_utils_1.screen.getByRole("combobox", {
482
- name: /updatedataset/i,
483
- });
484
- await user.type(comboBox, mockIModel.displayName);
485
- const option = test_utils_1.screen.getByRole("menuitem", {
486
- name: mockIModel.displayName,
487
- });
488
- await user.click(option);
489
- // Combobox should have correct status
490
- const extractionComponent = test_utils_1.screen.getByTestId("extraction-combo-box");
491
- expect(test_utils_1.within(extractionComponent).getByDisplayValue(mockIModel.displayName)).toBeInTheDocument();
492
- // Should be two in the document. One in the status and the other in the list.
493
- // TODO Assert that it is in the correct HorizontalTile
494
- const startingStates = await test_utils_1.screen.findAllByTitle(/starting/i);
495
- expect(startingStates).toHaveLength(2);
496
- const loadingStates = await test_utils_1.screen.findAllByTitle(/loading/i);
497
- expect(loadingStates).toHaveLength(2);
498
- // act(() => {
499
- // jest.advanceTimersByTime(2000)
500
- // });
501
- const queuedStates = await test_utils_1.screen.findAllByTitle(/queued/i, undefined, {
502
- timeout: delay,
503
- });
504
- expect(queuedStates).toHaveLength(2);
505
- mockStatusResponse = {
506
- status: {
507
- state: insights_client_1.ExtractorState.Running,
508
- reason: "",
509
- containsIssues: false,
510
- _links: {
511
- logs: {
512
- href: "",
513
- },
514
- },
515
- },
516
- };
517
- const runningStates = await test_utils_1.screen.findAllByTitle(/running/i, undefined, {
518
- timeout: delay,
519
- });
520
- expect(runningStates).toHaveLength(2);
521
- mockStatusResponse = {
522
- status: {
523
- state: insights_client_1.ExtractorState.Succeeded,
524
- reason: "",
525
- containsIssues: false,
526
- _links: {
527
- logs: {
528
- href: "",
529
- },
530
- },
531
- },
532
- };
533
- const succeededStates = await test_utils_1.screen.findAllByTitle(/success/i, undefined, {
534
- timeout: delay,
535
- });
536
- expect(succeededStates).toHaveLength(2);
370
+ const extractAllButton = test_utils_1.screen.getByText(/UpdateAllDatasets/i);
371
+ expect(extractAllButton).toBeInTheDocument();
372
+ await user.click(extractAllButton);
373
+ mockBulkExtractor.verify(async (x) => x.runIModelExtractions(iModels), moq.Times.once());
537
374
  });
375
+ const assertHorizontalTiles = (horizontalTiles, mockMappings) => {
376
+ var _a, _b;
377
+ expect(horizontalTiles).toHaveLength(mockMappings.length);
378
+ for (const [index, horizontalTile] of horizontalTiles.entries()) {
379
+ const reportMappingTile = test_utils_1.within(horizontalTile);
380
+ const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.imodel.href);
381
+ expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();
382
+ expect(reportMappingTile.getByTitle((_a = mockMappings[index].mapping.description) !== null && _a !== void 0 ? _a : "")).toBeInTheDocument();
383
+ expect(reportMappingTile.getByText((_b = mockiModel === null || mockiModel === void 0 ? void 0 : mockiModel.iModel.displayName) !== null && _b !== void 0 ? _b : "")).toBeInTheDocument();
384
+ }
385
+ };
538
386
  });
539
387
  //# sourceMappingURL=ReportMappings.test.js.map