@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
@@ -7,19 +7,13 @@ import faker from "@faker-js/faker";
7
7
  import "@testing-library/jest-dom";
8
8
  import { NoRenderApp } from "@itwin/core-frontend";
9
9
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
10
- import { setupServer } from "msw/node";
11
- import { render, screen, TestUtils, waitForElementToBeRemoved, within, } from "./test-utils";
12
- import userEvent from "@testing-library/user-event";
10
+ import { act, render, screen, TestUtils, waitForElementToBeRemoved, within, } from "./test-utils";
13
11
  import * as moq from "typemoq";
14
- import { rest } from "msw";
15
- import { ExtractorState, } from "@itwin/insights-client";
16
12
  import { ReportMappings } from "../widget/components/ReportMappings";
17
- import { Constants, IModelState } from "@itwin/imodels-client-management";
18
- import { REPORTS_CONFIG_BASE_URL } from "../widget/ReportsConfigUiProvider";
19
- import { REFRESH_DELAY } from "../widget/components/Extraction";
13
+ import { IModelState } from "@itwin/imodels-client-management";
20
14
  import { Presentation, SelectionChangeEvent, } from "@itwin/presentation-frontend";
21
- // For the extraction test
22
- jest.setTimeout(20000);
15
+ import { Text } from "@itwin/itwinui-react";
16
+ import { EmptyLocalization } from "@itwin/core-common";
23
17
  const mockITwinId = faker.datatype.uuid();
24
18
  // Lets work with two iModels for now.
25
19
  const mockIModelId1 = faker.datatype.uuid();
@@ -160,23 +154,61 @@ const mockMappingsFactory = (mockReportMappings) => {
160
154
  },
161
155
  },
162
156
  }));
163
- const iModelHandlers = mockMappings.map((mapping) => rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mapping.mapping._links.imodel.href}/mappings/${mapping.mapping.id}`, async (_req, res, ctx) => {
164
- return res(ctx.delay(), ctx.status(200), ctx.json(mapping));
165
- }));
166
- return [mockMappings, iModelHandlers];
157
+ return mockMappings;
167
158
  };
168
159
  const connectionMock = moq.Mock.ofType();
160
+ const mockBulkExtractor = moq.Mock.ofType();
169
161
  const selectionManagerMock = moq.Mock.ofType();
170
162
  const selectionScopesManagerMock = moq.Mock.ofType();
163
+ const mockIModelsClient = moq.Mock.ofType();
164
+ jest.mock("../widget/components/Constants.ts", () => ({
165
+ STATUS_CHECK_INTERVAL: 10,
166
+ }));
167
+ jest.mock("../widget/components/ReportMappingHorizontalTile", () => ({
168
+ ReportMappingHorizontalTile: (props) => {
169
+ return (React.createElement("div", { "data-testid": "horizontal-tile" },
170
+ React.createElement(Text, null, props.mapping.mappingName),
171
+ React.createElement(Text, { title: props.mapping.mappingDescription }, props.mapping.iModelName)));
172
+ },
173
+ }));
171
174
  jest.mock("@itwin/appui-react", () => ({
172
175
  ...jest.requireActual("@itwin/appui-react"),
173
176
  useActiveIModelConnection: () => connectionMock.object,
174
177
  }));
175
- const server = setupServer();
178
+ let returnFn;
179
+ jest.mock("../widget/components/AddMappingsModal", () => ({
180
+ ...jest.requireActual("../widget/components/AddMappingsModal"),
181
+ AddMappingsModal: (props) => {
182
+ returnFn = props.returnFn;
183
+ return React.createElement("div", { "data-testid": "add-mappings-modal" });
184
+ },
185
+ }));
186
+ jest.mock("@itwin/imodels-client-management", () => ({
187
+ ...jest.requireActual("@itwin/imodels-client-management"),
188
+ IModelsClient: jest.fn().mockImplementation(() => ({
189
+ iModels: mockIModelsClient.object,
190
+ })),
191
+ toArray: jest.fn().mockImplementation(async () => {
192
+ return mockProjectIModels.iModels;
193
+ }),
194
+ }));
195
+ const mockGetMapping = jest.fn();
196
+ const mockGetMappings = jest.fn();
197
+ const mockGetReportMappings = jest.fn();
198
+ const mockDeleteReportMapping = jest.fn();
199
+ jest.mock("@itwin/insights-client", () => ({
200
+ ...jest.requireActual("@itwin/insights-client"),
201
+ MappingsClient: jest.fn().mockImplementation(() => ({
202
+ getMapping: mockGetMapping,
203
+ getMappings: mockGetMappings,
204
+ })),
205
+ ReportsClient: jest.fn().mockImplementation(() => ({
206
+ getReportMappings: mockGetReportMappings,
207
+ deleteReportMapping: mockDeleteReportMapping,
208
+ })),
209
+ }));
176
210
  beforeAll(async () => {
177
- // This is required by the i18n module within iTwin.js
178
- global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; // eslint-disable-line @typescript-eslint/no-var-requires
179
- await NoRenderApp.startup();
211
+ await NoRenderApp.startup({ localization: new EmptyLocalization() });
180
212
  await Presentation.initialize();
181
213
  const selectionSet = moq.Mock.ofType();
182
214
  const onChanged = moq.Mock.ofType();
@@ -199,53 +231,46 @@ beforeAll(async () => {
199
231
  Presentation.setSelectionManager(selectionManagerMock.object);
200
232
  await TestUtils.initializeUiFramework(connectionMock.object);
201
233
  await ReportsConfigWidget.initialize();
202
- server.listen();
203
234
  });
204
235
  afterAll(() => {
205
236
  TestUtils.terminateUiFramework();
206
- server.close();
207
237
  });
208
238
  afterEach(() => {
209
- server.resetHandlers();
239
+ mockGetMapping.mockReset();
240
+ mockGetMappings.mockReset();
241
+ mockGetReportMappings.mockReset();
242
+ mockDeleteReportMapping.mockReset();
243
+ mockIModelsClient.reset();
244
+ mockBulkExtractor.reset();
210
245
  });
211
246
  describe("Report Mappings View", () => {
212
247
  it("shows all report mappings", async () => {
213
- var _a, _b;
214
248
  const mockReportMappings = mockReportMappingsFactory();
215
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
216
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
217
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
218
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
219
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
220
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
221
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
222
- }), ...iModelHandlers);
223
- render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
249
+ const mockMappings = mockMappingsFactory(mockReportMappings);
250
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
251
+ .returns(async () => mockIModelsResponse[0].iModel);
252
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
253
+ .returns(async () => mockIModelsResponse[1].iModel);
254
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
255
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
256
+ render(React.createElement(ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
224
257
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
225
258
  const horizontalTiles = screen.getAllByTestId("horizontal-tile");
226
- expect(horizontalTiles).toHaveLength(mockMappings.length);
227
- for (const [index, horizontalTile] of horizontalTiles.entries()) {
228
- const reportMappingTile = within(horizontalTile);
229
- const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.imodel.href);
230
- expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();
231
- expect(reportMappingTile.getByTitle((_a = mockMappings[index].mapping.description) !== null && _a !== void 0 ? _a : "")).toBeInTheDocument();
232
- expect(reportMappingTile.getByText((_b = mockiModel === null || mockiModel === void 0 ? void 0 : mockiModel.iModel.displayName) !== null && _b !== void 0 ? _b : "")).toBeInTheDocument();
233
- }
259
+ assertHorizontalTiles(horizontalTiles, mockMappings);
234
260
  });
235
261
  it("search for a report mapping", async () => {
236
262
  var _a, _b, _c, _d;
237
263
  const mockReportMappings = mockReportMappingsFactory();
238
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
239
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
240
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
241
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
242
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
243
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
244
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
245
- }), ...iModelHandlers);
246
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
264
+ const mockMappings = mockMappingsFactory(mockReportMappings);
265
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
266
+ .returns(async () => mockIModelsResponse[0].iModel);
267
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
268
+ .returns(async () => mockIModelsResponse[1].iModel);
269
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
270
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
271
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
247
272
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
248
- const searchButton = within(screen.getByTestId(/search-bar/i)).getByRole("button");
273
+ const searchButton = within(screen.getByTestId(/rcw-search-bar/i)).getByRole("button");
249
274
  await user.click(searchButton);
250
275
  const searchInput = screen.getByRole("textbox", {
251
276
  name: /search\-textbox/i,
@@ -266,133 +291,33 @@ describe("Report Mappings View", () => {
266
291
  expect(screen.getAllByTestId("horizontal-tile")).toHaveLength(1);
267
292
  expect(screen.getByText((_d = iModel === null || iModel === void 0 ? void 0 : iModel.iModel.displayName) !== null && _d !== void 0 ? _d : "")).toBeInTheDocument();
268
293
  });
269
- it("remove a report mapping", async () => {
270
- const mockReportMappings = mockReportMappingsFactory();
271
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
272
- const mockReportMappingsOriginalSize = mockReportMappings.mappings.length;
273
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
274
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
275
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
276
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
277
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
278
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
279
- }), ...iModelHandlers, rest.delete(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings/${mockReportMappings.mappings[0].mappingId}`, async (_req, res, ctx) => {
280
- mockReportMappings.mappings = mockReportMappings.mappings.filter((mapping) => mapping.mappingId !== mockReportMappings.mappings[0].mappingId);
281
- return res(ctx.delay(100), ctx.status(204));
282
- }));
283
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
284
- await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
285
- const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole("button");
286
- await user.click(firstMenuDropdown);
287
- const removeButton = screen.getByRole("menuitem", { name: /remove/i });
288
- await user.click(removeButton);
289
- // Delete modal dialog should appear
290
- expect(screen.getByRole("dialog")).toBeInTheDocument();
291
- const deleteButton = screen.getByRole("button", {
292
- name: /delete/i,
293
- });
294
- await user.click(deleteButton);
295
- await waitForElementToBeRemoved(() => screen.getByTestId(/rcw-loading-delete/i));
296
- await waitForElementToBeRemoved(() => screen.getByRole("dialog"));
297
- // Should be one less mapping
298
- expect(screen.getAllByTestId("horizontal-tile")).toHaveLength(mockReportMappingsOriginalSize - 1);
299
- });
300
294
  it("add mapping", async () => {
301
295
  const mockReportMappings = mockReportMappingsFactory();
302
- const [mockMappings, iModelHandlers] = mockMappingsFactory(mockReportMappings);
303
- // Adding an extra unmapped mapping.
304
- const extraMappingId = faker.datatype.uuid();
305
- const extraMappingName = "mOcKNaMeExTrA";
306
- const extraMappingDescription = "mOcKDeScRiPtIoNeXtRa";
307
- mockMappings.push({
308
- mapping: {
309
- id: extraMappingId,
310
- mappingName: extraMappingName,
311
- description: extraMappingDescription,
312
- extractionEnabled: false,
313
- createdOn: "",
314
- createdBy: "",
315
- modifiedOn: "",
316
- modifiedBy: "",
317
- _links: {
318
- imodel: {
319
- href: "",
320
- },
321
- },
322
- },
323
- });
324
- const mockMappingsResponse = {
325
- // Type guarding
326
- mappings: mockMappings
327
- .map((mapping) => mapping.mapping)
328
- .filter((mapping) => !!mapping),
329
- _links: {
330
- next: undefined,
331
- self: {
332
- href: "",
333
- },
334
- },
335
- };
336
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
337
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
338
- }), rest.get(`${Constants.api.baseUrl}`, async (_req, res, ctx) => {
339
- return res(ctx.delay(), ctx.status(200), ctx.json(mockProjectIModels));
340
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
341
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
342
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
343
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
344
- }), rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mockProjectIModels.iModels[0].id}/mappings`, async (_req, res, ctx) => {
345
- return res(ctx.delay(), ctx.status(200), ctx.json(mockMappingsResponse));
346
- }), rest.post(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
347
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
348
- }), ...iModelHandlers);
349
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
296
+ const mockMappings = mockMappingsFactory(mockReportMappings);
297
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
298
+ .returns(async () => mockIModelsResponse[0].iModel);
299
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
300
+ .returns(async () => mockIModelsResponse[1].iModel);
301
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
302
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
303
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
350
304
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
305
+ mockGetMappings.mockReturnValueOnce(mockMappings.map((m) => m.mapping));
351
306
  const addMappingButton = screen.getByRole("button", {
352
307
  name: /addmapping/i,
353
308
  });
354
309
  await user.click(addMappingButton);
355
- await waitForElementToBeRemoved(() => screen.getByTestId(/rcw-action-loading-spinner/i));
356
- // Add modal dialog should appear
357
- const modal = screen.getByRole("dialog");
358
- expect(screen.getByRole("dialog")).toBeInTheDocument();
359
- const withinModal = within(modal);
360
- expect(withinModal.getByText(/addmappings/i)).toBeInTheDocument();
361
- const addButton = withinModal.getByRole("button", {
362
- name: /add/i,
363
- });
364
- // Add button should be disabled
365
- expect(addButton).toBeDisabled();
366
- // Already mapped mappings are disabled
367
- for (let i = 0; i < mockMappings.length - 1; i++) {
368
- const row = screen.getByRole("row", {
369
- name: new RegExp(`${mockMappings[i].mapping.mappingName} ${mockMappings[i].mapping.description}`, "i"),
370
- });
371
- const checkbox = within(row).getByRole("checkbox");
372
- expect(checkbox).toBeDisabled();
373
- }
374
- // Click on checkbox on new mapping
375
- const unmappedRow = screen.getByRole("row", {
376
- name: new RegExp(`${mockMappings[mockMappings.length - 1].mapping.mappingName} ${mockMappings[mockMappings.length - 1].mapping.description}`, "i"),
310
+ const addMappingsModal = await screen.findByTestId("add-mappings-modal");
311
+ expect(addMappingsModal).toBeInTheDocument();
312
+ await act(async () => {
313
+ await returnFn();
377
314
  });
378
- const enabledCheckbox = within(unmappedRow).getByRole("checkbox");
379
- await user.click(enabledCheckbox);
380
- await user.click(addButton);
381
- // Modal should go away
382
- await waitForElementToBeRemoved(() => screen.getByTestId(/rcw-action-loading-spinner/i));
383
- await waitForElementToBeRemoved(() => screen.getByRole("dialog"));
315
+ const horizontalTiles = screen.getAllByTestId("horizontal-tile");
316
+ assertHorizontalTiles(horizontalTiles, mockMappings);
317
+ expect(mockGetReportMappings).toBeCalledTimes(2);
384
318
  });
385
319
  it("odata feed url", async () => {
386
- const mockReportMappings = mockReportMappingsFactory();
387
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
388
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
389
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
390
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
391
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
392
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
393
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
394
- }), ...iModelHandlers);
395
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
320
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
396
321
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
397
322
  const urlTextbox = screen.getByRole("textbox", {
398
323
  name: /odatafeedurl/i,
@@ -405,111 +330,34 @@ describe("Report Mappings View", () => {
405
330
  await user.click(copyButton);
406
331
  expect(screen.getByText(/copiedtoclipboard/i)).toBeInTheDocument();
407
332
  });
408
- it("full extraction", async () => {
333
+ it("update all datasets", async () => {
409
334
  const mockReportMappings = mockReportMappingsFactory();
410
- const [_, iModelHandlers] = mockMappingsFactory(mockReportMappings);
411
- const delay = REFRESH_DELAY + 1000;
412
- // Faking timers currently makes all promise based queries from RTL become unpredictable.
413
- // https://github.com/testing-library/dom-testing-library/issues/988
414
- // Should come back to this later.
415
- // Consequently, this test will be a bit slower.
416
- // jest.useFakeTimers()
417
- Element.prototype.scrollIntoView = jest.fn();
418
- const mockIModel = mockIModelsResponse[0].iModel;
419
- const mockRunId = faker.datatype.uuid();
420
- const mockExtractionResponse = {
421
- run: {
422
- id: mockRunId,
423
- _links: {
424
- status: {
425
- href: "",
426
- },
427
- },
428
- },
429
- };
430
- let mockStatusResponse = {
431
- status: {
432
- state: ExtractorState.Queued,
433
- reason: "",
434
- containsIssues: false,
435
- _links: {
436
- logs: {
437
- href: "",
438
- },
439
- },
440
- },
441
- };
442
- server.use(rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/reports/${mockReportId}/datasources/imodelMappings`, async (_req, res, ctx) => {
443
- return res(ctx.delay(), ctx.status(200), ctx.json(mockReportMappings));
444
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId1}`, async (_req, res, ctx) => {
445
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[0]));
446
- }), rest.get(`${Constants.api.baseUrl}/${mockIModelId2}`, async (_req, res, ctx) => {
447
- return res(ctx.delay(), ctx.status(200), ctx.json(mockIModelsResponse[1]));
448
- }), ...iModelHandlers, rest.post(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/imodels/${mockIModel.id}/extraction/run`, async (_req, res, ctx) => {
449
- return res(ctx.delay(800), ctx.status(200), ctx.json(mockExtractionResponse));
450
- }), rest.get(`${REPORTS_CONFIG_BASE_URL}/insights/reporting/datasources/extraction/status/${mockRunId}`, async (_req, res, ctx) => {
451
- return res(ctx.delay(), ctx.status(200), ctx.json(mockStatusResponse));
452
- }));
453
- render(React.createElement(ReportMappings, { report: mockReport, goBack: jest.fn() }));
454
- // https://github.com/testing-library/user-event/issues/833
455
- const user = userEvent.setup({ delay: null });
335
+ const mockMappings = mockMappingsFactory(mockReportMappings);
336
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
337
+ .returns(async () => mockIModelsResponse[0].iModel);
338
+ mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
339
+ .returns(async () => mockIModelsResponse[1].iModel);
340
+ mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
341
+ mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
342
+ const iModels = mockIModelsResponse.map((iModel) => iModel.iModel.id);
343
+ mockBulkExtractor.setup(async (x) => x.runIModelExtractions(iModels)).returns(async () => Promise.resolve());
344
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, bulkExtractor: mockBulkExtractor.object, goBack: jest.fn() }));
456
345
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
457
- const comboBox = screen.getByRole("combobox", {
458
- name: /updatedataset/i,
459
- });
460
- await user.type(comboBox, mockIModel.displayName);
461
- const option = screen.getByRole("menuitem", {
462
- name: mockIModel.displayName,
463
- });
464
- await user.click(option);
465
- // Combobox should have correct status
466
- const extractionComponent = screen.getByTestId("extraction-combo-box");
467
- expect(within(extractionComponent).getByDisplayValue(mockIModel.displayName)).toBeInTheDocument();
468
- // Should be two in the document. One in the status and the other in the list.
469
- // TODO Assert that it is in the correct HorizontalTile
470
- const startingStates = await screen.findAllByTitle(/starting/i);
471
- expect(startingStates).toHaveLength(2);
472
- const loadingStates = await screen.findAllByTitle(/loading/i);
473
- expect(loadingStates).toHaveLength(2);
474
- // act(() => {
475
- // jest.advanceTimersByTime(2000)
476
- // });
477
- const queuedStates = await screen.findAllByTitle(/queued/i, undefined, {
478
- timeout: delay,
479
- });
480
- expect(queuedStates).toHaveLength(2);
481
- mockStatusResponse = {
482
- status: {
483
- state: ExtractorState.Running,
484
- reason: "",
485
- containsIssues: false,
486
- _links: {
487
- logs: {
488
- href: "",
489
- },
490
- },
491
- },
492
- };
493
- const runningStates = await screen.findAllByTitle(/running/i, undefined, {
494
- timeout: delay,
495
- });
496
- expect(runningStates).toHaveLength(2);
497
- mockStatusResponse = {
498
- status: {
499
- state: ExtractorState.Succeeded,
500
- reason: "",
501
- containsIssues: false,
502
- _links: {
503
- logs: {
504
- href: "",
505
- },
506
- },
507
- },
508
- };
509
- const succeededStates = await screen.findAllByTitle(/success/i, undefined, {
510
- timeout: delay,
511
- });
512
- expect(succeededStates).toHaveLength(2);
346
+ const extractAllButton = screen.getByText(/UpdateAllDatasets/i);
347
+ expect(extractAllButton).toBeInTheDocument();
348
+ await user.click(extractAllButton);
349
+ mockBulkExtractor.verify(async (x) => x.runIModelExtractions(iModels), moq.Times.once());
513
350
  });
351
+ const assertHorizontalTiles = (horizontalTiles, mockMappings) => {
352
+ var _a, _b;
353
+ expect(horizontalTiles).toHaveLength(mockMappings.length);
354
+ for (const [index, horizontalTile] of horizontalTiles.entries()) {
355
+ const reportMappingTile = within(horizontalTile);
356
+ const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.imodel.href);
357
+ expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();
358
+ expect(reportMappingTile.getByTitle((_a = mockMappings[index].mapping.description) !== null && _a !== void 0 ? _a : "")).toBeInTheDocument();
359
+ expect(reportMappingTile.getByText((_b = mockiModel === null || mockiModel === void 0 ? void 0 : mockiModel.iModel.displayName) !== null && _b !== void 0 ? _b : "")).toBeInTheDocument();
360
+ }
361
+ };
514
362
  });
515
363
  //# sourceMappingURL=ReportMappings.test.js.map