@itwin/reports-config-widget-react 0.4.0 → 0.6.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 (393) hide show
  1. package/CHANGELOG.json +61 -0
  2. package/CHANGELOG.md +23 -2
  3. package/LICENSE.md +9 -9
  4. package/README.md +38 -38
  5. package/__mocks__/fileMock.js +4 -4
  6. package/api/reports-config-widget-react.api.md +130 -0
  7. package/api/reports-config-widget-react.exports.csv +14 -0
  8. package/api/temp/reports-config-widget-react.api.md +130 -0
  9. package/coverage/clover.xml +524 -514
  10. package/coverage/coverage-final.json +32 -32
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +26 -26
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +15 -15
  15. package/coverage/lcov-report/src/index.html +1 -1
  16. package/coverage/lcov-report/src/test/index.html +15 -15
  17. package/coverage/lcov-report/src/test/test-utils.tsx.html +233 -20
  18. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +22 -64
  19. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +5 -38
  20. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +23 -119
  21. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +117 -90
  22. package/coverage/lcov-report/src/widget/components/Constants.ts.html +16 -10
  23. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +16 -106
  24. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +6 -21
  25. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +6 -21
  26. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +7 -22
  27. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +7 -28
  28. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +6 -21
  29. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
  30. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +20 -47
  31. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +20 -11
  32. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +16 -79
  33. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +15 -108
  34. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +36 -75
  35. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +62 -92
  36. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +104 -128
  37. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +86 -299
  38. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +64 -226
  39. package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +63 -45
  40. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +10 -49
  41. package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +8 -47
  42. package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +6 -12
  43. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +15 -27
  44. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +12 -57
  45. package/coverage/lcov-report/src/widget/components/index.html +56 -56
  46. package/coverage/lcov-report/src/widget/components/utils.tsx.html +32 -176
  47. package/coverage/lcov-report/src/widget/context/BulkExtractorContext.tsx.html +9 -15
  48. package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +9 -15
  49. package/coverage/lcov-report/src/widget/context/index.html +1 -1
  50. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  51. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +12 -54
  52. package/coverage/lcov-report/src/widget/index.html +1 -1
  53. package/coverage/lcov.info +959 -922
  54. package/jest.config.js +14 -17
  55. package/lib/cjs/ReportsConfigWidget.d.ts +4 -0
  56. package/lib/cjs/ReportsConfigWidget.d.ts.map +1 -1
  57. package/lib/cjs/ReportsConfigWidget.js +4 -0
  58. package/lib/cjs/ReportsConfigWidget.js.map +1 -1
  59. package/lib/cjs/reports-config-widget-react.js +8 -4
  60. package/lib/cjs/reports-config-widget-react.js.map +1 -1
  61. package/lib/cjs/test/AddMappingModal.test.js +24 -72
  62. package/lib/cjs/test/AddMappingModal.test.js.map +1 -1
  63. package/lib/cjs/test/BulkExtractor.test.js +73 -44
  64. package/lib/cjs/test/BulkExtractor.test.js.map +1 -1
  65. package/lib/cjs/test/DeleteModal.test.js +3 -3
  66. package/lib/cjs/test/DeleteModal.test.js.map +1 -1
  67. package/lib/cjs/test/ReportAction.test.js +6 -4
  68. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  69. package/lib/cjs/test/ReportMappingHorizontalTile.test.js +76 -86
  70. package/lib/cjs/test/ReportMappingHorizontalTile.test.js.map +1 -1
  71. package/lib/cjs/test/ReportMappings.test.js +53 -80
  72. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  73. package/lib/cjs/test/Reports.test.js +54 -50
  74. package/lib/cjs/test/Reports.test.js.map +1 -1
  75. package/lib/cjs/test/WidgetHeader.test.js +3 -3
  76. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  77. package/lib/cjs/test/test-utils.d.ts +38 -0
  78. package/lib/cjs/test/test-utils.d.ts.map +1 -1
  79. package/lib/cjs/test/test-utils.js +79 -5
  80. package/lib/cjs/test/test-utils.js.map +1 -1
  81. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  82. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +7 -0
  83. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  84. package/lib/cjs/widget/ReportsConfigUiProvider.js +13 -4
  85. package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
  86. package/lib/cjs/widget/components/ActionPanel.d.ts.map +1 -1
  87. package/lib/cjs/widget/components/ActionPanel.js +5 -1
  88. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  89. package/lib/cjs/widget/components/AddMappingsModal.d.ts +1 -1
  90. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  91. package/lib/cjs/widget/components/AddMappingsModal.js +12 -8
  92. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  93. package/lib/cjs/widget/components/AddMappingsModal.scss +1 -1
  94. package/lib/cjs/widget/components/BulkExtractor.d.ts +7 -4
  95. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
  96. package/lib/cjs/widget/components/BulkExtractor.js +52 -35
  97. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
  98. package/lib/cjs/widget/components/Constants.d.ts +1 -0
  99. package/lib/cjs/widget/components/Constants.d.ts.map +1 -1
  100. package/lib/cjs/widget/components/Constants.js +5 -4
  101. package/lib/cjs/widget/components/Constants.js.map +1 -1
  102. package/lib/cjs/widget/components/DeleteModal.d.ts +1 -1
  103. package/lib/cjs/widget/components/DeleteModal.d.ts.map +1 -1
  104. package/lib/cjs/widget/components/DeleteModal.js +10 -6
  105. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  106. package/lib/cjs/widget/components/DeleteModal.scss +2 -2
  107. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
  108. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
  109. package/lib/cjs/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
  110. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
  111. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
  112. package/lib/cjs/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
  113. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
  114. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
  115. package/lib/cjs/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
  116. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
  117. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
  118. package/lib/cjs/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
  119. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
  120. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
  121. package/lib/cjs/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
  122. package/lib/cjs/widget/components/ExtractionStatus.d.ts +1 -1
  123. package/lib/cjs/widget/components/ExtractionStatus.d.ts.map +1 -1
  124. package/lib/cjs/widget/components/ExtractionStatus.js +14 -10
  125. package/lib/cjs/widget/components/ExtractionStatus.js.map +1 -1
  126. package/lib/cjs/widget/components/ExtractionStatus.scss +1 -1
  127. package/lib/cjs/widget/components/ExtractionToast.d.ts.map +1 -1
  128. package/lib/cjs/widget/components/ExtractionToast.js +3 -3
  129. package/lib/cjs/widget/components/ExtractionToast.js.map +1 -1
  130. package/lib/cjs/widget/components/HorizontalTile.d.ts.map +1 -1
  131. package/lib/cjs/widget/components/HorizontalTile.js +1 -2
  132. package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
  133. package/lib/cjs/widget/components/HorizontalTile.scss +1 -4
  134. package/lib/cjs/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
  135. package/lib/cjs/widget/components/LocalizedTablePaginator.js +6 -2
  136. package/lib/cjs/widget/components/LocalizedTablePaginator.js.map +1 -1
  137. package/lib/cjs/widget/components/ReportAction.d.ts +8 -0
  138. package/lib/cjs/widget/components/ReportAction.d.ts.map +1 -1
  139. package/lib/cjs/widget/components/ReportAction.js +14 -8
  140. package/lib/cjs/widget/components/ReportAction.js.map +1 -1
  141. package/lib/cjs/widget/components/ReportAction.scss +1 -1
  142. package/lib/cjs/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  143. package/lib/cjs/widget/components/ReportHorizontalTile.js +9 -5
  144. package/lib/cjs/widget/components/ReportHorizontalTile.js.map +1 -1
  145. package/lib/cjs/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  146. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js +51 -46
  147. package/lib/cjs/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  148. package/lib/cjs/widget/components/ReportMappings.d.ts +8 -0
  149. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  150. package/lib/cjs/widget/components/ReportMappings.js +30 -12
  151. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  152. package/lib/cjs/widget/components/Reports.d.ts +9 -1
  153. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  154. package/lib/cjs/widget/components/Reports.js +12 -9
  155. package/lib/cjs/widget/components/Reports.js.map +1 -1
  156. package/lib/cjs/widget/components/Reports.scss +0 -1
  157. package/lib/cjs/widget/components/ReportsConfigContext.d.ts +8 -0
  158. package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -1
  159. package/lib/cjs/widget/components/ReportsConfigContext.js +20 -7
  160. package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -1
  161. package/lib/cjs/widget/components/ReportsContainer.d.ts +1 -1
  162. package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
  163. package/lib/cjs/widget/components/ReportsContainer.js +7 -5
  164. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  165. package/lib/cjs/widget/components/ReportsContainer.scss +1 -1
  166. package/lib/cjs/widget/components/ReportsHeader.d.ts +1 -1
  167. package/lib/cjs/widget/components/ReportsHeader.d.ts.map +1 -1
  168. package/lib/cjs/widget/components/ReportsHeader.js +6 -7
  169. package/lib/cjs/widget/components/ReportsHeader.js.map +1 -1
  170. package/lib/cjs/widget/components/ReportsRouter.d.ts.map +1 -1
  171. package/lib/cjs/widget/components/ReportsRouter.js +3 -3
  172. package/lib/cjs/widget/components/ReportsRouter.js.map +1 -1
  173. package/lib/cjs/widget/components/SearchBar.d.ts +1 -1
  174. package/lib/cjs/widget/components/SearchBar.d.ts.map +1 -1
  175. package/lib/cjs/widget/components/SearchBar.js +9 -5
  176. package/lib/cjs/widget/components/SearchBar.js.map +1 -1
  177. package/lib/cjs/widget/components/SelectIModel.d.ts +1 -1
  178. package/lib/cjs/widget/components/SelectIModel.d.ts.map +1 -1
  179. package/lib/cjs/widget/components/SelectIModel.js +7 -3
  180. package/lib/cjs/widget/components/SelectIModel.js.map +1 -1
  181. package/lib/cjs/widget/components/SelectIModel.scss +1 -1
  182. package/lib/cjs/widget/components/utils.d.ts +1 -1
  183. package/lib/cjs/widget/components/utils.d.ts.map +1 -1
  184. package/lib/cjs/widget/components/utils.js +5 -5
  185. package/lib/cjs/widget/components/utils.js.map +1 -1
  186. package/lib/cjs/widget/components/utils.scss +1 -1
  187. package/lib/cjs/widget/context/BulkExtractorContext.d.ts.map +1 -1
  188. package/lib/cjs/widget/context/BulkExtractorContext.js +5 -1
  189. package/lib/cjs/widget/context/BulkExtractorContext.js.map +1 -1
  190. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  191. package/lib/cjs/widget/context/ReportsConfigApiContext.js +5 -1
  192. package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -1
  193. package/lib/cjs/widget/hooks/useValidator.d.ts +1 -4
  194. package/lib/cjs/widget/hooks/useValidator.d.ts.map +1 -1
  195. package/lib/cjs/widget/hooks/useValidator.js +3 -3
  196. package/lib/cjs/widget/hooks/useValidator.js.map +1 -1
  197. package/lib/esm/ReportsConfigWidget.d.ts +4 -0
  198. package/lib/esm/ReportsConfigWidget.d.ts.map +1 -1
  199. package/lib/esm/ReportsConfigWidget.js +4 -0
  200. package/lib/esm/ReportsConfigWidget.js.map +1 -1
  201. package/lib/esm/reports-config-widget-react.js +3 -3
  202. package/lib/esm/reports-config-widget-react.js.map +1 -1
  203. package/lib/esm/test/AddMappingModal.test.js +12 -64
  204. package/lib/esm/test/AddMappingModal.test.js.map +1 -1
  205. package/lib/esm/test/BulkExtractor.test.js +69 -44
  206. package/lib/esm/test/BulkExtractor.test.js.map +1 -1
  207. package/lib/esm/test/DeleteModal.test.js +4 -4
  208. package/lib/esm/test/DeleteModal.test.js.map +1 -1
  209. package/lib/esm/test/ReportAction.test.js +7 -5
  210. package/lib/esm/test/ReportAction.test.js.map +1 -1
  211. package/lib/esm/test/ReportMappingHorizontalTile.test.js +66 -80
  212. package/lib/esm/test/ReportMappingHorizontalTile.test.js.map +1 -1
  213. package/lib/esm/test/ReportMappings.test.js +42 -73
  214. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  215. package/lib/esm/test/Reports.test.js +32 -51
  216. package/lib/esm/test/Reports.test.js.map +1 -1
  217. package/lib/esm/test/WidgetHeader.test.js +3 -3
  218. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  219. package/lib/esm/test/test-utils.d.ts +38 -0
  220. package/lib/esm/test/test-utils.d.ts.map +1 -1
  221. package/lib/esm/test/test-utils.js +73 -3
  222. package/lib/esm/test/test-utils.js.map +1 -1
  223. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  224. package/lib/esm/widget/ReportsConfigUiProvider.d.ts +7 -0
  225. package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  226. package/lib/esm/widget/ReportsConfigUiProvider.js +9 -4
  227. package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
  228. package/lib/esm/widget/components/ActionPanel.d.ts.map +1 -1
  229. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  230. package/lib/esm/widget/components/AddMappingsModal.d.ts +1 -1
  231. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  232. package/lib/esm/widget/components/AddMappingsModal.js +7 -7
  233. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  234. package/lib/esm/widget/components/AddMappingsModal.scss +1 -1
  235. package/lib/esm/widget/components/BulkExtractor.d.ts +7 -4
  236. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
  237. package/lib/esm/widget/components/BulkExtractor.js +53 -36
  238. package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
  239. package/lib/esm/widget/components/Constants.d.ts +1 -0
  240. package/lib/esm/widget/components/Constants.d.ts.map +1 -1
  241. package/lib/esm/widget/components/Constants.js +4 -3
  242. package/lib/esm/widget/components/Constants.js.map +1 -1
  243. package/lib/esm/widget/components/DeleteModal.d.ts +1 -1
  244. package/lib/esm/widget/components/DeleteModal.d.ts.map +1 -1
  245. package/lib/esm/widget/components/DeleteModal.js +6 -6
  246. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  247. package/lib/esm/widget/components/DeleteModal.scss +2 -2
  248. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.d.ts.map +1 -1
  249. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js +3 -3
  250. package/lib/esm/widget/components/ExtractionStates/FailedExtractionState.js.map +1 -1
  251. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.d.ts.map +1 -1
  252. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js +3 -3
  253. package/lib/esm/widget/components/ExtractionStates/QueuedExtractionState.js.map +1 -1
  254. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.d.ts.map +1 -1
  255. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js +3 -3
  256. package/lib/esm/widget/components/ExtractionStates/RunningExtractionState.js.map +1 -1
  257. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.d.ts.map +1 -1
  258. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js +3 -3
  259. package/lib/esm/widget/components/ExtractionStates/StartingExtractionState.js.map +1 -1
  260. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.d.ts.map +1 -1
  261. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js +3 -3
  262. package/lib/esm/widget/components/ExtractionStates/SucceededExtractionState.js.map +1 -1
  263. package/lib/esm/widget/components/ExtractionStatus.d.ts +1 -1
  264. package/lib/esm/widget/components/ExtractionStatus.d.ts.map +1 -1
  265. package/lib/esm/widget/components/ExtractionStatus.js +9 -9
  266. package/lib/esm/widget/components/ExtractionStatus.js.map +1 -1
  267. package/lib/esm/widget/components/ExtractionStatus.scss +1 -1
  268. package/lib/esm/widget/components/ExtractionToast.d.ts.map +1 -1
  269. package/lib/esm/widget/components/ExtractionToast.js +3 -3
  270. package/lib/esm/widget/components/ExtractionToast.js.map +1 -1
  271. package/lib/esm/widget/components/HorizontalTile.d.ts.map +1 -1
  272. package/lib/esm/widget/components/HorizontalTile.js +1 -2
  273. package/lib/esm/widget/components/HorizontalTile.js.map +1 -1
  274. package/lib/esm/widget/components/HorizontalTile.scss +1 -4
  275. package/lib/esm/widget/components/LocalizedTablePaginator.d.ts.map +1 -1
  276. package/lib/esm/widget/components/LocalizedTablePaginator.js +1 -1
  277. package/lib/esm/widget/components/LocalizedTablePaginator.js.map +1 -1
  278. package/lib/esm/widget/components/ReportAction.d.ts +8 -0
  279. package/lib/esm/widget/components/ReportAction.d.ts.map +1 -1
  280. package/lib/esm/widget/components/ReportAction.js +10 -8
  281. package/lib/esm/widget/components/ReportAction.js.map +1 -1
  282. package/lib/esm/widget/components/ReportAction.scss +1 -1
  283. package/lib/esm/widget/components/ReportHorizontalTile.d.ts.map +1 -1
  284. package/lib/esm/widget/components/ReportHorizontalTile.js +6 -6
  285. package/lib/esm/widget/components/ReportHorizontalTile.js.map +1 -1
  286. package/lib/esm/widget/components/ReportMappingHorizontalTile.d.ts.map +1 -1
  287. package/lib/esm/widget/components/ReportMappingHorizontalTile.js +47 -46
  288. package/lib/esm/widget/components/ReportMappingHorizontalTile.js.map +1 -1
  289. package/lib/esm/widget/components/ReportMappings.d.ts +8 -0
  290. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  291. package/lib/esm/widget/components/ReportMappings.js +28 -14
  292. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  293. package/lib/esm/widget/components/Reports.d.ts +9 -1
  294. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  295. package/lib/esm/widget/components/Reports.js +8 -9
  296. package/lib/esm/widget/components/Reports.js.map +1 -1
  297. package/lib/esm/widget/components/Reports.scss +0 -1
  298. package/lib/esm/widget/components/ReportsConfigContext.d.ts +8 -0
  299. package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -1
  300. package/lib/esm/widget/components/ReportsConfigContext.js +17 -8
  301. package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -1
  302. package/lib/esm/widget/components/ReportsContainer.d.ts +1 -1
  303. package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
  304. package/lib/esm/widget/components/ReportsContainer.js +2 -4
  305. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  306. package/lib/esm/widget/components/ReportsContainer.scss +1 -1
  307. package/lib/esm/widget/components/ReportsHeader.d.ts +1 -1
  308. package/lib/esm/widget/components/ReportsHeader.d.ts.map +1 -1
  309. package/lib/esm/widget/components/ReportsHeader.js +6 -7
  310. package/lib/esm/widget/components/ReportsHeader.js.map +1 -1
  311. package/lib/esm/widget/components/ReportsRouter.d.ts.map +1 -1
  312. package/lib/esm/widget/components/ReportsRouter.js +3 -3
  313. package/lib/esm/widget/components/ReportsRouter.js.map +1 -1
  314. package/lib/esm/widget/components/SearchBar.d.ts +1 -1
  315. package/lib/esm/widget/components/SearchBar.d.ts.map +1 -1
  316. package/lib/esm/widget/components/SearchBar.js +4 -4
  317. package/lib/esm/widget/components/SearchBar.js.map +1 -1
  318. package/lib/esm/widget/components/SelectIModel.d.ts +1 -1
  319. package/lib/esm/widget/components/SelectIModel.d.ts.map +1 -1
  320. package/lib/esm/widget/components/SelectIModel.js +3 -3
  321. package/lib/esm/widget/components/SelectIModel.js.map +1 -1
  322. package/lib/esm/widget/components/SelectIModel.scss +1 -1
  323. package/lib/esm/widget/components/utils.d.ts +1 -1
  324. package/lib/esm/widget/components/utils.d.ts.map +1 -1
  325. package/lib/esm/widget/components/utils.js +6 -6
  326. package/lib/esm/widget/components/utils.js.map +1 -1
  327. package/lib/esm/widget/components/utils.scss +1 -1
  328. package/lib/esm/widget/context/BulkExtractorContext.d.ts.map +1 -1
  329. package/lib/esm/widget/context/BulkExtractorContext.js.map +1 -1
  330. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  331. package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -1
  332. package/lib/esm/widget/hooks/useValidator.d.ts +1 -4
  333. package/lib/esm/widget/hooks/useValidator.d.ts.map +1 -1
  334. package/lib/esm/widget/hooks/useValidator.js +3 -3
  335. package/lib/esm/widget/hooks/useValidator.js.map +1 -1
  336. package/package.json +37 -31
  337. package/src/ReportsConfigWidget.ts +9 -9
  338. package/src/reports-config-widget-react.ts +3 -3
  339. package/src/test/AddMappingModal.test.tsx +47 -122
  340. package/src/test/BulkExtractor.test.ts +73 -118
  341. package/src/test/DeleteModal.test.tsx +6 -23
  342. package/src/test/ReportAction.test.tsx +20 -38
  343. package/src/test/ReportMappingHorizontalTile.test.tsx +140 -161
  344. package/src/test/ReportMappings.test.tsx +80 -146
  345. package/src/test/Reports.test.tsx +57 -169
  346. package/src/test/WidgetHeader.test.tsx +3 -3
  347. package/src/test/test-utils.tsx +80 -9
  348. package/src/widget/ReportsConfigUiProvider.tsx +16 -30
  349. package/src/widget/components/ActionPanel.tsx +3 -14
  350. package/src/widget/components/AddMappingsModal.scss +1 -1
  351. package/src/widget/components/AddMappingsModal.tsx +19 -51
  352. package/src/widget/components/BulkExtractor.ts +63 -54
  353. package/src/widget/components/Constants.ts +5 -3
  354. package/src/widget/components/DeleteModal.scss +2 -2
  355. package/src/widget/components/DeleteModal.tsx +11 -41
  356. package/src/widget/components/ExtractionStates/FailedExtractionState.tsx +4 -9
  357. package/src/widget/components/ExtractionStates/QueuedExtractionState.tsx +4 -9
  358. package/src/widget/components/ExtractionStates/RunningExtractionState.tsx +4 -9
  359. package/src/widget/components/ExtractionStates/StartingExtractionState.tsx +4 -11
  360. package/src/widget/components/ExtractionStates/SucceededExtractionState.tsx +4 -9
  361. package/src/widget/components/ExtractionStatus.scss +1 -1
  362. package/src/widget/components/ExtractionStatus.tsx +9 -18
  363. package/src/widget/components/ExtractionToast.tsx +12 -9
  364. package/src/widget/components/HorizontalTile.scss +1 -4
  365. package/src/widget/components/HorizontalTile.tsx +12 -33
  366. package/src/widget/components/LocalizedTablePaginator.tsx +13 -44
  367. package/src/widget/components/ReportAction.scss +1 -1
  368. package/src/widget/components/ReportAction.tsx +26 -39
  369. package/src/widget/components/ReportHorizontalTile.tsx +45 -55
  370. package/src/widget/components/ReportMappingHorizontalTile.tsx +70 -78
  371. package/src/widget/components/ReportMappings.tsx +59 -130
  372. package/src/widget/components/Reports.scss +0 -1
  373. package/src/widget/components/Reports.tsx +28 -82
  374. package/src/widget/components/ReportsConfigContext.tsx +32 -26
  375. package/src/widget/components/ReportsContainer.scss +1 -1
  376. package/src/widget/components/ReportsContainer.tsx +8 -21
  377. package/src/widget/components/ReportsHeader.tsx +6 -19
  378. package/src/widget/components/ReportsRouter.tsx +4 -6
  379. package/src/widget/components/SearchBar.tsx +9 -13
  380. package/src/widget/components/SelectIModel.scss +1 -1
  381. package/src/widget/components/SelectIModel.tsx +10 -25
  382. package/src/widget/components/utils.scss +1 -1
  383. package/src/widget/components/utils.tsx +21 -69
  384. package/src/widget/context/BulkExtractorContext.tsx +4 -6
  385. package/src/widget/context/ReportsConfigApiContext.tsx +4 -6
  386. package/src/widget/hooks/useValidator.ts +10 -24
  387. package/tsconfig.json +11 -11
  388. package/.rush/temp/operation/rebuild/all.log +0 -9
  389. package/.rush/temp/operation/rebuild/state.json +0 -3
  390. package/.rush/temp/package-deps_rebuild.json +0 -68
  391. package/.rush/temp/shrinkwrap-deps.json +0 -898
  392. package/reports-config-widget-react.build.error.log +0 -14
  393. package/reports-config-widget-react.build.log +0 -63
@@ -1,71 +1,17 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
6
  import faker from "@faker-js/faker";
7
7
  import "@testing-library/jest-dom";
8
8
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
9
- import { fireEvent, render, screen, waitFor, within, } from "./test-utils";
9
+ import { fireEvent, mockIModelId1, mockIModelsResponse, mockReportId, render, screen, waitFor, within } from "./test-utils";
10
10
  import * as moq from "typemoq";
11
- import { IModelState } from "@itwin/imodels-client-management";
12
11
  import { BeEvent } from "@itwin/core-bentley";
13
12
  import { ExtractionStates } from "../widget/components/ExtractionStatus";
14
13
  import { ReportMappingHorizontalTile } from "../widget/components/ReportMappingHorizontalTile";
15
14
  import { EmptyLocalization } from "@itwin/core-common";
16
- const mockITwinId = faker.datatype.uuid();
17
- // Lets work with two iModels for now.
18
- const mockIModelId1 = faker.datatype.uuid();
19
- const mockIModelId2 = faker.datatype.uuid();
20
- const mockReportId = faker.datatype.uuid();
21
- const mockIModelsResponse = [
22
- {
23
- iModel: {
24
- id: mockIModelId1,
25
- displayName: "rAnDoMdIsPlAynAmE1",
26
- name: "rAnDomName1",
27
- description: "rAnDoMDeScRiPtIoN1",
28
- createdDateTime: "2021-10-04T22:13:50.397Z",
29
- state: IModelState.Initialized,
30
- projectId: mockITwinId,
31
- extent: null,
32
- _links: {
33
- creator: {
34
- href: "",
35
- },
36
- namedVersions: {
37
- href: "",
38
- },
39
- changesets: {
40
- href: "",
41
- },
42
- },
43
- },
44
- },
45
- {
46
- iModel: {
47
- id: mockIModelId2,
48
- displayName: "rAnDoMdIsPlAynAmE2",
49
- name: "rAnDomName2",
50
- description: "rAnDoMDeScRiPtIoN2",
51
- createdDateTime: "2021-10-04T22:13:50.397Z",
52
- state: IModelState.Initialized,
53
- projectId: mockITwinId,
54
- extent: null,
55
- _links: {
56
- creator: {
57
- href: "",
58
- },
59
- namedVersions: {
60
- href: "",
61
- },
62
- changesets: {
63
- href: "",
64
- },
65
- },
66
- },
67
- },
68
- ];
69
15
  const mockProjectIModels = {
70
16
  iModels: mockIModelsResponse.map((iModel) => ({
71
17
  id: iModel.iModel.id,
@@ -135,7 +81,7 @@ const mockMappingsFactory = (mockReportMappings) => {
135
81
  modifiedOn: "",
136
82
  modifiedBy: "",
137
83
  _links: {
138
- imodel: {
84
+ iModel: {
139
85
  // Tie the mapping to to the iModel Id
140
86
  href: mapping.imodelId,
141
87
  },
@@ -163,6 +109,7 @@ const mockReportMappingsAndMappingsFactory = () => {
163
109
  const mockBulkExtractor = moq.Mock.ofType();
164
110
  const mockIModelsClient = moq.Mock.ofType();
165
111
  jest.mock("../widget/components/Constants.ts", () => ({
112
+ ...jest.requireActual("../widget/components/Constants.ts"),
166
113
  STATUS_CHECK_INTERVAL: 10,
167
114
  }));
168
115
  const mockOdataFeedUrl = "mockOdataFeedUrl";
@@ -177,7 +124,8 @@ afterEach(() => {
177
124
  describe("Report Mapping Horizontal Tile", () => {
178
125
  it("tile renders correctly", async () => {
179
126
  const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];
180
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
127
+ mockBulkExtractor
128
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
181
129
  .returns(async () => ExtractionStates.None);
182
130
  render(React.createElement(ReportMappingHorizontalTile, { jobStartEvent: new BeEvent(), mapping: firstMockMapping, onClickDelete: () => { }, bulkExtractor: mockBulkExtractor.object, odataFeedUrl: mockOdataFeedUrl }));
183
131
  mockBulkExtractor.verify(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl), moq.Times.once());
@@ -190,9 +138,17 @@ describe("Report Mapping Horizontal Tile", () => {
190
138
  });
191
139
  it("starting extraction sends request", async () => {
192
140
  const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];
193
- mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))
194
- .returns(async () => { return Promise.resolve(); });
195
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
141
+ const firstMockExtractionRequest = {
142
+ mappings: [{ id: firstMockMapping.mappingId }],
143
+ iModelId: firstMockMapping.imodelId,
144
+ };
145
+ mockBulkExtractor
146
+ .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))
147
+ .returns(async () => {
148
+ return Promise.resolve();
149
+ });
150
+ mockBulkExtractor
151
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
196
152
  .returns(async () => ExtractionStates.None);
197
153
  const jobStartEvent = new BeEvent();
198
154
  const { user } = render(React.createElement(ReportMappingHorizontalTile, { jobStartEvent: jobStartEvent, mapping: firstMockMapping, onClickDelete: () => { }, bulkExtractor: mockBulkExtractor.object, odataFeedUrl: mockOdataFeedUrl }));
@@ -200,13 +156,21 @@ describe("Report Mapping Horizontal Tile", () => {
200
156
  await waitFor(() => expect(screen.getByRole("button", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });
201
157
  const startExtractionButton = screen.getByRole("button", { name: /UpdateDataset/i });
202
158
  await user.click(startExtractionButton);
203
- mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockMapping.imodelId), moq.Times.once());
159
+ mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockExtractionRequest), moq.Times.once());
204
160
  });
205
161
  it("on delete is called when remove is pressed", async () => {
206
162
  const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];
207
- mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))
208
- .returns(async () => { return Promise.resolve(); });
209
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
163
+ const firstMockExtractionRequest = {
164
+ mappings: [{ id: firstMockMapping.mappingId }],
165
+ iModelId: firstMockMapping.imodelId,
166
+ };
167
+ mockBulkExtractor
168
+ .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))
169
+ .returns(async () => {
170
+ return Promise.resolve();
171
+ });
172
+ mockBulkExtractor
173
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
210
174
  .returns(async () => ExtractionStates.None);
211
175
  const mockOnClickDelete = jest.fn();
212
176
  const jobStartEvent = new BeEvent();
@@ -218,32 +182,45 @@ describe("Report Mapping Horizontal Tile", () => {
218
182
  });
219
183
  it("full extraction status cycle", async () => {
220
184
  const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];
221
- mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
185
+ const firstMockExtractionRequest = {
186
+ mappings: [{ id: firstMockMapping.mappingId }],
187
+ iModelId: firstMockMapping.imodelId,
188
+ };
189
+ mockIModelsClient
190
+ .setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
222
191
  .returns(async () => mockIModelsResponse[0].iModel);
223
- mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))
224
- .returns(async () => { return Promise.resolve(); });
225
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
192
+ mockBulkExtractor
193
+ .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))
194
+ .returns(async () => {
195
+ return Promise.resolve();
196
+ });
197
+ mockBulkExtractor
198
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
226
199
  .returns(async () => ExtractionStates.None);
227
200
  const mockOnClickDelete = jest.fn();
228
201
  const jobStartEvent = new BeEvent();
229
202
  const { user } = render(React.createElement(ReportMappingHorizontalTile, { jobStartEvent: jobStartEvent, mapping: firstMockMapping, onClickDelete: mockOnClickDelete, bulkExtractor: mockBulkExtractor.object, odataFeedUrl: mockOdataFeedUrl }));
230
203
  await waitFor(() => expect(screen.getByRole("button", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });
231
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
204
+ mockBulkExtractor
205
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
232
206
  .returns(async () => ExtractionStates.Starting);
233
207
  const startExtractionButton = screen.getByRole("button", { name: /UpdateDataset/i });
234
208
  await user.click(startExtractionButton);
235
- mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockMapping.imodelId), moq.Times.once());
209
+ mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockExtractionRequest), moq.Times.once());
236
210
  expect(screen.getByTitle(/Starting/i)).toBeInTheDocument();
237
211
  mockBulkExtractor.reset();
238
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
212
+ mockBulkExtractor
213
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
239
214
  .returns(async () => ExtractionStates.Queued);
240
215
  await waitFor(() => expect(screen.getByTitle(/Queued/i)).toBeInTheDocument(), { timeout: 1000 });
241
216
  mockBulkExtractor.reset();
242
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
217
+ mockBulkExtractor
218
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
243
219
  .returns(async () => ExtractionStates.Running);
244
220
  await waitFor(() => expect(screen.getByTitle(/Running/i)).toBeInTheDocument(), { timeout: 1000 });
245
221
  mockBulkExtractor.reset();
246
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
222
+ mockBulkExtractor
223
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
247
224
  .returns(async () => ExtractionStates.Succeeded);
248
225
  await waitFor(() => expect(screen.getByTitle(/Success/i)).toBeInTheDocument(), { timeout: 1000 });
249
226
  mockBulkExtractor.reset();
@@ -254,7 +231,12 @@ describe("Report Mapping Horizontal Tile", () => {
254
231
  const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory();
255
232
  const firstMockMapping = mockReportMappingsAndMappings[0];
256
233
  const secondMockMapping = mockReportMappingsAndMappings[1];
257
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
234
+ const firstMockExtractionRequest = {
235
+ mappings: [{ id: firstMockMapping.mappingId }],
236
+ iModelId: firstMockMapping.imodelId,
237
+ };
238
+ mockBulkExtractor
239
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
258
240
  .returns(async () => ExtractionStates.None);
259
241
  const jobStartEvent = new BeEvent();
260
242
  const { user } = render(React.createElement("div", null,
@@ -266,10 +248,14 @@ describe("Report Mapping Horizontal Tile", () => {
266
248
  await waitFor(() => expect(preview.getByRole("button", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });
267
249
  }
268
250
  mockBulkExtractor.reset();
269
- mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
251
+ mockBulkExtractor
252
+ .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))
270
253
  .returns(async () => ExtractionStates.Queued);
271
- mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))
272
- .returns(async () => { return Promise.resolve(); });
254
+ mockBulkExtractor
255
+ .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))
256
+ .returns(async () => {
257
+ return Promise.resolve();
258
+ });
273
259
  const startExtractionButton = screen.getAllByRole("button", { name: /UpdateDataset/i })[0];
274
260
  await user.click(startExtractionButton);
275
261
  for (const tile of tiles) {
@@ -1 +1 @@
1
- {"version":3,"file":"ReportMappingHorizontalTile.test.js","sourceRoot":"","sources":["../../../src/test/ReportMappingHorizontalTile.test.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,GAAG,MAAM,SAAS,CAAC;AAO/B,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC1C,sCAAsC;AACtC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAE5C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAE3C,MAAM,mBAAmB,GAAG;IAC1B;QACE,MAAM,EAAE;YACN,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,oBAAoB;YACjC,eAAe,EAAE,0BAA0B;YAC3C,KAAK,EAAE,WAAW,CAAC,WAAW;YAC9B,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;iBACT;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,EAAE;iBACT;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE;iBACT;aACF;SACF;KACF;IACD;QACE,MAAM,EAAE;YACN,EAAE,EAAE,aAAa;YACjB,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,oBAAoB;YACjC,eAAe,EAAE,0BAA0B;YAC3C,KAAK,EAAE,WAAW,CAAC,WAAW;YAC9B,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;iBACT;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,EAAE;iBACT;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE;iBACT;aACF;SACF;KACF;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;KACvC,CAAC,CAAC;IACH,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,IAAI,EAAE,EAAE;SACT;QACD,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAEF,MAAM,yBAAyB,GAAG,GAA4B,EAAE;IAC9D,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChC,QAAQ,EAAE,aAAa;gBACvB,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE;qBACT;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,EAAE;qBACT;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE;qBACT;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChC,QAAQ,EAAE,aAAa;gBACvB,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE;qBACT;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,EAAE;qBACT;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE;qBACT;iBACF;aACF;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;aACT;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,kBAA2C,EAC1B,EAAE;IACnB,MAAM,YAAY,GAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CACnE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,OAAO,EAAE;YACP,EAAE,EAAE,OAAO,CAAC,SAAS;YACrB,WAAW,EAAE,kBAAkB,KAAK,EAAE;YACtC,WAAW,EAAE,yBAAyB,KAAK,EAAE;YAC7C,iBAAiB,EAAE,KAAK;YACxB,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,EAAE;YACd,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,sCAAsC;oBACtC,IAAI,EAAE,OAAO,CAAC,QAAQ;iBACvB;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,oCAAoC,GAAG,GAA8B,EAAE;IAC3E,MAAM,cAAc,GAAG,yBAAyB,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,wBAAwB,GAC5B,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,aAAa,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC;QAC5F,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,QAAQ,CAAE,CAAC,WAAW,CAAC;QACxG,MAAM,uBAAuB,GAA4B;YACvD,GAAG,aAAa;YAChB,UAAU;YACV,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;SAC9C,CAAC;QACF,OAAO,uBAAuB,CAAC;IACjC,CAAC,CAAC,CAAC;IACL,OAAO,wBAAwB,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAiB,CAAC;AAC3D,MAAM,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAsC,CAAC;AAEhF,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,qBAAqB,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC7C,MAAM,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1B,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,gBAAgB,GAAG,oCAAoC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,CAAC,oBAAC,2BAA2B,IACjC,aAAa,EAAE,IAAI,OAAO,EAAE,EAC5B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,EACxB,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B,CAAC,CAAC;QAEJ,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpJ,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1H,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,gBAAgB,GAAG,oCAAoC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACnF,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,OAAO,EAA8B,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,oBAAC,2BAA2B,IAClD,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,EACxB,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B,CAAC,CAAC;QAEJ,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpJ,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1H,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACrF,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAExC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,gBAAgB,GAAG,oCAAoC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACnF,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,OAAO,EAA8B,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,oBAAC,2BAA2B,IAClD,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,iBAAiB,EAChC,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B,CAAC,CAAC;QAEJ,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnH,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE/B,MAAM,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,gBAAgB,GAAG,oCAAoC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;aACvH,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEtD,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACnF,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,OAAO,EAA8B,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,oBAAC,2BAA2B,IAClD,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,iBAAiB,EAChC,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B,CAAC,CAAC;QAEJ,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1H,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACrF,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAExC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1G,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAE3D,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAElG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAElG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,6BAA6B,GAAG,oCAAoC,EAAE,CAAC;QAC7E,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC;QAE3D,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,OAAO,EAA8B,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CACrB;YACE,oBAAC,2BAA2B,IAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,EACxB,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B;YACF,oBAAC,2BAA2B,IAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,EACxB,aAAa,EAAE,iBAAiB,CAAC,MAAM,EACvC,YAAY,EAAE,gBAAgB,GAC9B,CACE,CAAC,CAAC;QAEV,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5H;QAED,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;aAC7H,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEhD,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACnF,OAAO,CAAC,KAAK,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SACnG;QAED,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport faker from \"@faker-js/faker\";\nimport \"@testing-library/jest-dom\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport {\n fireEvent,\n render,\n screen,\n waitFor,\n within,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type {\n MappingSingle,\n ReportMappingCollection,\n} from \"@itwin/insights-client\";\nimport type { ReportMappingAndMapping } from \"../widget/components/ReportMappings\";\nimport type { GetSingleIModelParams, IModelOperations, OperationOptions } from \"@itwin/imodels-client-management\";\nimport { IModelState } from \"@itwin/imodels-client-management\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { ExtractionStates } from \"../widget/components/ExtractionStatus\";\nimport { ReportMappingHorizontalTile } from \"../widget/components/ReportMappingHorizontalTile\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { BulkExtractor } from \"../widget/components/BulkExtractor\";\n\nconst mockITwinId = faker.datatype.uuid();\n// Lets work with two iModels for now.\nconst mockIModelId1 = faker.datatype.uuid();\nconst mockIModelId2 = faker.datatype.uuid();\n\nconst mockReportId = faker.datatype.uuid();\n\nconst mockIModelsResponse = [\n {\n iModel: {\n id: mockIModelId1,\n displayName: \"rAnDoMdIsPlAynAmE1\",\n name: \"rAnDomName1\",\n description: \"rAnDoMDeScRiPtIoN1\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n {\n iModel: {\n id: mockIModelId2,\n displayName: \"rAnDoMdIsPlAynAmE2\",\n name: \"rAnDomName2\",\n description: \"rAnDoMDeScRiPtIoN2\",\n createdDateTime: \"2021-10-04T22:13:50.397Z\",\n state: IModelState.Initialized,\n projectId: mockITwinId,\n extent: null,\n _links: {\n creator: {\n href: \"\",\n },\n namedVersions: {\n href: \"\",\n },\n changesets: {\n href: \"\",\n },\n },\n },\n },\n];\n\nconst mockProjectIModels = {\n iModels: mockIModelsResponse.map((iModel) => ({\n id: iModel.iModel.id,\n displayName: iModel.iModel.displayName,\n })),\n _links: {\n self: {\n href: \"\",\n },\n prev: null,\n next: null,\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (\n mockReportMappings: ReportMappingCollection\n): MappingSingle[] => {\n const mockMappings: MappingSingle[] = mockReportMappings.mappings.map(\n (mapping, index) => ({\n mapping: {\n id: mapping.mappingId,\n mappingName: `mOcKMaPpIngNaMe${index}`,\n description: `mOcKmApPInGDeScRiPtIoN${index}`,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n imodel: {\n // Tie the mapping to to the iModel Id\n href: mapping.imodelId,\n },\n },\n },\n })\n );\n\n return mockMappings;\n};\n\nconst mockReportMappingsAndMappingsFactory = (): ReportMappingAndMapping[] => {\n const reportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(reportMappings);\n const reportMappingsAndMapping =\n reportMappings.mappings.map((reportMapping) => {\n const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;\n const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mappingName,\n mappingDescription: mapping.description ?? \"\",\n };\n return reportMappingAndMapping;\n });\n return reportMappingsAndMapping;\n};\n\nconst mockBulkExtractor = moq.Mock.ofType<BulkExtractor>();\nconst mockIModelsClient = moq.Mock.ofType<IModelOperations<OperationOptions>>();\n\njest.mock(\"../widget/components/Constants.ts\", () => ({\n STATUS_CHECK_INTERVAL: 10,\n}));\n\nconst mockOdataFeedUrl = \"mockOdataFeedUrl\";\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n});\n\nafterEach(() => {\n mockIModelsClient.reset();\n mockBulkExtractor.reset();\n});\n\ndescribe(\"Report Mapping Horizontal Tile\", () => {\n it(\"tile renders correctly\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n render(<ReportMappingHorizontalTile\n jobStartEvent={new BeEvent()}\n mapping={firstMockMapping}\n onClickDelete={() => { }}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />);\n\n mockBulkExtractor.verify(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl), moq.Times.once());\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n expect(screen.getByText(firstMockMapping.mappingName)).toBeInTheDocument();\n expect(screen.getByTitle(firstMockMapping.mappingDescription)).toBeInTheDocument();\n expect(screen.getByText(firstMockMapping.iModelName)).toBeInTheDocument();\n expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).toBeInTheDocument();\n expect(screen.getByRole(\"button\", { name: /Remove/i })).toBeInTheDocument();\n });\n\n it(\"starting extraction sends request\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n\n mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))\n .returns(async () => { return Promise.resolve(); });\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(<ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={() => { }}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />);\n\n mockBulkExtractor.verify(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl), moq.Times.once());\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n const startExtractionButton = screen.getByRole(\"button\", { name: /UpdateDataset/i });\n await user.click(startExtractionButton);\n\n mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockMapping.imodelId), moq.Times.once());\n });\n\n it(\"on delete is called when remove is pressed\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n\n mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))\n .returns(async () => { return Promise.resolve(); });\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const mockOnClickDelete = jest.fn();\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(<ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={mockOnClickDelete}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />);\n\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /Remove/i })).not.toBeDisabled(), { timeout: 1000 });\n\n const removeButton = screen.getByRole(\"button\", { name: /Remove/i });\n await user.click(removeButton);\n\n expect(mockOnClickDelete).toBeCalledTimes(1);\n });\n\n it(\"full extraction status cycle\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n\n mockIModelsClient.setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))\n .returns(async () => mockIModelsResponse[0].iModel);\n\n mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))\n .returns(async () => { return Promise.resolve(); });\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const mockOnClickDelete = jest.fn();\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(<ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={mockOnClickDelete}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />);\n\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Starting);\n\n const startExtractionButton = screen.getByRole(\"button\", { name: /UpdateDataset/i });\n await user.click(startExtractionButton);\n\n mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockMapping.imodelId), moq.Times.once());\n\n expect(screen.getByTitle(/Starting/i)).toBeInTheDocument();\n\n mockBulkExtractor.reset();\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Queued);\n\n await waitFor(() => expect(screen.getByTitle(/Queued/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Running);\n await waitFor(() => expect(screen.getByTitle(/Running/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Succeeded);\n await waitFor(() => expect(screen.getByTitle(/Success/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n fireEvent.animationEnd(screen.getByTestId(\"rcw-success-animation\"));\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).toBeInTheDocument(), { timeout: 1000 });\n });\n\n it(\"second tile should update status\", async () => {\n const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory();\n const firstMockMapping = mockReportMappingsAndMappings[0];\n const secondMockMapping = mockReportMappingsAndMappings[1];\n\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(\n <div>\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={() => { }}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={secondMockMapping}\n onClickDelete={() => { }}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />\n </div>);\n\n const tiles = screen.getAllByTestId(\"horizontal-tile\");\n\n for (const tile of tiles) {\n const preview = within(tile);\n await waitFor(() => expect(preview.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n }\n\n mockBulkExtractor.reset();\n mockBulkExtractor.setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Queued);\n\n mockBulkExtractor.setup(async (x) => x.runIModelExtraction(firstMockMapping.imodelId))\n .returns(async () => { return Promise.resolve(); });\n\n const startExtractionButton = screen.getAllByRole(\"button\", { name: /UpdateDataset/i })[0];\n await user.click(startExtractionButton);\n\n for (const tile of tiles) {\n const preview = within(tile);\n await waitFor(() => expect(preview.getByTitle(/Queued/i)).toBeInTheDocument(), { timeout: 1000 });\n }\n\n expect(screen.getAllByTitle(/Queued/i)).toHaveLength(2);\n });\n});\n"]}
1
+ {"version":3,"file":"ReportMappingHorizontalTile.test.js","sourceRoot":"","sources":["../../../src/test/ReportMappingHorizontalTile.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport faker from \"@faker-js/faker\";\nimport \"@testing-library/jest-dom\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport { fireEvent, mockIModelId1, mockIModelsResponse, mockReportId, render, screen, waitFor, within } from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type { MappingContainer, ReportMappingCollection } from \"@itwin/insights-client\";\nimport type { ReportMappingAndMapping } from \"../widget/components/ReportMappings\";\nimport type { GetSingleIModelParams } from \"@itwin/imodels-client-management\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { ExtractionStates } from \"../widget/components/ExtractionStatus\";\nimport { ReportMappingHorizontalTile } from \"../widget/components/ReportMappingHorizontalTile\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { BulkExtractor } from \"../widget/components/BulkExtractor\";\nimport type { IModelOperations, OperationOptions } from \"@itwin/imodels-client-management/lib/operations\";\n\nconst mockProjectIModels = {\n iModels: mockIModelsResponse.map((iModel) => ({\n id: iModel.iModel.id,\n displayName: iModel.iModel.displayName,\n })),\n _links: {\n self: {\n href: \"\",\n },\n prev: null,\n next: null,\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n {\n reportId: mockReportId,\n mappingId: faker.datatype.uuid(),\n imodelId: mockIModelId1,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (mockReportMappings: ReportMappingCollection): MappingContainer[] => {\n const mockMappings: MappingContainer[] = mockReportMappings.mappings.map((mapping, index) => ({\n mapping: {\n id: mapping.mappingId,\n mappingName: `mOcKMaPpIngNaMe${index}`,\n description: `mOcKmApPInGDeScRiPtIoN${index}`,\n extractionEnabled: false,\n createdOn: \"\",\n createdBy: \"\",\n modifiedOn: \"\",\n modifiedBy: \"\",\n _links: {\n iModel: {\n // Tie the mapping to to the iModel Id\n href: mapping.imodelId,\n },\n },\n },\n }));\n\n return mockMappings;\n};\n\nconst mockReportMappingsAndMappingsFactory = (): ReportMappingAndMapping[] => {\n const reportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(reportMappings);\n const reportMappingsAndMapping = reportMappings.mappings.map((reportMapping) => {\n const mapping = mockMappings.find((x) => x.mapping.id === reportMapping.mappingId)!.mapping;\n const iModelName = mockProjectIModels.iModels.find((x) => x.id === reportMapping.imodelId)!.displayName;\n const reportMappingAndMapping: ReportMappingAndMapping = {\n ...reportMapping,\n iModelName,\n mappingName: mapping.mappingName,\n mappingDescription: mapping.description ?? \"\",\n };\n return reportMappingAndMapping;\n });\n return reportMappingsAndMapping;\n};\n\nconst mockBulkExtractor = moq.Mock.ofType<BulkExtractor>();\nconst mockIModelsClient = moq.Mock.ofType<IModelOperations<OperationOptions>>();\n\njest.mock(\"../widget/components/Constants.ts\", () => ({\n ...jest.requireActual(\"../widget/components/Constants.ts\"),\n STATUS_CHECK_INTERVAL: 10,\n}));\n\nconst mockOdataFeedUrl = \"mockOdataFeedUrl\";\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n});\n\nafterEach(() => {\n mockIModelsClient.reset();\n mockBulkExtractor.reset();\n});\n\ndescribe(\"Report Mapping Horizontal Tile\", () => {\n it(\"tile renders correctly\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n render(\n <ReportMappingHorizontalTile\n jobStartEvent={new BeEvent()}\n mapping={firstMockMapping}\n onClickDelete={() => {}}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />,\n );\n\n mockBulkExtractor.verify(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl), moq.Times.once());\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n expect(screen.getByText(firstMockMapping.mappingName)).toBeInTheDocument();\n expect(screen.getByTitle(firstMockMapping.mappingDescription)).toBeInTheDocument();\n expect(screen.getByText(firstMockMapping.iModelName)).toBeInTheDocument();\n expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).toBeInTheDocument();\n expect(screen.getByRole(\"button\", { name: /Remove/i })).toBeInTheDocument();\n });\n\n it(\"starting extraction sends request\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n const firstMockExtractionRequest = {\n mappings: [{ id: firstMockMapping.mappingId }],\n iModelId: firstMockMapping.imodelId,\n };\n\n mockBulkExtractor\n .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))\n .returns(async () => {\n return Promise.resolve();\n });\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={() => {}}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />,\n );\n\n mockBulkExtractor.verify(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl), moq.Times.once());\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n const startExtractionButton = screen.getByRole(\"button\", { name: /UpdateDataset/i });\n await user.click(startExtractionButton);\n\n mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockExtractionRequest), moq.Times.once());\n });\n\n it(\"on delete is called when remove is pressed\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n const firstMockExtractionRequest = {\n mappings: [{ id: firstMockMapping.mappingId }],\n iModelId: firstMockMapping.imodelId,\n };\n\n mockBulkExtractor\n .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))\n .returns(async () => {\n return Promise.resolve();\n });\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const mockOnClickDelete = jest.fn();\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={mockOnClickDelete}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />,\n );\n\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /Remove/i })).not.toBeDisabled(), { timeout: 1000 });\n\n const removeButton = screen.getByRole(\"button\", { name: /Remove/i });\n await user.click(removeButton);\n\n expect(mockOnClickDelete).toBeCalledTimes(1);\n });\n\n it(\"full extraction status cycle\", async () => {\n const firstMockMapping = mockReportMappingsAndMappingsFactory()[0];\n const firstMockExtractionRequest = {\n mappings: [{ id: firstMockMapping.mappingId }],\n iModelId: firstMockMapping.imodelId,\n };\n\n mockIModelsClient\n .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))\n .returns(async () => mockIModelsResponse[0].iModel);\n\n mockBulkExtractor\n .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))\n .returns(async () => {\n return Promise.resolve();\n });\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const mockOnClickDelete = jest.fn();\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={mockOnClickDelete}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />,\n );\n\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Starting);\n\n const startExtractionButton = screen.getByRole(\"button\", { name: /UpdateDataset/i });\n await user.click(startExtractionButton);\n\n mockBulkExtractor.verify(async (x) => x.runIModelExtraction(firstMockExtractionRequest), moq.Times.once());\n\n expect(screen.getByTitle(/Starting/i)).toBeInTheDocument();\n\n mockBulkExtractor.reset();\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Queued);\n\n await waitFor(() => expect(screen.getByTitle(/Queued/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Running);\n await waitFor(() => expect(screen.getByTitle(/Running/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Succeeded);\n await waitFor(() => expect(screen.getByTitle(/Success/i)).toBeInTheDocument(), { timeout: 1000 });\n\n mockBulkExtractor.reset();\n fireEvent.animationEnd(screen.getByTestId(\"rcw-success-animation\"));\n await waitFor(() => expect(screen.getByRole(\"button\", { name: /UpdateDataset/i })).toBeInTheDocument(), { timeout: 1000 });\n });\n\n it(\"second tile should update status\", async () => {\n const mockReportMappingsAndMappings = mockReportMappingsAndMappingsFactory();\n const firstMockMapping = mockReportMappingsAndMappings[0];\n const secondMockMapping = mockReportMappingsAndMappings[1];\n const firstMockExtractionRequest = {\n mappings: [{ id: firstMockMapping.mappingId }],\n iModelId: firstMockMapping.imodelId,\n };\n\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.None);\n\n const jobStartEvent = new BeEvent<(iModelId: string) => void>();\n\n const { user } = render(\n <div>\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={firstMockMapping}\n onClickDelete={() => {}}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />\n <ReportMappingHorizontalTile\n jobStartEvent={jobStartEvent}\n mapping={secondMockMapping}\n onClickDelete={() => {}}\n bulkExtractor={mockBulkExtractor.object}\n odataFeedUrl={mockOdataFeedUrl}\n />\n </div>,\n );\n\n const tiles = screen.getAllByTestId(\"horizontal-tile\");\n\n for (const tile of tiles) {\n const preview = within(tile);\n await waitFor(() => expect(preview.getByRole(\"button\", { name: /UpdateDataset/i })).not.toBeDisabled(), { timeout: 1000 });\n }\n\n mockBulkExtractor.reset();\n mockBulkExtractor\n .setup(async (x) => x.getIModelState(firstMockMapping.imodelId, firstMockMapping.iModelName, mockOdataFeedUrl))\n .returns(async () => ExtractionStates.Queued);\n\n mockBulkExtractor\n .setup(async (x) => x.runIModelExtraction(firstMockExtractionRequest))\n .returns(async () => {\n return Promise.resolve();\n });\n\n const startExtractionButton = screen.getAllByRole(\"button\", { name: /UpdateDataset/i })[0];\n await user.click(startExtractionButton);\n\n for (const tile of tiles) {\n const preview = within(tile);\n await waitFor(() => expect(preview.getByTitle(/Queued/i)).toBeInTheDocument(), { timeout: 1000 });\n }\n\n expect(screen.getAllByTitle(/Queued/i)).toHaveLength(2);\n });\n});\n"]}
@@ -1,70 +1,17 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import React from "react";
6
6
  import "@testing-library/jest-dom";
7
7
  import { ReportsConfigWidget } from "../ReportsConfigWidget";
8
- import { act, mockITwinId, render, screen, waitFor, waitForElementToBeRemoved, within, } from "./test-utils";
8
+ import { act, mockExtractionRequestDetails, mockIModelId1, mockIModelId2, mockIModelsResponse, mockReportId, render, screen, waitFor, waitForElementToBeRemoved, within, } from "./test-utils";
9
9
  import * as moq from "typemoq";
10
- import { ExtractionClient, ReportsClient, } from "@itwin/insights-client";
10
+ import { ExtractionClient, ReportsClient } from "@itwin/insights-client";
11
11
  import { ReportMappings } from "../widget/components/ReportMappings";
12
- import { IModelState } from "@itwin/imodels-client-management";
13
12
  import { BulkExtractor } from "../widget/components/BulkExtractor";
14
13
  import { Text } from "@itwin/itwinui-react";
15
14
  import { EmptyLocalization } from "@itwin/core-common";
16
- // Lets work with two iModels for now.
17
- const mockIModelId1 = "mockIModelId1";
18
- const mockIModelId2 = "mockIModelId2";
19
- const mockReportId = "mockReportId";
20
- const mockIModelsResponse = [
21
- {
22
- iModel: {
23
- id: mockIModelId1,
24
- displayName: "rAnDoMdIsPlAynAmE1",
25
- name: "rAnDomName1",
26
- description: "rAnDoMDeScRiPtIoN1",
27
- createdDateTime: "2021-10-04T22:13:50.397Z",
28
- state: IModelState.Initialized,
29
- projectId: mockITwinId,
30
- extent: null,
31
- _links: {
32
- creator: {
33
- href: "",
34
- },
35
- namedVersions: {
36
- href: "",
37
- },
38
- changesets: {
39
- href: "",
40
- },
41
- },
42
- },
43
- },
44
- {
45
- iModel: {
46
- id: mockIModelId2,
47
- displayName: "rAnDoMdIsPlAynAmE2",
48
- name: "rAnDomName2",
49
- description: "rAnDoMDeScRiPtIoN2",
50
- createdDateTime: "2021-10-04T22:13:50.397Z",
51
- state: IModelState.Initialized,
52
- projectId: mockITwinId,
53
- extent: null,
54
- _links: {
55
- creator: {
56
- href: "",
57
- },
58
- namedVersions: {
59
- href: "",
60
- },
61
- changesets: {
62
- href: "",
63
- },
64
- },
65
- },
66
- },
67
- ];
68
15
  const mockProjectIModels = {
69
16
  iModels: mockIModelsResponse.map((iModel) => ({
70
17
  id: iModel.iModel.id,
@@ -145,7 +92,7 @@ const mockMappingsFactory = (mockReportMappings) => {
145
92
  modifiedOn: "",
146
93
  modifiedBy: "",
147
94
  _links: {
148
- imodel: {
95
+ iModel: {
149
96
  // Tie the mapping to to the iModel Id
150
97
  href: mapping.imodelId,
151
98
  },
@@ -155,6 +102,7 @@ const mockMappingsFactory = (mockReportMappings) => {
155
102
  return mockMappings;
156
103
  };
157
104
  jest.mock("../widget/components/Constants.ts", () => ({
105
+ ...jest.requireActual("../widget/components/Constants.ts"),
158
106
  STATUS_CHECK_INTERVAL: 10,
159
107
  }));
160
108
  jest.mock("../widget/components/ReportMappingHorizontalTile", () => ({
@@ -188,15 +136,16 @@ const mockMappingsClient = moq.Mock.ofType();
188
136
  beforeAll(async () => {
189
137
  const localization = new EmptyLocalization();
190
138
  await ReportsConfigWidget.initialize(localization);
191
- mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
139
+ mockIModelsClientOperations
140
+ .setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId1 })))
192
141
  .returns(async () => mockIModelsResponse[0].iModel);
193
- mockIModelsClientOperations.setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
142
+ mockIModelsClientOperations
143
+ .setup(async (x) => x.getSingle(moq.It.isObjectWith({ iModelId: mockIModelId2 })))
194
144
  .returns(async () => mockIModelsResponse[1].iModel);
195
- mockIModelsClient.setup((x) => x.iModels)
196
- .returns(() => mockIModelsClientOperations.object);
145
+ mockIModelsClient.setup((x) => x.iModels).returns(() => mockIModelsClientOperations.object);
197
146
  mockReportsClient.setup(async (x) => x.getReportMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetReportMappings);
198
147
  mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);
199
- mockMappingsClient.setup(async (x) => x.getMapping(moq.It.isAny(), moq.It.isAny(), moq.It.isAny())).returns(mockGetMapping);
148
+ mockMappingsClient.setup(async (x) => x.getMapping(moq.It.isAny(), moq.It.isAny())).returns(mockGetMapping);
200
149
  });
201
150
  afterEach(() => {
202
151
  mockGetMapping.mockReset();
@@ -209,7 +158,11 @@ describe("Report Mappings View", () => {
209
158
  const mockMappings = mockMappingsFactory(mockReportMappings);
210
159
  mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
211
160
  mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
212
- render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), { reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object });
161
+ render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), {
162
+ reportsClient: mockReportsClient.object,
163
+ mappingsClient: mockMappingsClient.object,
164
+ iModelsClient: mockIModelsClient.object,
165
+ });
213
166
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
214
167
  const horizontalTiles = screen.getAllByTestId("horizontal-tile");
215
168
  assertHorizontalTiles(horizontalTiles, mockMappings);
@@ -219,7 +172,11 @@ describe("Report Mappings View", () => {
219
172
  const mockMappings = mockMappingsFactory(mockReportMappings);
220
173
  mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
221
174
  mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
222
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), { reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object });
175
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), {
176
+ reportsClient: mockReportsClient.object,
177
+ mappingsClient: mockMappingsClient.object,
178
+ iModelsClient: mockIModelsClient.object,
179
+ });
223
180
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
224
181
  const searchButton = screen.getByTestId(/rcw-search-button/i);
225
182
  await user.click(searchButton);
@@ -236,7 +193,7 @@ describe("Report Mappings View", () => {
236
193
  expect(screen.getAllByTestId("horizontal-tile")).toHaveLength(1);
237
194
  expect(screen.getByTitle(mockMappings[0].mapping.description ?? "")).toBeInTheDocument();
238
195
  // Be an exact match on iModel Name.
239
- const iModel = mockIModelsResponse.find((mockIModel) => mockIModel.iModel.id === mockMappings[0].mapping._links.imodel.href);
196
+ const iModel = mockIModelsResponse.find((mockIModel) => mockIModel.iModel.id === mockMappings[0].mapping._links.iModel.href);
240
197
  await user.clear(searchInput);
241
198
  await user.type(searchInput, iModel?.iModel.displayName ?? "");
242
199
  expect(screen.getAllByTestId("horizontal-tile")).toHaveLength(1);
@@ -247,7 +204,11 @@ describe("Report Mappings View", () => {
247
204
  const mockMappings = mockMappingsFactory(mockReportMappings);
248
205
  mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
249
206
  mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
250
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), { reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object });
207
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), {
208
+ reportsClient: mockReportsClient.object,
209
+ mappingsClient: mockMappingsClient.object,
210
+ iModelsClient: mockIModelsClient.object,
211
+ });
251
212
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
252
213
  mockGetMappings.mockReturnValueOnce(mockMappings.map((m) => m.mapping));
253
214
  const addMappingButton = screen.getByRole("button", {
@@ -264,7 +225,11 @@ describe("Report Mappings View", () => {
264
225
  expect(mockGetReportMappings).toBeCalledTimes(2);
265
226
  });
266
227
  it("odata feed url", async () => {
267
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), { reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object });
228
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), {
229
+ reportsClient: mockReportsClient.object,
230
+ mappingsClient: mockMappingsClient.object,
231
+ iModelsClient: mockIModelsClient.object,
232
+ });
268
233
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
269
234
  const urlTextbox = screen.getByRole("textbox", {
270
235
  name: /odatafeedurl/i,
@@ -282,23 +247,27 @@ describe("Report Mappings View", () => {
282
247
  const mockMappings = mockMappingsFactory(mockReportMappings);
283
248
  mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);
284
249
  mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);
285
- const iModels = mockIModelsResponse.map((iModel) => iModel.iModel.id);
286
250
  const bulkExtractor = new BulkExtractor(new ReportsClient(), new ExtractionClient(), jest.fn().mockResolvedValue("mockAccessToken"), jest.fn, jest.fn);
287
251
  const runIModelExtractionsMock = jest.spyOn(bulkExtractor, "runIModelExtractions").mockImplementation(async () => Promise.resolve());
288
- const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), { reportsClient: mockReportsClient.object, mappingsClient: mockMappingsClient.object, iModelsClient: mockIModelsClient.object, bulkExtractor });
252
+ const { user } = render(React.createElement(ReportMappings, { report: mockReport, onClickClose: jest.fn() }), {
253
+ reportsClient: mockReportsClient.object,
254
+ mappingsClient: mockMappingsClient.object,
255
+ iModelsClient: mockIModelsClient.object,
256
+ bulkExtractor,
257
+ });
289
258
  await waitForElementToBeRemoved(() => screen.getByText(/loading/i));
290
259
  const extractAllButton = screen.getByText(/UpdateAllDatasets/i);
291
260
  expect(extractAllButton).toBeInTheDocument();
292
261
  await user.click(extractAllButton);
293
262
  await waitFor(() => expect(extractAllButton).toBeEnabled());
294
263
  // Check that the mocked method was called with the expected arguments
295
- expect(runIModelExtractionsMock).toHaveBeenCalledWith(iModels);
264
+ expect(runIModelExtractionsMock).toHaveBeenCalledWith(mockExtractionRequestDetails);
296
265
  });
297
266
  const assertHorizontalTiles = (horizontalTiles, mockMappings) => {
298
267
  expect(horizontalTiles).toHaveLength(mockMappings.length);
299
268
  for (const [index, horizontalTile] of horizontalTiles.entries()) {
300
269
  const reportMappingTile = within(horizontalTile);
301
- const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.imodel.href);
270
+ const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.iModel.href);
302
271
  expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();
303
272
  expect(reportMappingTile.getByTitle(mockMappings[index].mapping.description ?? "")).toBeInTheDocument();
304
273
  expect(reportMappingTile.getByText(mockiModel?.iModel.displayName ?? "")).toBeInTheDocument();