@itwin/reports-config-widget-react 0.6.0 → 0.7.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 (134) hide show
  1. package/CHANGELOG.json +45 -1
  2. package/CHANGELOG.md +23 -2
  3. package/README.md +1 -5
  4. package/api/reports-config-widget-react.api.md +11 -15
  5. package/api/reports-config-widget-react.exports.csv +1 -1
  6. package/api/temp/reports-config-widget-react.api.md +11 -15
  7. package/coverage/clover.xml +187 -190
  8. package/coverage/coverage-final.json +11 -11
  9. package/coverage/lcov-report/index.html +19 -19
  10. package/coverage/lcov-report/src/ReportsConfigWidget.ts.html +2 -2
  11. package/coverage/lcov-report/src/index.html +1 -1
  12. package/coverage/lcov-report/src/test/index.html +1 -1
  13. package/coverage/lcov-report/src/test/test-utils.tsx.html +1 -1
  14. package/coverage/lcov-report/src/widget/ReportsConfigUiProvider.tsx.html +11 -26
  15. package/coverage/lcov-report/src/widget/components/ActionPanel.tsx.html +1 -1
  16. package/coverage/lcov-report/src/widget/components/AddMappingsModal.tsx.html +3 -3
  17. package/coverage/lcov-report/src/widget/components/BulkExtractor.ts.html +7 -10
  18. package/coverage/lcov-report/src/widget/components/Constants.ts.html +1 -1
  19. package/coverage/lcov-report/src/widget/components/DeleteModal.tsx.html +1 -1
  20. package/coverage/lcov-report/src/widget/components/ExtractionStates/FailedExtractionState.tsx.html +1 -1
  21. package/coverage/lcov-report/src/widget/components/ExtractionStates/QueuedExtractionState.tsx.html +1 -1
  22. package/coverage/lcov-report/src/widget/components/ExtractionStates/RunningExtractionState.tsx.html +1 -1
  23. package/coverage/lcov-report/src/widget/components/ExtractionStates/StartingExtractionState.tsx.html +1 -1
  24. package/coverage/lcov-report/src/widget/components/ExtractionStates/SucceededExtractionState.tsx.html +1 -1
  25. package/coverage/lcov-report/src/widget/components/ExtractionStates/index.html +1 -1
  26. package/coverage/lcov-report/src/widget/components/ExtractionStatus.tsx.html +1 -1
  27. package/coverage/lcov-report/src/widget/components/ExtractionToast.tsx.html +1 -1
  28. package/coverage/lcov-report/src/widget/components/HorizontalTile.tsx.html +3 -3
  29. package/coverage/lcov-report/src/widget/components/LocalizedTablePaginator.tsx.html +1 -1
  30. package/coverage/lcov-report/src/widget/components/ReportAction.tsx.html +1 -1
  31. package/coverage/lcov-report/src/widget/components/ReportHorizontalTile.tsx.html +15 -15
  32. package/coverage/lcov-report/src/widget/components/ReportMappingHorizontalTile.tsx.html +1 -1
  33. package/coverage/lcov-report/src/widget/components/ReportMappings.tsx.html +14 -23
  34. package/coverage/lcov-report/src/widget/components/Reports.tsx.html +6 -6
  35. package/coverage/lcov-report/src/widget/components/ReportsConfigContext.tsx.html +111 -12
  36. package/coverage/lcov-report/src/widget/components/ReportsContainer.tsx.html +8 -17
  37. package/coverage/lcov-report/src/widget/components/ReportsHeader.tsx.html +1 -1
  38. package/coverage/lcov-report/src/widget/components/ReportsRouter.tsx.html +1 -1
  39. package/coverage/lcov-report/src/widget/components/SearchBar.tsx.html +1 -1
  40. package/coverage/lcov-report/src/widget/components/SelectIModel.tsx.html +1 -1
  41. package/coverage/lcov-report/src/widget/components/index.html +11 -11
  42. package/coverage/lcov-report/src/widget/components/utils.tsx.html +2 -2
  43. package/coverage/lcov-report/src/widget/context/BulkExtractorContext.tsx.html +1 -1
  44. package/coverage/lcov-report/src/widget/context/ReportsConfigApiContext.tsx.html +7 -4
  45. package/coverage/lcov-report/src/widget/context/index.html +1 -1
  46. package/coverage/lcov-report/src/widget/hooks/index.html +1 -1
  47. package/coverage/lcov-report/src/widget/hooks/useValidator.ts.html +1 -1
  48. package/coverage/lcov-report/src/widget/index.html +13 -13
  49. package/coverage/lcov.info +336 -340
  50. package/lib/cjs/reports-config-widget-react.d.ts +1 -0
  51. package/lib/cjs/reports-config-widget-react.d.ts.map +1 -1
  52. package/lib/cjs/reports-config-widget-react.js +1 -0
  53. package/lib/cjs/reports-config-widget-react.js.map +1 -1
  54. package/lib/cjs/test/ReportAction.test.js +3 -0
  55. package/lib/cjs/test/ReportAction.test.js.map +1 -1
  56. package/lib/cjs/test/ReportMappings.test.js +4 -1
  57. package/lib/cjs/test/ReportMappings.test.js.map +1 -1
  58. package/lib/cjs/test/Reports.test.js +3 -0
  59. package/lib/cjs/test/Reports.test.js.map +1 -1
  60. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  61. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts +3 -4
  62. package/lib/cjs/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  63. package/lib/cjs/widget/ReportsConfigUiProvider.js +3 -4
  64. package/lib/cjs/widget/ReportsConfigUiProvider.js.map +1 -1
  65. package/lib/cjs/widget/components/AddMappingsModal.d.ts.map +1 -1
  66. package/lib/cjs/widget/components/AddMappingsModal.js.map +1 -1
  67. package/lib/cjs/widget/components/BulkExtractor.d.ts +2 -2
  68. package/lib/cjs/widget/components/BulkExtractor.d.ts.map +1 -1
  69. package/lib/cjs/widget/components/BulkExtractor.js.map +1 -1
  70. package/lib/cjs/widget/components/ReportMappings.d.ts.map +1 -1
  71. package/lib/cjs/widget/components/ReportMappings.js +4 -6
  72. package/lib/cjs/widget/components/ReportMappings.js.map +1 -1
  73. package/lib/cjs/widget/components/Reports.d.ts.map +1 -1
  74. package/lib/cjs/widget/components/Reports.js.map +1 -1
  75. package/lib/cjs/widget/components/ReportsConfigContext.d.ts +26 -4
  76. package/lib/cjs/widget/components/ReportsConfigContext.d.ts.map +1 -1
  77. package/lib/cjs/widget/components/ReportsConfigContext.js +14 -4
  78. package/lib/cjs/widget/components/ReportsConfigContext.js.map +1 -1
  79. package/lib/cjs/widget/components/ReportsContainer.d.ts +3 -6
  80. package/lib/cjs/widget/components/ReportsContainer.d.ts.map +1 -1
  81. package/lib/cjs/widget/components/ReportsContainer.js +6 -2
  82. package/lib/cjs/widget/components/ReportsContainer.js.map +1 -1
  83. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts +3 -3
  84. package/lib/cjs/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  85. package/lib/cjs/widget/context/ReportsConfigApiContext.js.map +1 -1
  86. package/lib/esm/reports-config-widget-react.d.ts +1 -0
  87. package/lib/esm/reports-config-widget-react.d.ts.map +1 -1
  88. package/lib/esm/reports-config-widget-react.js +1 -0
  89. package/lib/esm/reports-config-widget-react.js.map +1 -1
  90. package/lib/esm/test/ReportAction.test.js +3 -0
  91. package/lib/esm/test/ReportAction.test.js.map +1 -1
  92. package/lib/esm/test/ReportMappings.test.js +4 -1
  93. package/lib/esm/test/ReportMappings.test.js.map +1 -1
  94. package/lib/esm/test/Reports.test.js +3 -0
  95. package/lib/esm/test/Reports.test.js.map +1 -1
  96. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  97. package/lib/esm/widget/ReportsConfigUiProvider.d.ts +3 -4
  98. package/lib/esm/widget/ReportsConfigUiProvider.d.ts.map +1 -1
  99. package/lib/esm/widget/ReportsConfigUiProvider.js +3 -4
  100. package/lib/esm/widget/ReportsConfigUiProvider.js.map +1 -1
  101. package/lib/esm/widget/components/AddMappingsModal.d.ts.map +1 -1
  102. package/lib/esm/widget/components/AddMappingsModal.js.map +1 -1
  103. package/lib/esm/widget/components/BulkExtractor.d.ts +2 -2
  104. package/lib/esm/widget/components/BulkExtractor.d.ts.map +1 -1
  105. package/lib/esm/widget/components/BulkExtractor.js.map +1 -1
  106. package/lib/esm/widget/components/ReportMappings.d.ts.map +1 -1
  107. package/lib/esm/widget/components/ReportMappings.js +5 -7
  108. package/lib/esm/widget/components/ReportMappings.js.map +1 -1
  109. package/lib/esm/widget/components/Reports.d.ts.map +1 -1
  110. package/lib/esm/widget/components/Reports.js.map +1 -1
  111. package/lib/esm/widget/components/ReportsConfigContext.d.ts +26 -4
  112. package/lib/esm/widget/components/ReportsConfigContext.d.ts.map +1 -1
  113. package/lib/esm/widget/components/ReportsConfigContext.js +14 -4
  114. package/lib/esm/widget/components/ReportsConfigContext.js.map +1 -1
  115. package/lib/esm/widget/components/ReportsContainer.d.ts +3 -6
  116. package/lib/esm/widget/components/ReportsContainer.d.ts.map +1 -1
  117. package/lib/esm/widget/components/ReportsContainer.js +6 -2
  118. package/lib/esm/widget/components/ReportsContainer.js.map +1 -1
  119. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts +3 -3
  120. package/lib/esm/widget/context/ReportsConfigApiContext.d.ts.map +1 -1
  121. package/lib/esm/widget/context/ReportsConfigApiContext.js.map +1 -1
  122. package/package.json +2 -2
  123. package/src/reports-config-widget-react.ts +1 -0
  124. package/src/test/ReportAction.test.tsx +3 -0
  125. package/src/test/ReportMappings.test.tsx +4 -1
  126. package/src/test/Reports.test.tsx +3 -0
  127. package/src/widget/ReportsConfigUiProvider.tsx +3 -8
  128. package/src/widget/components/AddMappingsModal.tsx +2 -2
  129. package/src/widget/components/BulkExtractor.ts +5 -6
  130. package/src/widget/components/ReportMappings.tsx +8 -11
  131. package/src/widget/components/Reports.tsx +2 -2
  132. package/src/widget/components/ReportsConfigContext.tsx +41 -8
  133. package/src/widget/components/ReportsContainer.tsx +5 -8
  134. package/src/widget/context/ReportsConfigApiContext.tsx +3 -2
@@ -1,11 +1,8 @@
1
1
  /// <reference types="react" />
2
- import type { AccessToken } from "@itwin/core-bentley";
3
2
  import "./ReportsContainer.scss";
4
3
  import type { Report } from "@itwin/insights-client";
5
- interface ReportsContainerProps {
6
- getAccessToken?: () => Promise<AccessToken>;
7
- baseUrl: string;
8
- }
4
+ import type { ReportsConfigContextProps } from "./ReportsConfigContext";
5
+ export declare type ReportsContainerProps = Omit<ReportsConfigContextProps, "iTwinId" | "children">;
9
6
  export declare enum RouteStep {
10
7
  ReportsList = 0,
11
8
  ReportAction = 1,
@@ -19,6 +16,6 @@ export interface Route {
19
16
  title: string;
20
17
  reportsRoutingFields: ReportsRouteFields;
21
18
  }
22
- declare const ReportsContainer: ({ getAccessToken, baseUrl }: ReportsContainerProps) => JSX.Element;
19
+ declare const ReportsContainer: (props: ReportsContainerProps) => JSX.Element;
23
20
  export default ReportsContainer;
24
21
  //# sourceMappingURL=ReportsContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD,UAAU,qBAAqB;IAC7B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,SAAS;IACnB,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,kBAAkB,CAAC;CAC1C;AAED,QAAA,MAAM,gBAAgB,gCAAiC,qBAAqB,gBAsB3E,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ReportsContainer.d.ts","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";AAKA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGxE,oBAAY,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;AAE5F,oBAAY,SAAS;IACnB,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,kBAAkB,CAAC;CAC1C;AAED,QAAA,MAAM,gBAAgB,UAAW,qBAAqB,gBAsBrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -24,6 +24,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.RouteStep = void 0;
27
+ /*---------------------------------------------------------------------------------------------
28
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
29
+ * See LICENSE.md in the project root for license terms and full copyright notice.
30
+ *--------------------------------------------------------------------------------------------*/
27
31
  const react_1 = __importStar(require("react"));
28
32
  require("./ReportsContainer.scss");
29
33
  const appui_react_1 = require("@itwin/appui-react");
@@ -36,7 +40,7 @@ var RouteStep;
36
40
  RouteStep[RouteStep["ReportAction"] = 1] = "ReportAction";
37
41
  RouteStep[RouteStep["ReportMappings"] = 2] = "ReportMappings";
38
42
  })(RouteStep = exports.RouteStep || (exports.RouteStep = {}));
39
- const ReportsContainer = ({ getAccessToken, baseUrl }) => {
43
+ const ReportsContainer = (props) => {
40
44
  const [routingHistory, setRoutingHistory] = (0, react_1.useState)([{ step: RouteStep.ReportsList, title: "iTwin Reports", reportsRoutingFields: {} }]);
41
45
  const currentRoute = routingHistory[routingHistory.length - 1];
42
46
  const iTwinId = (0, appui_react_1.useActiveIModelConnection)()?.iTwinId ?? "";
@@ -48,7 +52,7 @@ const ReportsContainer = ({ getAccessToken, baseUrl }) => {
48
52
  updatedRouting.pop();
49
53
  setRoutingHistory(updatedRouting);
50
54
  }, [routingHistory]);
51
- return (react_1.default.createElement(ReportsConfigContext_1.ReportsConfigContext, { getAccessToken: getAccessToken, baseUrl: baseUrl, iTwinId: iTwinId },
55
+ return (react_1.default.createElement(ReportsConfigContext_1.ReportsConfigContext, { ...props, iTwinId: iTwinId },
52
56
  react_1.default.createElement("div", { className: "rcw-reports-container" },
53
57
  react_1.default.createElement(ReportsHeader_1.ReportsHeader, { goBack: goBack, currentRoute: currentRoute }),
54
58
  react_1.default.createElement(ReportsRouter_1.ReportsRouter, { currentRoute: currentRoute, navigateTo: navigateTo, goBack: goBack }))));
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,+CAAqD;AACrD,mCAAiC;AAEjC,oDAA+D;AAC/D,mDAAgD;AAChD,mDAAgD;AAChD,iEAA8D;AAO9D,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,6DAAc,CAAA;AAChB,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAYD,MAAM,gBAAgB,GAAG,CAAC,EAAE,cAAc,EAAE,OAAO,EAAyB,EAAE,EAAE;IAC9E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAU,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnJ,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAA,uCAAyB,GAAE,EAAE,OAAO,IAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,CAAC,OAA2C,EAAE,EAAE;QAC7E,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9B,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3C,cAAc,CAAC,GAAG,EAAE,CAAC;QACrB,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,8BAAC,2CAAoB,IAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;QACtF,uCAAK,SAAS,EAAC,uBAAuB;YACpC,8BAAC,6BAAa,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAI;YAC7D,8BAAC,6BAAa,IAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAI,CACjF,CACe,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,gBAAgB,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 type { AccessToken } from \"@itwin/core-bentley\";\nimport React, { useCallback, useState } from \"react\";\nimport \"./ReportsContainer.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { ReportsHeader } from \"./ReportsHeader\";\nimport { ReportsRouter } from \"./ReportsRouter\";\nimport { ReportsConfigContext } from \"./ReportsConfigContext\";\n\ninterface ReportsContainerProps {\n getAccessToken?: () => Promise<AccessToken>;\n baseUrl: string;\n}\n\nexport enum RouteStep {\n ReportsList,\n ReportAction,\n ReportMappings,\n}\n\nexport interface ReportsRouteFields {\n report?: Report;\n}\n\nexport interface Route {\n step: RouteStep;\n title: string;\n reportsRoutingFields: ReportsRouteFields;\n}\n\nconst ReportsContainer = ({ getAccessToken, baseUrl }: ReportsContainerProps) => {\n const [routingHistory, setRoutingHistory] = useState<Route[]>([{ step: RouteStep.ReportsList, title: \"iTwin Reports\", reportsRoutingFields: {} }]);\n const currentRoute = routingHistory[routingHistory.length - 1];\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const navigateTo = useCallback((toRoute: (prev: Route | undefined) => Route) => {\n setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);\n }, []);\n\n const goBack = useCallback(() => {\n const updatedRouting = [...routingHistory];\n updatedRouting.pop();\n setRoutingHistory(updatedRouting);\n }, [routingHistory]);\n\n return (\n <ReportsConfigContext getAccessToken={getAccessToken} baseUrl={baseUrl} iTwinId={iTwinId}>\n <div className=\"rcw-reports-container\">\n <ReportsHeader goBack={goBack} currentRoute={currentRoute} />\n <ReportsRouter currentRoute={currentRoute} navigateTo={navigateTo} goBack={goBack} />\n </div>\n </ReportsConfigContext>\n );\n};\n\nexport default ReportsContainer;\n"]}
1
+ {"version":3,"file":"ReportsContainer.js","sourceRoot":"","sources":["../../../../src/widget/components/ReportsContainer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,+CAAqD;AACrD,mCAAiC;AAEjC,oDAA+D;AAC/D,mDAAgD;AAChD,mDAAgD;AAEhD,iEAA6D;AAI7D,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,6DAAc,CAAA;AAChB,CAAC,EAJW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAIpB;AAYD,MAAM,gBAAgB,GAAG,CAAC,KAA4B,EAAE,EAAE;IACxD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAU,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnJ,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAA,uCAAyB,GAAE,EAAE,OAAO,IAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,CAAC,OAA2C,EAAE,EAAE;QAC7E,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9B,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3C,cAAc,CAAC,GAAG,EAAE,CAAC;QACrB,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,8BAAC,2CAAoB,OAAK,KAAK,EAAE,OAAO,EAAE,OAAO;QAC/C,uCAAK,SAAS,EAAC,uBAAuB;YACpC,8BAAC,6BAAa,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAI;YAC7D,8BAAC,6BAAa,IAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAI,CACjF,CACe,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,gBAAgB,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, { useCallback, useState } from \"react\";\nimport \"./ReportsContainer.scss\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { ReportsHeader } from \"./ReportsHeader\";\nimport { ReportsRouter } from \"./ReportsRouter\";\nimport type { ReportsConfigContextProps } from \"./ReportsConfigContext\";\nimport { ReportsConfigContext } from \"./ReportsConfigContext\"\n\nexport type ReportsContainerProps = Omit<ReportsConfigContextProps, \"iTwinId\" | \"children\">;\n\nexport enum RouteStep {\n ReportsList,\n ReportAction,\n ReportMappings,\n}\n\nexport interface ReportsRouteFields {\n report?: Report;\n}\n\nexport interface Route {\n step: RouteStep;\n title: string;\n reportsRoutingFields: ReportsRouteFields;\n}\n\nconst ReportsContainer = (props: ReportsContainerProps) => {\n const [routingHistory, setRoutingHistory] = useState<Route[]>([{ step: RouteStep.ReportsList, title: \"iTwin Reports\", reportsRoutingFields: {} }]);\n const currentRoute = routingHistory[routingHistory.length - 1];\n const iTwinId = useActiveIModelConnection()?.iTwinId ?? \"\";\n const navigateTo = useCallback((toRoute: (prev: Route | undefined) => Route) => {\n setRoutingHistory((r) => [...r, toRoute(r[r.length - 1])]);\n }, []);\n\n const goBack = useCallback(() => {\n const updatedRouting = [...routingHistory];\n updatedRouting.pop();\n setRoutingHistory(updatedRouting);\n }, [routingHistory]);\n\n return (\n <ReportsConfigContext {...props} iTwinId={iTwinId}>\n <div className=\"rcw-reports-container\">\n <ReportsHeader goBack={goBack} currentRoute={currentRoute} />\n <ReportsRouter currentRoute={currentRoute} navigateTo={navigateTo} goBack={goBack} />\n </div>\n </ReportsConfigContext>\n );\n};\n\nexport default ReportsContainer;\n"]}
@@ -1,14 +1,14 @@
1
1
  import type { AccessToken } from "@itwin/core-bentley";
2
2
  import { IModelsClient } from "@itwin/imodels-client-management";
3
- import { MappingsClient, ReportsClient } from "@itwin/insights-client";
3
+ import type { IMappingsClient, IReportsClient } from "@itwin/insights-client";
4
4
  import * as React from "react";
5
5
  export declare type GetAccessTokenFn = () => Promise<AccessToken>;
6
6
  export interface ReportsConfigApiProps {
7
7
  getAccessToken: GetAccessTokenFn;
8
8
  iTwinId: string;
9
9
  baseUrl: string;
10
- reportsClient: ReportsClient;
11
- mappingsClient: MappingsClient;
10
+ reportsClient: IReportsClient;
11
+ mappingsClient: IMappingsClient;
12
12
  iModelsClient: IModelsClient;
13
13
  }
14
14
  export declare const ReportsConfigApiContext: React.Context<ReportsConfigApiProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsConfigApiContext.d.ts","sourceRoot":"","sources":["../../../../src/widget/context/ReportsConfigApiContext.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,oBAAY,gBAAgB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,gBAAgB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,uBAAuB,sCAOlC,CAAC;AAEH,eAAO,MAAM,mBAAmB,6BAM/B,CAAC"}
1
+ {"version":3,"file":"ReportsConfigApiContext.d.ts","sourceRoot":"","sources":["../../../../src/widget/context/ReportsConfigApiContext.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,oBAAY,gBAAgB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,gBAAgB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;IAC9B,cAAc,EAAE,eAAe,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,uBAAuB,sCAOlC,CAAC;AAEH,eAAO,MAAM,mBAAmB,6BAM/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReportsConfigApiContext.js","sourceRoot":"","sources":["../../../../src/widget/context/ReportsConfigApiContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,gFAAiE;AACjE,4DAAuE;AACvE,6CAA+B;AAC/B,iCAAsC;AAazB,QAAA,uBAAuB,GAAG,IAAA,qBAAa,EAAwB;IAC1E,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;IAC9B,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,IAAI,+BAAa,EAAE;IAClC,cAAc,EAAE,IAAI,gCAAc,EAAE;IACpC,aAAa,EAAE,IAAI,yCAAa,EAAE;CACnC,CAAC,CAAC;AAEI,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,+BAAuB,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;KACjG;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { IModelsClient } from \"@itwin/imodels-client-management\";\nimport { MappingsClient, ReportsClient } from \"@itwin/insights-client\";\nimport * as React from \"react\";\nimport { createContext } from \"react\";\n\nexport type GetAccessTokenFn = () => Promise<AccessToken>;\n\nexport interface ReportsConfigApiProps {\n getAccessToken: GetAccessTokenFn;\n iTwinId: string;\n baseUrl: string;\n reportsClient: ReportsClient;\n mappingsClient: MappingsClient;\n iModelsClient: IModelsClient;\n}\n\nexport const ReportsConfigApiContext = createContext<ReportsConfigApiProps>({\n getAccessToken: async () => \"\",\n iTwinId: \"\",\n baseUrl: \"\",\n reportsClient: new ReportsClient(),\n mappingsClient: new MappingsClient(),\n iModelsClient: new IModelsClient(),\n});\n\nexport const useReportsConfigApi = () => {\n const context = React.useContext(ReportsConfigApiContext);\n if (!context) {\n throw new Error(\"useReportsConfigApi should be used within a ReportsConfigApiContext provider\");\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"ReportsConfigApiContext.js","sourceRoot":"","sources":["../../../../src/widget/context/ReportsConfigApiContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,gFAAiE;AAEjE,4DAAuE;AACvE,6CAA+B;AAC/B,iCAAsC;AAazB,QAAA,uBAAuB,GAAG,IAAA,qBAAa,EAAwB;IAC1E,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;IAC9B,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,IAAI,+BAAa,EAAE;IAClC,cAAc,EAAE,IAAI,gCAAc,EAAE;IACpC,aAAa,EAAE,IAAI,yCAAa,EAAE;CACnC,CAAC,CAAC;AAEI,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,+BAAuB,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;KACjG;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport { IModelsClient } from \"@itwin/imodels-client-management\";\nimport type { IMappingsClient, IReportsClient } from \"@itwin/insights-client\";\nimport { MappingsClient, ReportsClient } from \"@itwin/insights-client\";\nimport * as React from \"react\";\nimport { createContext } from \"react\";\n\nexport type GetAccessTokenFn = () => Promise<AccessToken>;\n\nexport interface ReportsConfigApiProps {\n getAccessToken: GetAccessTokenFn;\n iTwinId: string;\n baseUrl: string;\n reportsClient: IReportsClient;\n mappingsClient: IMappingsClient;\n iModelsClient: IModelsClient;\n}\n\nexport const ReportsConfigApiContext = createContext<ReportsConfigApiProps>({\n getAccessToken: async () => \"\",\n iTwinId: \"\",\n baseUrl: \"\",\n reportsClient: new ReportsClient(),\n mappingsClient: new MappingsClient(),\n iModelsClient: new IModelsClient(),\n});\n\nexport const useReportsConfigApi = () => {\n const context = React.useContext(ReportsConfigApiContext);\n if (!context) {\n throw new Error(\"useReportsConfigApi should be used within a ReportsConfigApiContext provider\");\n }\n return context;\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  /** UI Provider for iTwin Viewer Applications */
2
2
  export * from "./widget/ReportsConfigUiProvider";
3
3
  export * from "./ReportsConfigWidget";
4
+ export * from "@itwin/insights-client";
4
5
  export { Reports, ReportsProps } from "./widget/components/Reports";
5
6
  export { ReportMappings, ReportMappingsProps } from "./widget/components/ReportMappings";
6
7
  export { ReportsConfigContext, ReportsConfigContextProps } from "./widget/components/ReportsConfigContext";
@@ -1 +1 @@
1
- {"version":3,"file":"reports-config-widget-react.d.ts","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"reports-config-widget-react.d.ts","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
@@ -5,6 +5,7 @@
5
5
  /** UI Provider for iTwin Viewer Applications */
6
6
  export * from "./widget/ReportsConfigUiProvider";
7
7
  export * from "./ReportsConfigWidget";
8
+ export * from "@itwin/insights-client";
8
9
  export { Reports } from "./widget/components/Reports";
9
10
  export { ReportMappings } from "./widget/components/ReportMappings";
10
11
  export { ReportsConfigContext } from "./widget/components/ReportsConfigContext";
@@ -1 +1 @@
1
- {"version":3,"file":"reports-config-widget-react.js","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAgB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAuB,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/ReportsConfigUiProvider\";\nexport * from \"./ReportsConfigWidget\";\n\nexport { Reports, ReportsProps } from \"./widget/components/Reports\";\nexport { ReportMappings, ReportMappingsProps } from \"./widget/components/ReportMappings\";\nexport { ReportsConfigContext, ReportsConfigContextProps } from \"./widget/components/ReportsConfigContext\";\nexport { ReportAction, ReportActionProps } from \"./widget/components/ReportAction\";\nexport { BulkExtractor } from \"./widget/components/BulkExtractor\";\n"]}
1
+ {"version":3,"file":"reports-config-widget-react.js","sourceRoot":"","sources":["../../src/reports-config-widget-react.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,gDAAgD;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAgB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAuB,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,0CAA0C,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/ReportsConfigUiProvider\";\nexport * from \"./ReportsConfigWidget\";\nexport * from \"@itwin/insights-client\";\n\nexport { Reports, ReportsProps } from \"./widget/components/Reports\";\nexport { ReportMappings, ReportMappingsProps } from \"./widget/components/ReportMappings\";\nexport { ReportsConfigContext, ReportsConfigContextProps } from \"./widget/components/ReportsConfigContext\";\nexport { ReportAction, ReportActionProps } from \"./widget/components/ReportAction\";\nexport { BulkExtractor } from \"./widget/components/BulkExtractor\";\n"]}
@@ -39,6 +39,9 @@ describe("Reports Action", () => {
39
39
  project: {
40
40
  href: "",
41
41
  },
42
+ odata: {
43
+ href: "",
44
+ },
42
45
  },
43
46
  };
44
47
  const reportsClient = new ReportsClient();
@@ -1 +1 @@
1
- {"version":3,"file":"ReportAction.test.js","sourceRoot":"","sources":["../../../src/test/ReportAction.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 { render, screen, waitForElementToBeRemoved } from \"./test-utils\";\nimport { ReportAction } from \"../widget/components/ReportAction\";\nimport userEvent from \"@testing-library/user-event\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { ReportsClient } from \"@itwin/insights-client\";\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n});\n\ndescribe(\"Reports Action\", () => {\n it(\"required fields should be filled out\", async () => {\n const mockReturnFn = jest.fn();\n\n render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n const cancelButton = screen.getByRole(\"button\", {\n name: /cancel/i,\n });\n\n expect(cancelButton).toBeEnabled();\n expect(addButton).toBeDisabled();\n });\n\n it(\"should be able to add report\", async () => {\n const mockReturnFn = jest.fn();\n const mockReport: Report = {\n id: faker.datatype.uuid(),\n displayName: \"mOcKRePoRt1\",\n description: \"\",\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n },\n };\n\n const reportsClient = new ReportsClient();\n\n jest.spyOn(reportsClient, \"createReport\").mockImplementation(\n async () =>\n new Promise((resolve) =>\n setTimeout(() => {\n resolve(mockReport);\n }, 100),\n ),\n );\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />, { reportsClient });\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n const cancelButton = screen.getByRole(\"button\", {\n name: /cancel/i,\n });\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n const descriptionInput = screen.getByRole(\"textbox\", {\n name: /description/i,\n });\n\n await userEvent.type(nameInput, \"mOcKTeXt\");\n await userEvent.type(descriptionInput, \"moCk DeScRiPtIoN\");\n expect(cancelButton).toBeEnabled();\n expect(addButton).toBeEnabled();\n\n await user.click(addButton);\n\n expect(addButton).toBeDisabled();\n expect(cancelButton).toBeDisabled();\n expect(nameInput).toBeDisabled();\n\n await waitForElementToBeRemoved(() => screen.getByTestId(/loading\\-spinner/i));\n\n expect(mockReturnFn).toHaveBeenCalledTimes(1);\n });\n\n it(\"No duplicate underscores in the beginning of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"__testName\");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.noduplicateunderscore/i)).toBeInTheDocument();\n });\n\n it(\"Only begin with letters or underscores of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"$testName\");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.onlybeginswithletterorunderscore/i)).toBeInTheDocument();\n });\n\n it(\"Only letters underscores and digits of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"_# \");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.FollowedByLettersUnderscoresSpacesAndDigits/i)).toBeInTheDocument();\n });\n\n it(\"check for character limits of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, faker.random.alpha(200));\n await user.click(addButton);\n expect(screen.getByText(/validators\\.charlimit/i)).toBeInTheDocument();\n });\n});\n"]}
1
+ {"version":3,"file":"ReportAction.test.js","sourceRoot":"","sources":["../../../src/test/ReportAction.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 { render, screen, waitForElementToBeRemoved } from \"./test-utils\";\nimport { ReportAction } from \"../widget/components/ReportAction\";\nimport userEvent from \"@testing-library/user-event\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { Report } from \"@itwin/insights-client\";\nimport { ReportsClient } from \"@itwin/insights-client\";\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n});\n\ndescribe(\"Reports Action\", () => {\n it(\"required fields should be filled out\", async () => {\n const mockReturnFn = jest.fn();\n\n render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n const cancelButton = screen.getByRole(\"button\", {\n name: /cancel/i,\n });\n\n expect(cancelButton).toBeEnabled();\n expect(addButton).toBeDisabled();\n });\n\n it(\"should be able to add report\", async () => {\n const mockReturnFn = jest.fn();\n const mockReport: Report = {\n id: faker.datatype.uuid(),\n displayName: \"mOcKRePoRt1\",\n description: \"\",\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n odata: {\n href: \"\",\n },\n },\n };\n\n const reportsClient = new ReportsClient();\n\n jest.spyOn(reportsClient, \"createReport\").mockImplementation(\n async () =>\n new Promise((resolve) =>\n setTimeout(() => {\n resolve(mockReport);\n }, 100),\n ),\n );\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />, { reportsClient });\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n const cancelButton = screen.getByRole(\"button\", {\n name: /cancel/i,\n });\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n const descriptionInput = screen.getByRole(\"textbox\", {\n name: /description/i,\n });\n\n await userEvent.type(nameInput, \"mOcKTeXt\");\n await userEvent.type(descriptionInput, \"moCk DeScRiPtIoN\");\n expect(cancelButton).toBeEnabled();\n expect(addButton).toBeEnabled();\n\n await user.click(addButton);\n\n expect(addButton).toBeDisabled();\n expect(cancelButton).toBeDisabled();\n expect(nameInput).toBeDisabled();\n\n await waitForElementToBeRemoved(() => screen.getByTestId(/loading\\-spinner/i));\n\n expect(mockReturnFn).toHaveBeenCalledTimes(1);\n });\n\n it(\"No duplicate underscores in the beginning of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"__testName\");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.noduplicateunderscore/i)).toBeInTheDocument();\n });\n\n it(\"Only begin with letters or underscores of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"$testName\");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.onlybeginswithletterorunderscore/i)).toBeInTheDocument();\n });\n\n it(\"Only letters underscores and digits of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, \"_# \");\n await user.click(addButton);\n expect(screen.getByText(/validators\\.FollowedByLettersUnderscoresSpacesAndDigits/i)).toBeInTheDocument();\n });\n\n it(\"check for character limits of name\", async () => {\n const mockReturnFn = jest.fn();\n\n const { user } = render(<ReportAction onClickCancel={jest.fn()} onSaveSuccess={mockReturnFn} />);\n\n const addButton = screen.getByRole(\"button\", {\n name: /add/i,\n });\n\n const nameInput = screen.getByRole(\"textbox\", {\n name: /name/i,\n });\n\n await userEvent.type(nameInput, faker.random.alpha(200));\n await user.click(addButton);\n expect(screen.getByText(/validators\\.charlimit/i)).toBeInTheDocument();\n });\n});\n"]}
@@ -34,6 +34,9 @@ const mockReport = {
34
34
  project: {
35
35
  href: "",
36
36
  },
37
+ odata: {
38
+ href: "mock-odata-feed-url",
39
+ },
37
40
  },
38
41
  };
39
42
  const mockReportMappingsFactory = () => {
@@ -235,7 +238,7 @@ describe("Report Mappings View", () => {
235
238
  name: /odatafeedurl/i,
236
239
  });
237
240
  expect(urlTextbox).toBeInTheDocument();
238
- expect(screen.getByDisplayValue(`https://api.bentley.com/insights/reporting/odata/${mockReport.id}`)).toBeInTheDocument();
241
+ expect(screen.getByDisplayValue(`mock-odata-feed-url`)).toBeInTheDocument();
239
242
  const copyButton = screen.getByRole("button", {
240
243
  name: /copy/i,
241
244
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ReportMappings.test.js","sourceRoot":"","sources":["../../../src/test/ReportMappings.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 \"@testing-library/jest-dom\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport {\n act,\n mockExtractionRequestDetails,\n mockIModelId1,\n mockIModelId2,\n mockIModelsResponse,\n mockReportId,\n render,\n screen,\n waitFor,\n waitForElementToBeRemoved,\n within,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type { MappingContainer, MappingsClient, Report, ReportMappingCollection } from \"@itwin/insights-client\";\nimport { ExtractionClient, ReportsClient } from \"@itwin/insights-client\";\nimport { ReportMappings } from \"../widget/components/ReportMappings\";\nimport type { GetSingleIModelParams, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { BulkExtractor } from \"../widget/components/BulkExtractor\";\nimport type { ReportMappingHorizontalTileProps } from \"../widget/components/ReportMappingHorizontalTile\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { AddMappingsModalProps } from \"../widget/components/AddMappingsModal\";\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 mockReport: Report = {\n id: mockReportId,\n displayName: \"mOcKRePoRt1\",\n description: \"mOcKRePoRtDeScRiPtIoN1\",\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: \"mockMappingId1\",\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: \"mockMappingId2\",\n imodelId: mockIModelId2,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (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\njest.mock(\"../widget/components/Constants.ts\", () => ({\n ...jest.requireActual(\"../widget/components/Constants.ts\"),\n STATUS_CHECK_INTERVAL: 10,\n}));\n\njest.mock(\"../widget/components/ReportMappingHorizontalTile\", () => ({\n ReportMappingHorizontalTile: (props: ReportMappingHorizontalTileProps) => {\n return (\n <div data-testid=\"horizontal-tile\">\n <Text>{props.mapping.mappingName}</Text>\n <Text title={props.mapping.mappingDescription}>{props.mapping.iModelName}</Text>\n </div>\n );\n },\n}));\n\nlet onClose: () => Promise<void>;\njest.mock(\"../widget/components/AddMappingsModal\", () => ({\n ...jest.requireActual(\"../widget/components/AddMappingsModal\"),\n AddMappingsModal: (props: AddMappingsModalProps) => {\n onClose = props.onClose;\n return <div data-testid=\"add-mappings-modal\" />;\n },\n}));\n\njest.mock(\"@itwin/imodels-client-management\", () => ({\n ...jest.requireActual(\"@itwin/imodels-client-management\"),\n\n toArray: jest.fn().mockImplementation(async () => {\n return mockProjectIModels.iModels;\n }),\n}));\n\nconst mockGetMapping = jest.fn();\nconst mockGetMappings = jest.fn();\nconst mockGetReportMappings = jest.fn();\n\nconst mockIModelsClient = moq.Mock.ofType<IModelsClient>();\nconst mockIModelsClientOperations = moq.Mock.ofType<IModelOperations<OperationOptions>>();\nconst mockReportsClient = moq.Mock.ofType<ReportsClient>();\nconst mockMappingsClient = moq.Mock.ofType<MappingsClient>();\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n mockIModelsClientOperations\n .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))\n .returns(async () => mockIModelsResponse[0].iModel);\n mockIModelsClientOperations\n .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId2 })))\n .returns(async () => mockIModelsResponse[1].iModel);\n mockIModelsClient.setup((x) => x.iModels).returns(() => mockIModelsClientOperations.object);\n mockReportsClient.setup(async (x) => x.getReportMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetReportMappings);\n mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);\n mockMappingsClient.setup(async (x) => x.getMapping(moq.It.isAny(), moq.It.isAny())).returns(mockGetMapping);\n});\n\nafterEach(() => {\n mockGetMapping.mockReset();\n mockGetMappings.mockReset();\n mockGetReportMappings.mockReset();\n});\n\ndescribe(\"Report Mappings View\", () => {\n it(\"shows all report mappings\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n assertHorizontalTiles(horizontalTiles, mockMappings);\n });\n\n it(\"search for a report mapping\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const searchButton = screen.getByTestId(/rcw-search-button/i);\n\n await user.click(searchButton);\n const searchInput = screen.getByRole(\"textbox\", {\n name: /search\\-textbox/i,\n });\n\n // Be an exact match on display name.\n await user.type(searchInput, mockMappings[0].mapping.mappingName);\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockMappings[0].mapping.mappingName)).toBeInTheDocument();\n\n // Be an exact match on description.\n await user.clear(searchInput);\n await user.type(searchInput, mockMappings[0].mapping.description ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByTitle(mockMappings[0].mapping.description ?? \"\")).toBeInTheDocument();\n\n // Be an exact match on iModel Name.\n const iModel = mockIModelsResponse.find((mockIModel) => mockIModel.iModel.id === mockMappings[0].mapping._links.iModel.href);\n await user.clear(searchInput);\n await user.type(searchInput, iModel?.iModel.displayName ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(iModel?.iModel.displayName ?? \"\")).toBeInTheDocument();\n });\n\n it(\"add mapping\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n mockGetMappings.mockReturnValueOnce(mockMappings.map((m: MappingContainer) => m.mapping));\n\n const addMappingButton = screen.getByRole(\"button\", {\n name: /addmapping/i,\n });\n\n await user.click(addMappingButton);\n\n const addMappingsModal = await screen.findByTestId(\"add-mappings-modal\");\n expect(addMappingsModal).toBeInTheDocument();\n\n await act(async () => {\n await onClose();\n });\n\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n assertHorizontalTiles(horizontalTiles, mockMappings);\n\n expect(mockGetReportMappings).toBeCalledTimes(2);\n });\n\n it(\"odata feed url\", async () => {\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const urlTextbox = screen.getByRole(\"textbox\", {\n name: /odatafeedurl/i,\n });\n expect(urlTextbox).toBeInTheDocument();\n expect(screen.getByDisplayValue(`https://api.bentley.com/insights/reporting/odata/${mockReport.id}`)).toBeInTheDocument();\n\n const copyButton = screen.getByRole(\"button\", {\n name: /copy/i,\n });\n\n await user.click(copyButton);\n expect(screen.getByText(/copiedtoclipboard/i)).toBeInTheDocument();\n });\n\n it(\"update all datasets\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const bulkExtractor = new BulkExtractor(new ReportsClient(), new ExtractionClient(), jest.fn().mockResolvedValue(\"mockAccessToken\"), jest.fn, jest.fn);\n\n const runIModelExtractionsMock = jest.spyOn(bulkExtractor, \"runIModelExtractions\").mockImplementation(async () => Promise.resolve());\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n bulkExtractor,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const extractAllButton = screen.getByText(/UpdateAllDatasets/i);\n expect(extractAllButton).toBeInTheDocument();\n\n await user.click(extractAllButton);\n await waitFor(() => expect(extractAllButton).toBeEnabled());\n\n // Check that the mocked method was called with the expected arguments\n expect(runIModelExtractionsMock).toHaveBeenCalledWith(mockExtractionRequestDetails);\n });\n\n const assertHorizontalTiles = (horizontalTiles: HTMLElement[], mockMappings: MappingContainer[]) => {\n expect(horizontalTiles).toHaveLength(mockMappings.length);\n\n for (const [index, horizontalTile] of horizontalTiles.entries()) {\n const reportMappingTile = within(horizontalTile);\n const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.iModel.href);\n expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();\n expect(reportMappingTile.getByTitle(mockMappings[index].mapping.description ?? \"\")).toBeInTheDocument();\n expect(reportMappingTile.getByText(mockiModel?.iModel.displayName ?? \"\")).toBeInTheDocument();\n }\n };\n});\n"]}
1
+ {"version":3,"file":"ReportMappings.test.js","sourceRoot":"","sources":["../../../src/test/ReportMappings.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 \"@testing-library/jest-dom\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport {\n act,\n mockExtractionRequestDetails,\n mockIModelId1,\n mockIModelId2,\n mockIModelsResponse,\n mockReportId,\n render,\n screen,\n waitFor,\n waitForElementToBeRemoved,\n within,\n} from \"./test-utils\";\nimport * as moq from \"typemoq\";\nimport type { MappingContainer, MappingsClient, Report, ReportMappingCollection } from \"@itwin/insights-client\";\nimport { ExtractionClient, ReportsClient } from \"@itwin/insights-client\";\nimport { ReportMappings } from \"../widget/components/ReportMappings\";\nimport type { GetSingleIModelParams, IModelsClient } from \"@itwin/imodels-client-management\";\nimport { BulkExtractor } from \"../widget/components/BulkExtractor\";\nimport type { ReportMappingHorizontalTileProps } from \"../widget/components/ReportMappingHorizontalTile\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport type { AddMappingsModalProps } from \"../widget/components/AddMappingsModal\";\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 mockReport: Report = {\n id: mockReportId,\n displayName: \"mOcKRePoRt1\",\n description: \"mOcKRePoRtDeScRiPtIoN1\",\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n odata: {\n href: \"mock-odata-feed-url\",\n },\n },\n};\n\nconst mockReportMappingsFactory = (): ReportMappingCollection => {\n return {\n mappings: [\n {\n reportId: mockReportId,\n mappingId: \"mockMappingId1\",\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: \"mockMappingId2\",\n imodelId: mockIModelId2,\n _links: {\n report: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n imodel: {\n href: \"\",\n },\n },\n },\n ],\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n };\n};\n\nconst mockMappingsFactory = (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\njest.mock(\"../widget/components/Constants.ts\", () => ({\n ...jest.requireActual(\"../widget/components/Constants.ts\"),\n STATUS_CHECK_INTERVAL: 10,\n}));\n\njest.mock(\"../widget/components/ReportMappingHorizontalTile\", () => ({\n ReportMappingHorizontalTile: (props: ReportMappingHorizontalTileProps) => {\n return (\n <div data-testid=\"horizontal-tile\">\n <Text>{props.mapping.mappingName}</Text>\n <Text title={props.mapping.mappingDescription}>{props.mapping.iModelName}</Text>\n </div>\n );\n },\n}));\n\nlet onClose: () => Promise<void>;\njest.mock(\"../widget/components/AddMappingsModal\", () => ({\n ...jest.requireActual(\"../widget/components/AddMappingsModal\"),\n AddMappingsModal: (props: AddMappingsModalProps) => {\n onClose = props.onClose;\n return <div data-testid=\"add-mappings-modal\" />;\n },\n}));\n\njest.mock(\"@itwin/imodels-client-management\", () => ({\n ...jest.requireActual(\"@itwin/imodels-client-management\"),\n\n toArray: jest.fn().mockImplementation(async () => {\n return mockProjectIModels.iModels;\n }),\n}));\n\nconst mockGetMapping = jest.fn();\nconst mockGetMappings = jest.fn();\nconst mockGetReportMappings = jest.fn();\n\nconst mockIModelsClient = moq.Mock.ofType<IModelsClient>();\nconst mockIModelsClientOperations = moq.Mock.ofType<IModelOperations<OperationOptions>>();\nconst mockReportsClient = moq.Mock.ofType<ReportsClient>();\nconst mockMappingsClient = moq.Mock.ofType<MappingsClient>();\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n mockIModelsClientOperations\n .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId1 })))\n .returns(async () => mockIModelsResponse[0].iModel);\n mockIModelsClientOperations\n .setup(async (x) => x.getSingle(moq.It.isObjectWith<GetSingleIModelParams>({ iModelId: mockIModelId2 })))\n .returns(async () => mockIModelsResponse[1].iModel);\n mockIModelsClient.setup((x) => x.iModels).returns(() => mockIModelsClientOperations.object);\n mockReportsClient.setup(async (x) => x.getReportMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetReportMappings);\n mockMappingsClient.setup(async (x) => x.getMappings(moq.It.isAny(), moq.It.isAny())).returns(mockGetMappings);\n mockMappingsClient.setup(async (x) => x.getMapping(moq.It.isAny(), moq.It.isAny())).returns(mockGetMapping);\n});\n\nafterEach(() => {\n mockGetMapping.mockReset();\n mockGetMappings.mockReset();\n mockGetReportMappings.mockReset();\n});\n\ndescribe(\"Report Mappings View\", () => {\n it(\"shows all report mappings\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n assertHorizontalTiles(horizontalTiles, mockMappings);\n });\n\n it(\"search for a report mapping\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const searchButton = screen.getByTestId(/rcw-search-button/i);\n\n await user.click(searchButton);\n const searchInput = screen.getByRole(\"textbox\", {\n name: /search\\-textbox/i,\n });\n\n // Be an exact match on display name.\n await user.type(searchInput, mockMappings[0].mapping.mappingName);\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockMappings[0].mapping.mappingName)).toBeInTheDocument();\n\n // Be an exact match on description.\n await user.clear(searchInput);\n await user.type(searchInput, mockMappings[0].mapping.description ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByTitle(mockMappings[0].mapping.description ?? \"\")).toBeInTheDocument();\n\n // Be an exact match on iModel Name.\n const iModel = mockIModelsResponse.find((mockIModel) => mockIModel.iModel.id === mockMappings[0].mapping._links.iModel.href);\n await user.clear(searchInput);\n await user.type(searchInput, iModel?.iModel.displayName ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(iModel?.iModel.displayName ?? \"\")).toBeInTheDocument();\n });\n\n it(\"add mapping\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n mockGetMappings.mockReturnValueOnce(mockMappings.map((m: MappingContainer) => m.mapping));\n\n const addMappingButton = screen.getByRole(\"button\", {\n name: /addmapping/i,\n });\n\n await user.click(addMappingButton);\n\n const addMappingsModal = await screen.findByTestId(\"add-mappings-modal\");\n expect(addMappingsModal).toBeInTheDocument();\n\n await act(async () => {\n await onClose();\n });\n\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n assertHorizontalTiles(horizontalTiles, mockMappings);\n\n expect(mockGetReportMappings).toBeCalledTimes(2);\n });\n\n it(\"odata feed url\", async () => {\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const urlTextbox = screen.getByRole(\"textbox\", {\n name: /odatafeedurl/i,\n });\n expect(urlTextbox).toBeInTheDocument();\n expect(screen.getByDisplayValue(`mock-odata-feed-url`)).toBeInTheDocument();\n\n const copyButton = screen.getByRole(\"button\", {\n name: /copy/i,\n });\n\n await user.click(copyButton);\n expect(screen.getByText(/copiedtoclipboard/i)).toBeInTheDocument();\n });\n\n it(\"update all datasets\", async () => {\n const mockReportMappings = mockReportMappingsFactory();\n const mockMappings = mockMappingsFactory(mockReportMappings);\n\n mockGetMapping.mockReturnValueOnce(mockMappings[0].mapping).mockReturnValueOnce(mockMappings[1].mapping);\n mockGetReportMappings.mockReturnValueOnce(mockReportMappings.mappings);\n\n const bulkExtractor = new BulkExtractor(new ReportsClient(), new ExtractionClient(), jest.fn().mockResolvedValue(\"mockAccessToken\"), jest.fn, jest.fn);\n\n const runIModelExtractionsMock = jest.spyOn(bulkExtractor, \"runIModelExtractions\").mockImplementation(async () => Promise.resolve());\n\n const { user } = render(<ReportMappings report={mockReport} onClickClose={jest.fn()} />, {\n reportsClient: mockReportsClient.object,\n mappingsClient: mockMappingsClient.object,\n iModelsClient: mockIModelsClient.object,\n bulkExtractor,\n });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const extractAllButton = screen.getByText(/UpdateAllDatasets/i);\n expect(extractAllButton).toBeInTheDocument();\n\n await user.click(extractAllButton);\n await waitFor(() => expect(extractAllButton).toBeEnabled());\n\n // Check that the mocked method was called with the expected arguments\n expect(runIModelExtractionsMock).toHaveBeenCalledWith(mockExtractionRequestDetails);\n });\n\n const assertHorizontalTiles = (horizontalTiles: HTMLElement[], mockMappings: MappingContainer[]) => {\n expect(horizontalTiles).toHaveLength(mockMappings.length);\n\n for (const [index, horizontalTile] of horizontalTiles.entries()) {\n const reportMappingTile = within(horizontalTile);\n const mockiModel = mockIModelsResponse.find((iModel) => iModel.iModel.id === mockMappings[index].mapping._links.iModel.href);\n expect(reportMappingTile.getByText(mockMappings[index].mapping.mappingName)).toBeInTheDocument();\n expect(reportMappingTile.getByTitle(mockMappings[index].mapping.description ?? \"\")).toBeInTheDocument();\n expect(reportMappingTile.getByText(mockiModel?.iModel.displayName ?? \"\")).toBeInTheDocument();\n }\n };\n});\n"]}
@@ -21,6 +21,9 @@ const reportsFactory = () => ({
21
21
  project: {
22
22
  href: "",
23
23
  },
24
+ odata: {
25
+ href: "",
26
+ },
24
27
  },
25
28
  })),
26
29
  _links: {
@@ -1 +1 @@
1
- {"version":3,"file":"Reports.test.js","sourceRoot":"","sources":["../../../src/test/Reports.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 \"@testing-library/jest-dom\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\nimport { Reports } from \"../widget/components/Reports\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport faker from \"@faker-js/faker\";\nimport type { ReportCollection, ReportsClient } from \"@itwin/insights-client\";\nimport userEvent from \"@testing-library/user-event\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport * as moq from \"typemoq\";\n\nconst reportsFactory = (): ReportCollection => ({\n reports: Array.from({ length: faker.datatype.number({ min: 3, max: 5 }) }, (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n displayName: `mOcKRePoRT${index}`,\n description: `mOcKRePoRTDeScRiPtIoN${index}`,\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n },\n })),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst mockGetReports = jest.fn();\nconst mockDeleteReport = jest.fn();\n\nconst mockReportsClient = moq.Mock.ofType<ReportsClient>();\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n\n mockReportsClient.setup(async (x) => x.getReports(moq.It.isAny(), moq.It.isAny())).returns(mockGetReports);\n mockReportsClient.setup(async (x) => x.deleteReport(moq.It.isAny(), moq.It.isAny())).returns(mockDeleteReport);\n});\n\nafterEach(() => {\n mockGetReports.mockReset();\n mockDeleteReport.mockReset();\n});\n\ndescribe(\"Reports View\", () => {\n it(\"call to action button should be clickable with no reports\", async () => {\n mockGetReports.mockReturnValueOnce([]);\n const onClickAddMock = jest.fn();\n\n const { user } = render(<Reports onClickAddReport={onClickAddMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const ctaButton = screen.getByRole(\"button\", {\n name: /createonereportcta/i,\n });\n await user.click(ctaButton);\n expect(onClickAddMock).toBeCalled();\n });\n\n it(\"be able to add new report\", async () => {\n mockGetReports.mockReturnValueOnce([]);\n\n const onClickAddMock = jest.fn();\n const { user } = render(<Reports onClickAddReport={onClickAddMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const newButton = screen.getByRole(\"button\", {\n name: /new/i,\n });\n await user.click(newButton);\n expect(onClickAddMock).toBeCalled();\n });\n\n it(\"list all reports\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n\n render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n // TODO check for all descriptions and names and imodels\n expect(horizontalTiles).toHaveLength(mockedReports?.reports.length);\n\n for (const [index, horizontalTile] of horizontalTiles.entries()) {\n const reportMappingTile = within(horizontalTile);\n expect(reportMappingTile.getByText(mockedReports?.reports[index].displayName ?? \"\")).toBeInTheDocument();\n expect(reportMappingTile.getByTitle(mockedReports?.reports[index].description ?? \"\")).toBeInTheDocument();\n }\n });\n\n it(\"able to modify a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickModifyMock = jest.fn();\n const { user } = render(<Reports onClickReportModify={onClickModifyMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const modifyButton = screen.getByRole(\"menuitem\", { name: /modify/i });\n await user.click(modifyButton);\n\n expect(onClickModifyMock).toBeCalled();\n });\n\n it(\"remove a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n\n mockGetReports.mockReturnValue(mockedReports.reports);\n\n const { user } = render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const removeButton = screen.getByRole(\"menuitem\", { name: /remove/i });\n await user.click(removeButton);\n // Delete modal dialog should appear\n expect(screen.getByRole(\"dialog\")).toBeInTheDocument();\n\n const deleteButton = screen.getByRole(\"button\", {\n name: /delete/i,\n });\n\n await user.click(deleteButton);\n\n await waitForElementToBeRemoved(() => screen.getByRole(\"dialog\"));\n\n expect(mockDeleteReport).toBeCalled();\n // Two calls, when it is first rendered and when it is refreshed.\n expect(mockGetReports).toBeCalledTimes(2);\n });\n\n it(\"search for a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const { user } = render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const searchButton = screen.getByTestId(/rcw-search-button/i);\n\n await user.click(searchButton);\n const searchInput = screen.getByRole(\"textbox\", {\n name: /search\\-textbox/i,\n });\n\n // Be an exact match on display name.\n await userEvent.type(searchInput, mockedReports.reports[0].displayName);\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockedReports.reports[0].displayName)).toBeInTheDocument();\n\n // Be an exact match on description.\n await userEvent.clear(searchInput);\n await userEvent.type(searchInput, mockedReports.reports[0].description ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockedReports.reports[0].displayName)).toBeInTheDocument();\n });\n\n it(\"modify a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickModifyMock = jest.fn();\n const { user } = render(<Reports onClickReportModify={onClickModifyMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const modifyButton = screen.getByRole(\"menuitem\", { name: /modify/i });\n await user.click(modifyButton);\n expect(onClickModifyMock).toBeCalled();\n });\n\n it(\"click a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickTitleMock = jest.fn();\n const { user } = render(<Reports onClickReportTitle={onClickTitleMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const reportName = screen.getByText(mockedReports.reports[0].displayName);\n await user.click(reportName);\n expect(onClickTitleMock).toBeCalled();\n });\n});\n"]}
1
+ {"version":3,"file":"Reports.test.js","sourceRoot":"","sources":["../../../src/test/Reports.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 \"@testing-library/jest-dom\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\nimport { Reports } from \"../widget/components/Reports\";\nimport { ReportsConfigWidget } from \"../ReportsConfigWidget\";\nimport faker from \"@faker-js/faker\";\nimport type { ReportCollection, ReportsClient } from \"@itwin/insights-client\";\nimport userEvent from \"@testing-library/user-event\";\nimport { EmptyLocalization } from \"@itwin/core-common\";\nimport * as moq from \"typemoq\";\n\nconst reportsFactory = (): ReportCollection => ({\n reports: Array.from({ length: faker.datatype.number({ min: 3, max: 5 }) }, (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n displayName: `mOcKRePoRT${index}`,\n description: `mOcKRePoRTDeScRiPtIoN${index}`,\n deleted: false,\n _links: {\n project: {\n href: \"\",\n },\n odata: {\n href: \"\",\n },\n },\n })),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst mockGetReports = jest.fn();\nconst mockDeleteReport = jest.fn();\n\nconst mockReportsClient = moq.Mock.ofType<ReportsClient>();\n\nbeforeAll(async () => {\n const localization = new EmptyLocalization();\n await ReportsConfigWidget.initialize(localization);\n\n mockReportsClient.setup(async (x) => x.getReports(moq.It.isAny(), moq.It.isAny())).returns(mockGetReports);\n mockReportsClient.setup(async (x) => x.deleteReport(moq.It.isAny(), moq.It.isAny())).returns(mockDeleteReport);\n});\n\nafterEach(() => {\n mockGetReports.mockReset();\n mockDeleteReport.mockReset();\n});\n\ndescribe(\"Reports View\", () => {\n it(\"call to action button should be clickable with no reports\", async () => {\n mockGetReports.mockReturnValueOnce([]);\n const onClickAddMock = jest.fn();\n\n const { user } = render(<Reports onClickAddReport={onClickAddMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const ctaButton = screen.getByRole(\"button\", {\n name: /createonereportcta/i,\n });\n await user.click(ctaButton);\n expect(onClickAddMock).toBeCalled();\n });\n\n it(\"be able to add new report\", async () => {\n mockGetReports.mockReturnValueOnce([]);\n\n const onClickAddMock = jest.fn();\n const { user } = render(<Reports onClickAddReport={onClickAddMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const newButton = screen.getByRole(\"button\", {\n name: /new/i,\n });\n await user.click(newButton);\n expect(onClickAddMock).toBeCalled();\n });\n\n it(\"list all reports\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n\n render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n const horizontalTiles = screen.getAllByTestId(\"horizontal-tile\");\n // TODO check for all descriptions and names and imodels\n expect(horizontalTiles).toHaveLength(mockedReports?.reports.length);\n\n for (const [index, horizontalTile] of horizontalTiles.entries()) {\n const reportMappingTile = within(horizontalTile);\n expect(reportMappingTile.getByText(mockedReports?.reports[index].displayName ?? \"\")).toBeInTheDocument();\n expect(reportMappingTile.getByTitle(mockedReports?.reports[index].description ?? \"\")).toBeInTheDocument();\n }\n });\n\n it(\"able to modify a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickModifyMock = jest.fn();\n const { user } = render(<Reports onClickReportModify={onClickModifyMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const modifyButton = screen.getByRole(\"menuitem\", { name: /modify/i });\n await user.click(modifyButton);\n\n expect(onClickModifyMock).toBeCalled();\n });\n\n it(\"remove a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n\n mockGetReports.mockReturnValue(mockedReports.reports);\n\n const { user } = render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const removeButton = screen.getByRole(\"menuitem\", { name: /remove/i });\n await user.click(removeButton);\n // Delete modal dialog should appear\n expect(screen.getByRole(\"dialog\")).toBeInTheDocument();\n\n const deleteButton = screen.getByRole(\"button\", {\n name: /delete/i,\n });\n\n await user.click(deleteButton);\n\n await waitForElementToBeRemoved(() => screen.getByRole(\"dialog\"));\n\n expect(mockDeleteReport).toBeCalled();\n // Two calls, when it is first rendered and when it is refreshed.\n expect(mockGetReports).toBeCalledTimes(2);\n });\n\n it(\"search for a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const { user } = render(<Reports />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const searchButton = screen.getByTestId(/rcw-search-button/i);\n\n await user.click(searchButton);\n const searchInput = screen.getByRole(\"textbox\", {\n name: /search\\-textbox/i,\n });\n\n // Be an exact match on display name.\n await userEvent.type(searchInput, mockedReports.reports[0].displayName);\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockedReports.reports[0].displayName)).toBeInTheDocument();\n\n // Be an exact match on description.\n await userEvent.clear(searchInput);\n await userEvent.type(searchInput, mockedReports.reports[0].description ?? \"\");\n expect(screen.getAllByTestId(\"horizontal-tile\")).toHaveLength(1);\n expect(screen.getByText(mockedReports.reports[0].displayName)).toBeInTheDocument();\n });\n\n it(\"modify a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickModifyMock = jest.fn();\n const { user } = render(<Reports onClickReportModify={onClickModifyMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const firstMenuDropdown = within(screen.getAllByTestId(/tile-action-button/i)[0]).getByRole(\"button\");\n await user.click(firstMenuDropdown);\n const modifyButton = screen.getByRole(\"menuitem\", { name: /modify/i });\n await user.click(modifyButton);\n expect(onClickModifyMock).toBeCalled();\n });\n\n it(\"click a report\", async () => {\n const mockedReports: ReportCollection = reportsFactory();\n mockGetReports.mockReturnValueOnce(mockedReports.reports);\n const onClickTitleMock = jest.fn();\n const { user } = render(<Reports onClickReportTitle={onClickTitleMock} />, { reportsClient: mockReportsClient.object });\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n const reportName = screen.getByText(mockedReports.reports[0].displayName);\n await user.click(reportName);\n expect(onClickTitleMock).toBeCalled();\n });\n});\n"]}