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

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