@truedat/qx 7.5.7 → 7.5.10

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 (240) hide show
  1. package/package.json +45 -64
  2. package/src/components/QxRoutes.js +38 -19
  3. package/src/components/__tests__/QxRoutes.spec.js +73 -0
  4. package/src/components/__tests__/__fixtures__/helper.js +6 -7
  5. package/src/components/__tests__/__snapshots__/QxRoutes.spec.js.snap +60 -0
  6. package/src/components/common/ClauseViewer.js +6 -6
  7. package/src/components/common/DescriptionInput.js +0 -1
  8. package/src/components/common/ResourceSelector.js +2 -3
  9. package/src/components/common/TestFormWrapper.js +2 -13
  10. package/src/components/common/TypeSelector.js +0 -1
  11. package/src/components/common/__tests__/DescriptionInput.spec.js +12 -21
  12. package/src/components/common/__tests__/ResourceSelector.spec.js +42 -87
  13. package/src/components/common/__tests__/TypeSelector.spec.js +0 -1
  14. package/src/components/common/__tests__/__snapshots__/ResourceSelector.spec.js.snap +32 -22
  15. package/src/components/common/expressions/Clauses.js +5 -6
  16. package/src/components/common/expressions/Condition.js +8 -9
  17. package/src/components/common/expressions/ConstantSelector.js +2 -2
  18. package/src/components/common/expressions/Expression.js +2 -2
  19. package/src/components/common/expressions/FieldSelector.js +2 -2
  20. package/src/components/common/expressions/FunctionArgs.js +5 -6
  21. package/src/components/common/expressions/FunctionSelector.js +2 -2
  22. package/src/components/common/expressions/ParamSelector.js +2 -2
  23. package/src/components/common/expressions/ShapeSelector.js +7 -16
  24. package/src/components/common/expressions/__tests__/Clauses.spec.js +10 -9
  25. package/src/components/common/expressions/__tests__/Condition.spec.js +6 -26
  26. package/src/components/common/expressions/__tests__/ConstantSelector.spec.js +14 -30
  27. package/src/components/common/expressions/__tests__/Expression.spec.js +36 -62
  28. package/src/components/common/expressions/__tests__/FieldSelector.spec.js +2 -7
  29. package/src/components/common/expressions/__tests__/FunctionArgs.spec.js +18 -44
  30. package/src/components/common/expressions/__tests__/FunctionSelector.spec.js +19 -27
  31. package/src/components/common/expressions/__tests__/ParamSelector.spec.js +28 -58
  32. package/src/components/common/expressions/__tests__/ShapeSelector.spec.js +34 -47
  33. package/src/components/common/expressions/__tests__/__snapshots__/Condition.spec.js.snap +6 -6
  34. package/src/components/common/expressions/__tests__/__snapshots__/ConstantSelector.spec.js.snap +6 -7
  35. package/src/components/common/expressions/__tests__/__snapshots__/Expression.spec.js.snap +20 -20
  36. package/src/components/common/expressions/__tests__/__snapshots__/FunctionArgs.spec.js.snap +8 -9
  37. package/src/components/common/expressions/__tests__/__snapshots__/FunctionSelector.spec.js.snap +670 -8
  38. package/src/components/common/expressions/__tests__/__snapshots__/ParamSelector.spec.js.snap +5 -5
  39. package/src/components/common/expressions/__tests__/__snapshots__/ShapeSelector.spec.js.snap +9 -9
  40. package/src/components/common/expressions/__tests__/useWatchParams.spec.js +1 -4
  41. package/src/components/common/expressions/constantInputs/AnySelector.js +5 -6
  42. package/src/components/common/expressions/constantInputs/BooleanSelector.js +2 -2
  43. package/src/components/common/expressions/constantInputs/DefaultSelector.js +2 -2
  44. package/src/components/common/expressions/constantInputs/__tests__/AnySelector.spec.js +16 -37
  45. package/src/components/common/expressions/constantInputs/__tests__/BooleanSelector.spec.js +14 -17
  46. package/src/components/common/expressions/constantInputs/__tests__/DefaultSelector.spec.js +12 -27
  47. package/src/components/common/expressions/constantInputs/__tests__/__snapshots__/AnySelector.spec.js.snap +11 -11
  48. package/src/components/common/expressions/constantInputs/__tests__/__snapshots__/DefaultSelector.spec.js.snap +0 -1
  49. package/src/components/common/resourceSelectors/DataStructureSelector.js +2 -2
  50. package/src/components/common/resourceSelectors/DataViewSelector.js +2 -2
  51. package/src/components/common/resourceSelectors/ReferenceDatasetSelector.js +2 -2
  52. package/src/components/common/resourceSelectors/__tests__/DataStructureSelector.spec.js +5 -29
  53. package/src/components/common/resourceSelectors/__tests__/DataViewSelector.spec.js +23 -25
  54. package/src/components/common/resourceSelectors/__tests__/ReferenceDatasetSelector.spec.js +21 -32
  55. package/src/components/common/resourceSelectors/__tests__/__snapshots__/DataStructureSelector.spec.js.snap +3 -4
  56. package/src/components/common/resourceSelectors/__tests__/__snapshots__/DataViewSelector.spec.js.snap +1 -1
  57. package/src/components/common/resourceSelectors/__tests__/__snapshots__/ReferenceDatasetSelector.spec.js.snap +1 -1
  58. package/src/components/dataViews/DataViewEditor.js +5 -6
  59. package/src/components/dataViews/DataViewSelect.js +4 -5
  60. package/src/components/dataViews/DataViews.js +1 -2
  61. package/src/components/dataViews/Queryable.js +4 -4
  62. package/src/components/dataViews/Queryables.js +0 -1
  63. package/src/components/dataViews/__tests__/DataViewEditor.spec.js +36 -111
  64. package/src/components/dataViews/__tests__/DataViewSelect.spec.js +0 -1
  65. package/src/components/dataViews/__tests__/DataViews.spec.js +15 -16
  66. package/src/components/dataViews/__tests__/Queryable.spec.js +0 -1
  67. package/src/components/dataViews/__tests__/Queryables.spec.js +35 -74
  68. package/src/components/dataViews/__tests__/__snapshots__/DataViewEditor.spec.js.snap +61 -55
  69. package/src/components/dataViews/__tests__/__snapshots__/DataViews.spec.js.snap +5 -5
  70. package/src/components/dataViews/__tests__/__snapshots__/Queryables.spec.js.snap +59 -59
  71. package/src/components/dataViews/queryableProperties/From.js +4 -4
  72. package/src/components/dataViews/queryableProperties/GroupBy.js +6 -6
  73. package/src/components/dataViews/queryableProperties/Join.js +6 -6
  74. package/src/components/dataViews/queryableProperties/JoinTypeIcon.js +8 -9
  75. package/src/components/dataViews/queryableProperties/Select.js +4 -5
  76. package/src/components/dataViews/queryableProperties/SelectField.js +4 -4
  77. package/src/components/dataViews/queryableProperties/Where.js +4 -4
  78. package/src/components/dataViews/queryableProperties/__tests__/From.spec.js +0 -1
  79. package/src/components/dataViews/queryableProperties/__tests__/GroupBy.spec.js +16 -42
  80. package/src/components/dataViews/queryableProperties/__tests__/Join.spec.js +6 -29
  81. package/src/components/dataViews/queryableProperties/__tests__/JoinTypeIcon.spec.js +0 -1
  82. package/src/components/dataViews/queryableProperties/__tests__/Select.spec.js +26 -50
  83. package/src/components/dataViews/queryableProperties/__tests__/SelectField.spec.js +19 -44
  84. package/src/components/dataViews/queryableProperties/__tests__/Where.spec.js +6 -17
  85. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/GroupBy.spec.js.snap +309 -9
  86. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Join.spec.js.snap +12 -12
  87. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Select.spec.js.snap +192 -18
  88. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/SelectField.spec.js.snap +6 -8
  89. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Where.spec.js.snap +2 -2
  90. package/src/components/functions/FunctionEditor.js +3 -5
  91. package/src/components/functions/FunctionParams.js +2 -3
  92. package/src/components/functions/Functions.js +3 -4
  93. package/src/components/functions/__tests__/FunctionEditor.spec.js +61 -57
  94. package/src/components/functions/__tests__/FunctionParams.spec.js +50 -47
  95. package/src/components/functions/__tests__/Functions.spec.js +5 -12
  96. package/src/components/functions/__tests__/__snapshots__/FunctionParams.spec.js.snap +11 -11
  97. package/src/components/functions/__tests__/__snapshots__/Functions.spec.js.snap +4 -5
  98. package/src/components/qualityControls/ControlProperties.js +8 -7
  99. package/src/components/qualityControls/ControlPropertiesView.js +5 -5
  100. package/src/components/qualityControls/EditQualityControl.js +5 -5
  101. package/src/components/qualityControls/IconPopup.js +0 -1
  102. package/src/components/qualityControls/NewDraftQualityControl.js +8 -6
  103. package/src/components/qualityControls/NewQualityControl.js +5 -6
  104. package/src/components/qualityControls/QualityBadge.js +29 -21
  105. package/src/components/qualityControls/QualityControl.js +4 -7
  106. package/src/components/qualityControls/QualityControlActions.js +7 -7
  107. package/src/components/qualityControls/QualityControlCrumbs.js +1 -3
  108. package/src/components/qualityControls/QualityControlEditor.js +6 -12
  109. package/src/components/qualityControls/QualityControlHeader.js +4 -6
  110. package/src/components/qualityControls/QualityControlHistory.js +3 -3
  111. package/src/components/qualityControls/QualityControlManageDomain.js +2 -2
  112. package/src/components/qualityControls/QualityControlQueryModal.js +1 -1
  113. package/src/components/qualityControls/QualityControlRoutes.js +27 -54
  114. package/src/components/qualityControls/QualityControlRow.js +0 -2
  115. package/src/components/qualityControls/QualityControlScores.js +7 -5
  116. package/src/components/qualityControls/QualityControlTabs.js +2 -2
  117. package/src/components/qualityControls/QualityControls.js +10 -8
  118. package/src/components/qualityControls/QualityControlsLabelResults.js +0 -2
  119. package/src/components/qualityControls/QualityControlsPagination.js +0 -1
  120. package/src/components/qualityControls/QualityControlsTable.js +1 -2
  121. package/src/components/qualityControls/ScoreCriteria.js +8 -4
  122. package/src/components/qualityControls/ScoreCriteriaView.js +34 -54
  123. package/src/components/qualityControls/__tests__/ControlProperties.spec.js +16 -21
  124. package/src/components/qualityControls/__tests__/ControlPropertiesView.spec.js +5 -6
  125. package/src/components/qualityControls/__tests__/EditQualityControl.spec.js +28 -70
  126. package/src/components/qualityControls/__tests__/IconPopup.spec.js +10 -11
  127. package/src/components/qualityControls/__tests__/NewDraftQualityControl.spec.js +33 -70
  128. package/src/components/qualityControls/__tests__/NewQualityControl.spec.js +88 -107
  129. package/src/components/qualityControls/__tests__/QualityBadge.spec.js +55 -63
  130. package/src/components/qualityControls/__tests__/QualityControl.spec.js +19 -31
  131. package/src/components/qualityControls/__tests__/QualityControlActions.spec.js +49 -46
  132. package/src/components/qualityControls/__tests__/QualityControlCrumbs.spec.js +0 -1
  133. package/src/components/qualityControls/__tests__/QualityControlEditor.spec.js +68 -107
  134. package/src/components/qualityControls/__tests__/QualityControlHeader.spec.js +22 -25
  135. package/src/components/qualityControls/__tests__/QualityControlHistory.spec.js +6 -6
  136. package/src/components/qualityControls/__tests__/QualityControlManageDomain.spec.js +0 -1
  137. package/src/components/qualityControls/__tests__/QualityControlQueryModal.spec.js +13 -12
  138. package/src/components/qualityControls/__tests__/QualityControlRow.spec.js +4 -8
  139. package/src/components/qualityControls/__tests__/QualityControlScores.spec.js +23 -19
  140. package/src/components/qualityControls/__tests__/QualityControlTabs.spec.js +2 -3
  141. package/src/components/qualityControls/__tests__/QualityControls.spec.js +69 -53
  142. package/src/components/qualityControls/__tests__/QualityControlsLabelResults.spec.js +0 -1
  143. package/src/components/qualityControls/__tests__/QualityControlsPagination.spec.js +0 -1
  144. package/src/components/qualityControls/__tests__/QualityControlsTable.spec.js +2 -3
  145. package/src/components/qualityControls/__tests__/ScoreCriteria.spec.js +3 -4
  146. package/src/components/qualityControls/__tests__/ScoreCriteriaView.spec.js +18 -3
  147. package/src/components/qualityControls/__tests__/__fixtures__/qualityControlHelper.js +2 -2
  148. package/src/components/qualityControls/__tests__/__snapshots__/ControlProperties.spec.js.snap +1 -1
  149. package/src/components/qualityControls/__tests__/__snapshots__/ControlPropertiesView.spec.js.snap +53 -53
  150. package/src/components/qualityControls/__tests__/__snapshots__/EditQualityControl.spec.js.snap +45 -34
  151. package/src/components/qualityControls/__tests__/__snapshots__/NewDraftQualityControl.spec.js.snap +44 -33
  152. package/src/components/qualityControls/__tests__/__snapshots__/NewQualityControl.spec.js.snap +30 -19
  153. package/src/components/qualityControls/__tests__/__snapshots__/QualityBadge.spec.js.snap +1 -1
  154. package/src/components/qualityControls/__tests__/__snapshots__/QualityControl.spec.js.snap +11 -19
  155. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlActions.spec.js.snap +5 -4
  156. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlCrumbs.spec.js.snap +1 -0
  157. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlEditor.spec.js.snap +28 -5
  158. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHeader.spec.js.snap +16 -11
  159. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHistory.spec.js.snap +2 -0
  160. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlRow.spec.js.snap +2 -1
  161. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlScores.spec.js.snap +3 -0
  162. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlTabs.spec.js.snap +3 -0
  163. package/src/components/qualityControls/__tests__/__snapshots__/QualityControls.spec.js.snap +11 -21
  164. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlsTable.spec.js.snap +2 -0
  165. package/src/components/qualityControls/__tests__/__snapshots__/ScoreCriteria.spec.js.snap +1 -1
  166. package/src/components/qualityControls/__tests__/__snapshots__/ScoreCriteriaView.spec.js.snap +2 -4
  167. package/src/components/qualityControls/__tests__/qualityByControlMode.spec.js +16 -16
  168. package/src/components/qualityControls/controlProperties/{ErrorCount.js → Count.js} +7 -7
  169. package/src/components/qualityControls/controlProperties/Ratio.js +6 -8
  170. package/src/components/qualityControls/controlProperties/__tests__/{ErrorCount.spec.js → Count.spec.js} +9 -25
  171. package/src/components/qualityControls/controlProperties/__tests__/Ratio.spec.js +9 -27
  172. package/src/components/qualityControls/controlProperties/__tests__/__snapshots__/{ErrorCount.spec.js.snap → Count.spec.js.snap} +5 -5
  173. package/src/components/qualityControls/controlProperties/__tests__/__snapshots__/Ratio.spec.js.snap +10 -10
  174. package/src/components/qualityControls/qualityByControlMode.js +39 -16
  175. package/src/components/qualityControls/qualityControlScoresColumns.js +1 -2
  176. package/src/components/qualityControls/scoreCriterias/Count.js +88 -0
  177. package/src/components/qualityControls/scoreCriterias/Deviation.js +2 -2
  178. package/src/components/qualityControls/scoreCriterias/ErrorCount.js +4 -4
  179. package/src/components/qualityControls/scoreCriterias/Percentage.js +2 -2
  180. package/src/components/qualityControls/scoreCriterias/__tests__/Count.spec.js +62 -0
  181. package/src/components/qualityControls/scoreCriterias/__tests__/Deviation.spec.js +0 -1
  182. package/src/components/qualityControls/scoreCriterias/__tests__/ErrorCount.spec.js +39 -31
  183. package/src/components/qualityControls/scoreCriterias/__tests__/Percentage.spec.js +23 -19
  184. package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/Count.spec.js.snap +58 -0
  185. package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/ErrorCount.spec.js.snap +4 -7
  186. package/src/components/scores/MyScoreGroups.js +0 -1
  187. package/src/components/scores/QualityBar.js +24 -22
  188. package/src/components/scores/Score.js +4 -5
  189. package/src/components/scores/ScoreCrumbs.js +3 -5
  190. package/src/components/scores/ScoreDetails.js +2 -2
  191. package/src/components/scores/ScoreEvents.js +2 -2
  192. package/src/components/scores/ScoreGroup.js +5 -4
  193. package/src/components/scores/ScoreGroupBreadcrumbs.js +1 -2
  194. package/src/components/scores/ScoreGroupForm.js +2 -4
  195. package/src/components/scores/ScoreGroupLink.js +1 -2
  196. package/src/components/scores/ScoreGroupMessage.js +0 -1
  197. package/src/components/scores/ScoreGroupPopup.js +1 -1
  198. package/src/components/scores/ScoreGroupsRoutes.js +19 -0
  199. package/src/components/scores/ScoreGroupsTable.js +15 -48
  200. package/src/components/scores/ScoreRoutes.js +9 -24
  201. package/src/components/scores/ScoreStatusDecorator.js +1 -2
  202. package/src/components/scores/ScoreTabs.js +2 -2
  203. package/src/components/scores/__tests__/MyScoreGroups.spec.js +2 -3
  204. package/src/components/scores/__tests__/QualityBar.spec.js +19 -26
  205. package/src/components/scores/__tests__/Score.spec.js +2 -3
  206. package/src/components/scores/__tests__/ScoreCrumbs.spec.js +4 -5
  207. package/src/components/scores/__tests__/ScoreDetails.spec.js +4 -5
  208. package/src/components/scores/__tests__/ScoreEvents.spec.js +2 -3
  209. package/src/components/scores/__tests__/ScoreGroup.spec.js +15 -14
  210. package/src/components/scores/__tests__/ScoreGroupBreadcrumbs.spec.js +0 -1
  211. package/src/components/scores/__tests__/ScoreGroupForm.spec.js +18 -34
  212. package/src/components/scores/__tests__/ScoreGroupLink.spec.js +0 -1
  213. package/src/components/scores/__tests__/ScoreGroupMessage.spec.js +0 -1
  214. package/src/components/scores/__tests__/ScoreGroupPopup.spec.js +0 -2
  215. package/src/components/scores/__tests__/ScoreGroupsRoutes.spec.js +32 -0
  216. package/src/components/scores/__tests__/ScoreGroupsTable.spec.js +0 -1
  217. package/src/components/scores/__tests__/ScoreStatusDecorator.spec.js +0 -1
  218. package/src/components/scores/__tests__/ScoreTabs.spec.js +3 -4
  219. package/src/components/scores/__tests__/__snapshots__/MyScoreGroups.spec.js.snap +2 -0
  220. package/src/components/scores/__tests__/__snapshots__/Score.spec.js.snap +4 -0
  221. package/src/components/scores/__tests__/__snapshots__/ScoreCrumbs.spec.js.snap +2 -0
  222. package/src/components/scores/__tests__/__snapshots__/ScoreDetails.spec.js.snap +1 -0
  223. package/src/components/scores/__tests__/__snapshots__/ScoreGroup.spec.js.snap +39 -10
  224. package/src/components/scores/__tests__/__snapshots__/ScoreGroupBreadcrumbs.spec.js.snap +1 -0
  225. package/src/components/scores/__tests__/__snapshots__/ScoreGroupForm.spec.js.snap +10 -10
  226. package/src/components/scores/__tests__/__snapshots__/ScoreGroupLink.spec.js.snap +1 -0
  227. package/src/components/scores/__tests__/__snapshots__/ScoreGroupsRoutes.spec.js.snap +19 -0
  228. package/src/components/scores/__tests__/__snapshots__/ScoreGroupsTable.spec.js.snap +2 -0
  229. package/src/components/scores/__tests__/__snapshots__/ScoreStatusDecorator.spec.js.snap +5 -0
  230. package/src/components/scores/__tests__/__snapshots__/ScoreTabs.spec.js.snap +4 -0
  231. package/src/hooks/__tests__/useDataViews.spec.js +1 -1
  232. package/src/hooks/__tests__/useFunctions.spec.js +5 -5
  233. package/src/hooks/useDataViews.js +2 -2
  234. package/src/hooks/useExecutionGroups.js +1 -1
  235. package/src/hooks/useFunctions.js +4 -4
  236. package/src/hooks/useQualityControls.js +13 -7
  237. package/src/hooks/useScoreGroups.js +1 -1
  238. package/src/hooks/useScores.js +2 -2
  239. package/src/styles/scores.less +21 -21
  240. package/src/types.js +1 -4
@@ -1,78 +1,76 @@
1
- import React from "react";
2
- import { render } from "@truedat/test/render";
3
1
  import { waitFor } from "@testing-library/react";
4
2
  import userEvent from "@testing-library/user-event";
3
+ import { render, waitForLoad } from "@truedat/test/render";
5
4
  import TestFormWrapper from "@truedat/qx/components/common/TestFormWrapper";
6
- import { messages } from "@truedat/qx/components/__tests__/__fixtures__/helper";
7
5
  import FunctionParams from "../FunctionParams";
8
6
 
9
- const renderOpts = {
10
- messages,
11
- fallback: "lazy",
12
- };
13
-
14
7
  describe("<FunctionParams />", () => {
15
8
  it("matches the latest snapshot without param", async () => {
16
- const { container, queryByText } = render(
9
+ const rendered = render(
17
10
  <TestFormWrapper>
18
11
  <FunctionParams />
19
- </TestFormWrapper>,
20
- renderOpts
12
+ </TestFormWrapper>
21
13
  );
22
- await waitFor(() => expect(queryByText(/lazy/i)).not.toBeInTheDocument());
23
- expect(container).toMatchSnapshot();
14
+ await waitForLoad(rendered);
15
+ expect(rendered.container).toMatchSnapshot();
24
16
  });
25
17
 
26
18
  it("matches the latest snapshot with param", async () => {
27
19
  const defaultValues = {
28
20
  params: [{ name: "param1", type: "boolean", id: 1 }],
29
21
  };
30
- const { container, queryByText } = render(
22
+ const rendered = render(
31
23
  <TestFormWrapper defaultValues={defaultValues}>
32
24
  <FunctionParams />
33
- </TestFormWrapper>,
34
- renderOpts
25
+ </TestFormWrapper>
35
26
  );
36
- await waitFor(() => expect(queryByText(/lazy/i)).not.toBeInTheDocument());
37
- expect(container).toMatchSnapshot();
27
+ await waitForLoad(rendered);
28
+ expect(rendered.container).toMatchSnapshot();
38
29
  });
39
30
 
40
31
  it("user interaction", async () => {
41
32
  const watcher = jest.fn();
33
+ const user = userEvent.setup({ delay: null, skipHover: true });
42
34
 
43
35
  const testArgName = "test_arg_name";
44
36
  const testArgDescription = "test_arg_description";
45
37
 
46
- const { queryByText, getByRole, getByPlaceholderText, getByText } = render(
38
+ const rendered = render(
47
39
  <TestFormWrapper watcher={watcher}>
48
40
  <FunctionParams />
49
- </TestFormWrapper>,
50
- renderOpts
41
+ </TestFormWrapper>
42
+ );
43
+ await waitForLoad(rendered);
44
+ await user.click(
45
+ rendered.getByRole("button", { name: /functions.form.add_param/i })
51
46
  );
52
- await waitFor(() => expect(queryByText(/lazy/i)).not.toBeInTheDocument());
53
- userEvent.click(getByRole("button", { name: /Add parameter/i }));
54
47
 
55
- const argInput = getByPlaceholderText(/name/i);
56
- const typeSelector = getByRole("listbox");
57
- const stringOption = getByRole("option", { name: /string/i });
58
- const descriptionInputLabel = getByText(/Add description/i);
48
+ const nameInput = () =>
49
+ rendered.queryByPlaceholderText("functions.form.name");
50
+ const descriptionInputLabel = () =>
51
+ rendered.getByText("functions.form.add_description");
59
52
 
60
- await waitFor(() => expect(argInput).toBeInTheDocument());
61
- await waitFor(() => expect(typeSelector).toBeInTheDocument());
62
- await waitFor(() => expect(descriptionInputLabel).toBeInTheDocument());
53
+ const descriptionInput = () =>
54
+ rendered.getByPlaceholderText("functions.form.description");
55
+ const typeSelector = () => rendered.getByRole("listbox");
56
+ const stringOption = () =>
57
+ rendered.getByRole("option", { name: /string/i });
63
58
 
64
- userEvent.click(typeSelector);
65
- await waitFor(() => expect(descriptionInputLabel).toBeInTheDocument());
59
+ await waitFor(() => expect(nameInput()).toBeInTheDocument());
60
+ await waitFor(() => expect(typeSelector()).toBeInTheDocument());
61
+ await waitFor(() => expect(descriptionInputLabel()).toBeInTheDocument());
66
62
 
67
- userEvent.click(stringOption);
63
+ await user.click(typeSelector());
64
+ await waitFor(() => expect(descriptionInputLabel()).toBeInTheDocument());
68
65
 
69
- userEvent.type(argInput, testArgName);
66
+ await user.click(stringOption());
70
67
 
71
- userEvent.click(descriptionInputLabel);
72
- const descriptionInput = getByPlaceholderText(/description/i);
73
- await waitFor(() => expect(descriptionInput).toBeInTheDocument());
68
+ await user.type(nameInput(), testArgName);
74
69
 
75
- userEvent.type(descriptionInput, testArgDescription);
70
+ await user.click(descriptionInputLabel());
71
+ await waitFor(() => expect(descriptionInput()).toBeInTheDocument());
72
+
73
+ await user.type(descriptionInput(), testArgDescription);
76
74
 
77
75
  expect(watcher).toHaveBeenLastCalledWith({
78
76
  params: [
@@ -85,16 +83,21 @@ describe("<FunctionParams />", () => {
85
83
  ],
86
84
  });
87
85
 
88
- userEvent.hover(argInput);
89
- const deleteButton = getByRole("button", { name: /delete/i });
90
- await waitFor(() => expect(deleteButton).toBeInTheDocument());
91
- userEvent.unhover(argInput);
92
- await waitFor(() => expect(deleteButton).not.toBeInTheDocument());
86
+ const deleteButton = () =>
87
+ rendered.queryByRole("button", { name: /delete/i });
88
+
89
+ await user.hover(nameInput());
90
+ await waitFor(() => expect(deleteButton()).toBeInTheDocument());
91
+
92
+ await user.unhover(nameInput());
93
+
94
+ await waitFor(() => expect(deleteButton()).not.toBeInTheDocument());
95
+
96
+ await user.hover(nameInput().parentElement);
97
+
98
+ await user.click(rendered.getByRole("button", { name: /delete/i }));
93
99
 
94
- userEvent.hover(argInput);
95
- const newDeleteButton = getByRole("button", { name: /delete/i });
96
- userEvent.click(newDeleteButton);
97
- await waitFor(() => expect(argInput).not.toBeInTheDocument());
100
+ await waitFor(() => expect(nameInput()).not.toBeInTheDocument());
98
101
 
99
102
  expect(watcher).toHaveBeenLastCalledWith({ params: [] });
100
103
  });
@@ -1,7 +1,5 @@
1
- import React from "react";
2
- import { waitFor } from "@testing-library/react";
3
- import { render } from "@truedat/test/render";
4
- import { messages } from "@truedat/qx/components/__tests__/__fixtures__/helper";
1
+ import userEvent from "@testing-library/user-event";
2
+ import { render, waitForLoad } from "@truedat/test/render";
5
3
  import Functions from "../Functions";
6
4
 
7
5
  jest.mock("@truedat/qx/hooks/useFunctions", () => {
@@ -50,14 +48,9 @@ jest.mock("@truedat/qx/hooks/useFunctions", () => {
50
48
  });
51
49
 
52
50
  describe("<Functions />", () => {
53
- const renderOpts = {
54
- messages,
55
- fallback: "lazy",
56
- };
57
-
58
51
  it("matches the latest snapshot", async () => {
59
- const { container, queryByText } = render(<Functions />, renderOpts);
60
- await waitFor(() => expect(queryByText(/lazy/i)).not.toBeInTheDocument());
61
- expect(container).toMatchSnapshot();
52
+ const rendered = render(<Functions />);
53
+ await waitForLoad(rendered);
54
+ expect(rendered.container).toMatchSnapshot();
62
55
  });
63
56
  });
@@ -37,7 +37,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
37
37
  >
38
38
  <input
39
39
  autocomplete="off"
40
- placeholder="Name"
40
+ placeholder="functions.form.name"
41
41
  type="text"
42
42
  value="param1"
43
43
  />
@@ -54,7 +54,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
54
54
  class="divider text"
55
55
  role="alert"
56
56
  >
57
- boolean
57
+ expressions.data_type.boolean
58
58
  </div>
59
59
  <i
60
60
  aria-hidden="true"
@@ -77,7 +77,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
77
77
  <span
78
78
  class="text"
79
79
  >
80
- boolean
80
+ expressions.data_type.boolean
81
81
  </span>
82
82
  </div>
83
83
  <div
@@ -94,7 +94,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
94
94
  <span
95
95
  class="text"
96
96
  >
97
- string
97
+ expressions.data_type.string
98
98
  </span>
99
99
  </div>
100
100
  <div
@@ -111,7 +111,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
111
111
  <span
112
112
  class="text"
113
113
  >
114
- number
114
+ expressions.data_type.number
115
115
  </span>
116
116
  </div>
117
117
  <div
@@ -128,7 +128,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
128
128
  <span
129
129
  class="text"
130
130
  >
131
- date
131
+ expressions.data_type.date
132
132
  </span>
133
133
  </div>
134
134
  <div
@@ -145,7 +145,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
145
145
  <span
146
146
  class="text"
147
147
  >
148
- timestamp
148
+ expressions.data_type.timestamp
149
149
  </span>
150
150
  </div>
151
151
  <div
@@ -162,7 +162,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
162
162
  <span
163
163
  class="text"
164
164
  >
165
- any
165
+ expressions.data_type.any
166
166
  </span>
167
167
  </div>
168
168
  </div>
@@ -184,7 +184,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
184
184
  style="font-style: italic; font-size: 13px; padding: 9.5px 14px;"
185
185
  tabindex="0"
186
186
  >
187
- Add description
187
+ functions.form.add_description
188
188
  </a>
189
189
  </div>
190
190
  </div>
@@ -200,7 +200,7 @@ exports[`<FunctionParams /> matches the latest snapshot with param 1`] = `
200
200
  <button
201
201
  class="ui button"
202
202
  >
203
- Add parameter
203
+ functions.form.add_param
204
204
  </button>
205
205
  </div>
206
206
  </div>
@@ -220,7 +220,7 @@ exports[`<FunctionParams /> matches the latest snapshot without param 1`] = `
220
220
  <button
221
221
  class="ui button"
222
222
  >
223
- Add parameter
223
+ functions.form.add_param
224
224
  </button>
225
225
  </div>
226
226
  </div>
@@ -15,11 +15,11 @@ exports[`<Functions /> matches the latest snapshot 1`] = `
15
15
  <div
16
16
  class="content"
17
17
  >
18
- Quality Functions
18
+ functions.header
19
19
  <div
20
20
  class="sub header"
21
21
  >
22
- List and edit quality functions
22
+ functions.subheader
23
23
  </div>
24
24
  </div>
25
25
  </h2>
@@ -32,7 +32,7 @@ exports[`<Functions /> matches the latest snapshot 1`] = `
32
32
  <button
33
33
  class="ui fluid button"
34
34
  >
35
- New function
35
+ functions.action.new
36
36
  </button>
37
37
  <div
38
38
  class="ui divided selection list"
@@ -54,7 +54,6 @@ exports[`<Functions /> matches the latest snapshot 1`] = `
54
54
  >
55
55
  b
56
56
  </div>
57
-
58
57
  user_false
59
58
  /
60
59
  0
@@ -76,7 +75,7 @@ exports[`<Functions /> matches the latest snapshot 1`] = `
76
75
  <div
77
76
  class="sub header"
78
77
  >
79
- No function selected
78
+ functions.no_selection
80
79
  </div>
81
80
  </h2>
82
81
  </div>
@@ -1,34 +1,35 @@
1
- import React, { useContext } from "react";
1
+ import { use } from "react";
2
2
  import { useFormContext } from "react-hook-form";
3
3
  import { Segment } from "semantic-ui-react";
4
4
  import QxContext from "@truedat/qx/components/QxContext";
5
- import ErrorCount from "./controlProperties/ErrorCount";
5
+ import Count from "./controlProperties/Count";
6
6
  import Ratio from "./controlProperties/Ratio";
7
7
 
8
8
  export default function ControlProperties() {
9
9
  const { watch } = useFormContext();
10
- const context = useContext(QxContext);
10
+ const context = use(QxContext);
11
11
 
12
12
  const { control_mode: controlMode, source_id: sourceId } = watch();
13
13
 
14
14
  const componentForMode = {
15
- error_count: <ErrorCount />,
15
+ count: <Count />,
16
16
  deviation: <Ratio />,
17
+ error_count: <Ratio />,
17
18
  percentage: <Ratio />,
18
19
  };
19
20
 
20
21
  return controlMode && sourceId ? (
21
22
  <Segment>
22
- <QxContext.Provider value={{ ...context, field: "control_properties" }}>
23
+ <QxContext value={{ ...context, field: "control_properties" }}>
23
24
  {componentForMode[controlMode]}
24
- </QxContext.Provider>
25
+ </QxContext>
25
26
  </Segment>
26
27
  ) : null;
27
28
  }
28
29
 
29
30
  export const defaultForMode = (controlMode) => {
30
31
  switch (controlMode) {
31
- case "error_count":
32
+ case "count":
32
33
  return { errors_resource: null };
33
34
  default:
34
35
  return {
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { FormattedMessage } from "react-intl";
5
4
  import { Header, Icon, Segment, List, Label } from "semantic-ui-react";
@@ -14,8 +13,9 @@ export default function ControlPropertiesView({ qualityControl }) {
14
13
  deviation: (
15
14
  <ControlPropertiesRatio controlProperties={control_properties} />
16
15
  ),
16
+ count: <ControlPropertiesCount controlProperties={control_properties} />,
17
17
  error_count: (
18
- <ControlPropertiesErrorCount controlProperties={control_properties} />
18
+ <ControlPropertiesRatio controlProperties={control_properties} />
19
19
  ),
20
20
  };
21
21
 
@@ -78,11 +78,11 @@ const ControlPropertiesRatio = ({ controlProperties }) => (
78
78
  </List>
79
79
  );
80
80
 
81
- const ControlPropertiesErrorCount = ({ controlProperties }) => (
81
+ const ControlPropertiesCount = ({ controlProperties }) => (
82
82
  <List>
83
83
  <List.Item>
84
84
  <List.Header>
85
- <FormattedMessage id="quality_control.error_count.errors_resource" />
85
+ <FormattedMessage id="quality_control.count.errors_resource" />
86
86
  </List.Header>
87
87
  <List.Content>
88
88
  {controlProperties.errors_resource ? (
@@ -97,7 +97,7 @@ const ControlPropertiesErrorCount = ({ controlProperties }) => (
97
97
  </Label>
98
98
  </List.Description>
99
99
  ) : (
100
- <FormattedMessage id="quality_control.error_count.errors_resource.empty" />
100
+ <FormattedMessage id="quality_control.count.errors_resource.empty" />
101
101
  )}
102
102
  </List.Content>
103
103
  </List.Item>
@@ -1,6 +1,5 @@
1
- import React from "react";
2
1
  import { FormattedMessage } from "react-intl";
3
- import { useParams, useHistory } from "react-router-dom";
2
+ import { useParams, useNavigate } from "react-router";
4
3
  import { Container, Header, Icon, Segment } from "semantic-ui-react";
5
4
  import { QUALITY_CONTROLS, linkTo } from "@truedat/core/routes";
6
5
  import {
@@ -11,7 +10,8 @@ import QualityControlEditor from "./QualityControlEditor";
11
10
 
12
11
  export default function EditQualityControl() {
13
12
  const { id, version } = useParams();
14
- const history = useHistory();
13
+ const navigate = useNavigate();
14
+
15
15
  const { trigger, isMutating } = useQualityControlUpdateDraft(id);
16
16
  const { data, loading: qualityControlLoading } = useQualityControl(
17
17
  id,
@@ -29,7 +29,7 @@ export default function EditQualityControl() {
29
29
  }).then(({ data }) => {
30
30
  const id = data?.data?.id;
31
31
  const version = data?.data?.version;
32
- history.push(linkTo.QUALITY_CONTROL({ id, version }));
32
+ navigate(linkTo.QUALITY_CONTROL({ id, version }));
33
33
  });
34
34
  };
35
35
  return (
@@ -49,7 +49,7 @@ export default function EditQualityControl() {
49
49
  isModification
50
50
  value={qualityControl}
51
51
  onSave={handleSubmit}
52
- onCancel={() => history.push(QUALITY_CONTROLS)}
52
+ onCancel={() => navigate(QUALITY_CONTROLS)}
53
53
  isSubmitting={loading}
54
54
  />
55
55
  ) : null}
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { FormattedMessage } from "react-intl";
3
2
  import { Icon, Popup, Header, List, ListItem } from "semantic-ui-react";
4
3
 
@@ -1,7 +1,6 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import { FormattedMessage } from "react-intl";
4
- import { useParams, useHistory } from "react-router-dom";
3
+ import { useParams, useNavigate } from "react-router";
5
4
  import { Container, Header, Icon, Segment } from "semantic-ui-react";
6
5
  import { QUALITY_CONTROLS, linkTo } from "@truedat/core/routes";
7
6
  import {
@@ -12,7 +11,8 @@ import QualityControlEditor from "./QualityControlEditor";
12
11
 
13
12
  export default function NewDraftQualityControl() {
14
13
  const { id, version } = useParams();
15
- const history = useHistory();
14
+ const navigate = useNavigate();
15
+
16
16
  const { trigger, isMutating } = useQualityControlCreateDraft(id);
17
17
 
18
18
  const { data, loading: qualityControlLoading } = useQualityControl(
@@ -31,8 +31,9 @@ export default function NewDraftQualityControl() {
31
31
  }).then(({ data }) => {
32
32
  const id = data?.data?.id;
33
33
  const version = data?.data?.version;
34
- history.push(linkTo.QUALITY_CONTROL({ id, version }));
34
+ navigate(linkTo.QUALITY_CONTROL({ id, version }));
35
35
  });
36
+
36
37
  const handleSave = (qualityControl) => {
37
38
  trigger({
38
39
  quality_control: {
@@ -42,9 +43,10 @@ export default function NewDraftQualityControl() {
42
43
  }).then(({ data }) => {
43
44
  const id = data?.data?.id;
44
45
  const version = data?.data?.version;
45
- history.push(linkTo.QUALITY_CONTROL({ id, version }));
46
+ navigate(linkTo.QUALITY_CONTROL({ id, version }));
46
47
  });
47
48
  };
49
+
48
50
  return (
49
51
  <Segment floated="left" loading={loading}>
50
52
  <Container text>
@@ -63,7 +65,7 @@ export default function NewDraftQualityControl() {
63
65
  value={qualityControl}
64
66
  onPublish={handlePublish}
65
67
  onSave={handleSave}
66
- onCancel={() => history.push(QUALITY_CONTROLS)}
68
+ onCancel={() => navigate(QUALITY_CONTROLS)}
67
69
  isSubmitting={loading}
68
70
  />
69
71
  ) : null}
@@ -1,7 +1,6 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import { FormattedMessage } from "react-intl";
4
- import { useHistory } from "react-router-dom";
3
+ import { useNavigate } from "react-router";
5
4
  import { Container, Header, Icon, Segment } from "semantic-ui-react";
6
5
  import { QUALITY_CONTROLS, linkTo } from "@truedat/core/routes";
7
6
  import { useQualityControlCreate } from "../../hooks/useQualityControls";
@@ -14,7 +13,7 @@ export const defaultQualityControl = {
14
13
  df_type: null,
15
14
  };
16
15
  export default function NewQualityControl() {
17
- const history = useHistory();
16
+ const navigate = useNavigate();
18
17
  const { trigger, isMutating } = useQualityControlCreate();
19
18
 
20
19
  const handlePublish = (qualityControl) => {
@@ -26,7 +25,7 @@ export default function NewQualityControl() {
26
25
  }).then(({ data }) => {
27
26
  const id = data?.data?.id;
28
27
  const version = data?.data?.version;
29
- history.push(linkTo.QUALITY_CONTROL({ id, version }));
28
+ navigate(linkTo.QUALITY_CONTROL({ id, version }));
30
29
  });
31
30
  };
32
31
  const handleSave = (qualityControl) => {
@@ -38,7 +37,7 @@ export default function NewQualityControl() {
38
37
  }).then(({ data }) => {
39
38
  const id = data?.data?.id;
40
39
  const version = data?.data?.version;
41
- history.push(linkTo.QUALITY_CONTROL({ id, version }));
40
+ navigate(linkTo.QUALITY_CONTROL({ id, version }));
42
41
  });
43
42
  };
44
43
 
@@ -59,7 +58,7 @@ export default function NewQualityControl() {
59
58
  isModification={false}
60
59
  onPublish={handlePublish}
61
60
  onSave={handleSave}
62
- onCancel={() => history.push(QUALITY_CONTROLS)}
61
+ onCancel={() => navigate(QUALITY_CONTROLS)}
63
62
  isSubmitting={isMutating}
64
63
  />
65
64
  </Container>
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { FormattedMessage, useIntl } from "react-intl";
5
4
  import { Icon } from "semantic-ui-react";
@@ -52,10 +51,10 @@ export const QualityBadgeForSearch = ({
52
51
  latestScore?.result_message === "meets_goal"
53
52
  ? "green"
54
53
  : latestScore?.result_message === "under_goal"
55
- ? "yellow"
56
- : latestScore?.result_message === "no_results"
57
- ? "grey"
58
- : "red";
54
+ ? "yellow"
55
+ : latestScore?.result_message === "no_results"
56
+ ? "grey"
57
+ : "red";
59
58
 
60
59
  const attrs =
61
60
  controlMode == "percentage"
@@ -68,22 +67,31 @@ export const QualityBadgeForSearch = ({
68
67
  text: `${latestScore.result}%`,
69
68
  }
70
69
  : controlMode == "deviation"
71
- ? {
72
- color: color,
73
- label1: "quality_control.score_criteria.deviation.goal",
74
- value1: criteria.goal,
75
- label2: "quality_control.score_criteria.deviation.maximum",
76
- value2: criteria.maximum,
77
- text: `${latestScore.result}%`,
78
- }
79
- : {
80
- color: color,
81
- label1: "quality_control.score_criteria.error_count.goal",
82
- value1: criteria?.goal,
83
- label2: "quality_control.score_criteria.error_count.maximum",
84
- value2: criteria?.maximum,
85
- text: latestScore?.result,
86
- };
70
+ ? {
71
+ color: color,
72
+ label1: "quality_control.score_criteria.deviation.goal",
73
+ value1: criteria.goal,
74
+ label2: "quality_control.score_criteria.deviation.maximum",
75
+ value2: criteria.maximum,
76
+ text: `${latestScore.result}%`,
77
+ }
78
+ : controlMode == "error_count"
79
+ ? {
80
+ color: color,
81
+ label1: "quality_control.score_criteria.error_count.goal",
82
+ value1: criteria.goal,
83
+ label2: "quality_control.score_criteria.error_count.maximum",
84
+ value2: criteria.maximum,
85
+ text: latestScore?.result,
86
+ }
87
+ : {
88
+ color: color,
89
+ label1: "quality_control.score_criteria.count.goal",
90
+ value1: criteria?.goal,
91
+ label2: "quality_control.score_criteria.count.maximum",
92
+ value2: criteria?.maximum,
93
+ text: latestScore?.result,
94
+ };
87
95
  return latestScore?.status === "failed" ? (
88
96
  <>
89
97
  <Icon color="red" name="warning circle" />
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useContext, useState } from "react";
2
+ import { lazy, use, useState } from "react";
3
3
  import { FormattedMessage } from "react-intl";
4
4
  import { Button, Header, Icon, List, Label, Popup } from "semantic-ui-react";
5
5
  import { Loading } from "@truedat/core/components";
@@ -7,8 +7,8 @@ import QxContext from "../QxContext";
7
7
  import QualityControlManageDomain from "./QualityControlManageDomain";
8
8
  import ScoreCriteriaView from "./ScoreCriteriaView";
9
9
  import ControlPropertiesView from "./ControlPropertiesView";
10
- const DynamicFormViewer = React.lazy(() =>
11
- import("@truedat/df/components/DynamicFormViewer")
10
+ const DynamicFormViewer = lazy(
11
+ () => import("@truedat/df/components/DynamicFormViewer")
12
12
  );
13
13
 
14
14
  const DomainPopup = () => {
@@ -37,7 +37,7 @@ const DomainPopup = () => {
37
37
  };
38
38
 
39
39
  export default function QualityControl() {
40
- const { qualityControl, actions, loading } = useContext(QxContext);
40
+ const { qualityControl, actions, loading } = use(QxContext);
41
41
  const canUpdateDomain = _.includes("update_main")(actions);
42
42
  return (
43
43
  <>
@@ -58,9 +58,7 @@ export default function QualityControl() {
58
58
  </List.Description>
59
59
  </List.Item>
60
60
  </List>
61
-
62
61
  <ScoreCriteriaView qualityControl={qualityControl} />
63
-
64
62
  {qualityControl.df_type ? (
65
63
  <>
66
64
  <Header as="h3">
@@ -77,7 +75,6 @@ export default function QualityControl() {
77
75
  />
78
76
  </>
79
77
  ) : null}
80
-
81
78
  <ControlPropertiesView qualityControl={qualityControl} />
82
79
  </>
83
80
  )}