@truedat/df 7.5.9 → 7.5.11

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 (213) hide show
  1. package/package.json +43 -67
  2. package/src/components/DynamicFieldValue.js +0 -1
  3. package/src/components/DynamicForm.js +5 -4
  4. package/src/components/DynamicFormViewer.js +0 -1
  5. package/src/components/DynamicFormWithTranslations.js +3 -3
  6. package/src/components/EditableDynamicFieldValue.js +1 -2
  7. package/src/components/FieldGroupDetail.js +0 -1
  8. package/src/components/FieldGroupSegment.js +17 -29
  9. package/src/components/FieldGroupWithTranslations.js +19 -38
  10. package/src/components/FieldViewerValue.js +4 -7
  11. package/src/components/OriginLabel.js +0 -1
  12. package/src/components/SelectDynamicFormWithTranslations.js +4 -6
  13. package/src/components/SelectableDynamicForm.js +5 -11
  14. package/src/components/__tests__/DynamicFieldValue.spec.js +0 -1
  15. package/src/components/__tests__/DynamicForm.spec.js +25 -23
  16. package/src/components/__tests__/EditableDynamicFieldValue.spec.js +0 -1
  17. package/src/components/__tests__/FieldGroupDetail.spec.js +0 -1
  18. package/src/components/__tests__/FieldViewerValue.spec.js +1 -6
  19. package/src/components/__tests__/SelectableDynamicForm.spec.js +102 -46
  20. package/src/components/__tests__/__snapshots__/DynamicFieldValue.spec.js.snap +2 -2
  21. package/src/components/__tests__/__snapshots__/DynamicForm.spec.js.snap +94 -81
  22. package/src/components/__tests__/__snapshots__/FieldGroupDetail.spec.js.snap +2 -2
  23. package/src/components/__tests__/__snapshots__/FieldViewerValue.spec.js.snap +1 -7
  24. package/src/components/__tests__/__snapshots__/SelectableDynamicForm.spec.js.snap +39 -39
  25. package/src/components/hierarchies/Hierarchies.js +2 -4
  26. package/src/components/hierarchies/HierarchiesView.js +1 -2
  27. package/src/components/hierarchies/HierarchyCrumbs.js +1 -2
  28. package/src/components/hierarchies/HierarchyRoutes.js +44 -39
  29. package/src/components/hierarchies/HierarchyView.js +4 -7
  30. package/src/components/hierarchies/__tests__/Hierarchies.spec.js +2 -3
  31. package/src/components/hierarchies/__tests__/HierarchiesView.spec.js +3 -7
  32. package/src/components/hierarchies/__tests__/HierarchyCrumbs.spec.js +0 -1
  33. package/src/components/hierarchies/__tests__/HierarchyRoutes.spec.js +79 -0
  34. package/src/components/hierarchies/__tests__/HierarchyView.spec.js +2 -10
  35. package/src/components/hierarchies/__tests__/__snapshots__/Hierarchies.spec.js.snap +1 -0
  36. package/src/components/hierarchies/__tests__/__snapshots__/HierarchiesView.spec.js.snap +7 -5
  37. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyCrumbs.spec.js.snap +4 -2
  38. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyRoutes.spec.js.snap +60 -0
  39. package/src/components/hierarchies/__tests__/__snapshots__/HierarchyView.spec.js.snap +8 -6
  40. package/src/components/widgets/CheckboxField.js +0 -1
  41. package/src/components/widgets/ColorPickerField.js +2 -3
  42. package/src/components/widgets/DateField.js +0 -1
  43. package/src/components/widgets/DateTimeField.js +0 -1
  44. package/src/components/widgets/DomainDropdown.js +1 -1
  45. package/src/components/widgets/DomainPreview.js +1 -2
  46. package/src/components/widgets/DropdownDataLoader.js +3 -3
  47. package/src/components/widgets/DropdownField.js +5 -4
  48. package/src/components/widgets/DynamicField.js +0 -5
  49. package/src/components/widgets/EnrichedTextField.js +0 -1
  50. package/src/components/widgets/HierarchyDropdown.js +1 -1
  51. package/src/components/widgets/HierarchyPreview.js +0 -1
  52. package/src/components/widgets/IdentifierField.js +0 -1
  53. package/src/components/widgets/ImageField.js +1 -1
  54. package/src/components/widgets/ImagePreview.js +0 -1
  55. package/src/components/widgets/NumberField.js +6 -7
  56. package/src/components/widgets/PairListField.js +5 -6
  57. package/src/components/widgets/PasswordField.js +1 -2
  58. package/src/components/widgets/RadioField.js +0 -1
  59. package/src/components/widgets/StandardDropdown.js +0 -1
  60. package/src/components/widgets/StringField.js +0 -1
  61. package/src/components/widgets/SystemPreview.js +2 -3
  62. package/src/components/widgets/TableField.js +5 -5
  63. package/src/components/widgets/TextField.js +1 -2
  64. package/src/components/widgets/__tests__/CheckboxField.spec.js +33 -23
  65. package/src/components/widgets/__tests__/ColorPickerField.spec.js +5 -12
  66. package/src/components/widgets/__tests__/DateField.spec.js +5 -5
  67. package/src/components/widgets/__tests__/DateTimeField.spec.js +5 -5
  68. package/src/components/widgets/__tests__/DomainPreview.spec.js +12 -14
  69. package/src/components/widgets/__tests__/DropdownDataLoader.spec.js +5 -5
  70. package/src/components/widgets/__tests__/DropdownField.spec.js +18 -29
  71. package/src/components/widgets/__tests__/DynamicField.spec.js +0 -1
  72. package/src/components/widgets/__tests__/HierarchyDropdown.spec.js +4 -5
  73. package/src/components/widgets/__tests__/HierarchyPreview.spec.js +0 -1
  74. package/src/components/widgets/__tests__/ImageField.spec.js +5 -10
  75. package/src/components/widgets/__tests__/NumberField.spec.js +23 -5
  76. package/src/components/widgets/__tests__/PairListField.spec.js +69 -59
  77. package/src/components/widgets/__tests__/PasswordField.spec.js +3 -4
  78. package/src/components/widgets/__tests__/RadioField.spec.js +5 -5
  79. package/src/components/widgets/__tests__/StandardDropdown.spec.js +45 -46
  80. package/src/components/widgets/__tests__/StringField.spec.js +10 -13
  81. package/src/components/widgets/__tests__/SystemPreview.spec.js +13 -15
  82. package/src/components/widgets/__tests__/TableField.spec.js +32 -32
  83. package/src/components/widgets/__tests__/TextField.spec.js +5 -5
  84. package/src/components/widgets/__tests__/__snapshots__/CheckboxField.spec.js.snap +58 -29
  85. package/src/components/widgets/__tests__/__snapshots__/ColorPickerField.spec.js.snap +221 -36
  86. package/src/components/widgets/__tests__/__snapshots__/DateField.spec.js.snap +21 -16
  87. package/src/components/widgets/__tests__/__snapshots__/DateTimeField.spec.js.snap +21 -20
  88. package/src/components/widgets/__tests__/__snapshots__/DomainPreview.spec.js.snap +26 -21
  89. package/src/components/widgets/__tests__/__snapshots__/DropdownDataLoader.spec.js.snap +1 -1
  90. package/src/components/widgets/__tests__/__snapshots__/DropdownField.spec.js.snap +93 -43
  91. package/src/components/widgets/__tests__/__snapshots__/DynamicField.spec.js.snap +2 -14
  92. package/src/components/widgets/__tests__/__snapshots__/ImageField.spec.js.snap +16 -28
  93. package/src/components/widgets/__tests__/__snapshots__/NumberField.spec.js.snap +11 -9
  94. package/src/components/widgets/__tests__/__snapshots__/PairListField.spec.js.snap +53 -39
  95. package/src/components/widgets/__tests__/__snapshots__/PasswordField.spec.js.snap +15 -8
  96. package/src/components/widgets/__tests__/__snapshots__/RadioField.spec.js.snap +41 -22
  97. package/src/components/widgets/__tests__/__snapshots__/StandardDropdown.spec.js.snap +78 -31
  98. package/src/components/widgets/__tests__/__snapshots__/StringField.spec.js.snap +78 -38
  99. package/src/components/widgets/__tests__/__snapshots__/SystemPreview.spec.js.snap +24 -21
  100. package/src/components/widgets/__tests__/__snapshots__/TableField.spec.js.snap +138 -174
  101. package/src/components/widgets/__tests__/__snapshots__/TextField.spec.js.snap +12 -7
  102. package/src/reducers/__tests__/dfMessage.spec.js +14 -18
  103. package/src/reducers/dfMessage.js +8 -7
  104. package/src/selectors/index.js +0 -1
  105. package/src/templates/components/NewTemplate.js +0 -1
  106. package/src/templates/components/Template.js +10 -3
  107. package/src/templates/components/TemplateCard.js +3 -4
  108. package/src/templates/components/TemplateCrumbs.js +2 -3
  109. package/src/templates/components/TemplateFilters.js +0 -1
  110. package/src/templates/components/TemplateLoader.js +25 -101
  111. package/src/templates/components/TemplateRoutes.js +29 -45
  112. package/src/templates/components/Templates.js +1 -5
  113. package/src/templates/components/TemplatesContext.js +3 -7
  114. package/src/templates/components/TemplatesTable.js +1 -2
  115. package/src/templates/components/__tests__/NewTemplate.spec.js +5 -10
  116. package/src/templates/components/__tests__/Template.spec.js +0 -1
  117. package/src/templates/components/__tests__/TemplateLoader.spec.js +71 -109
  118. package/src/templates/components/__tests__/TemplateRoutes.spec.js +63 -0
  119. package/src/templates/components/__tests__/TemplatesTable.spec.js +15 -9
  120. package/src/templates/components/__tests__/__snapshots__/NewTemplate.spec.js.snap +335 -22
  121. package/src/templates/components/__tests__/__snapshots__/Template.spec.js.snap +49 -48
  122. package/src/templates/components/__tests__/__snapshots__/TemplateLoader.spec.js.snap +7 -1
  123. package/src/templates/components/__tests__/__snapshots__/TemplateRoutes.spec.js.snap +38 -0
  124. package/src/templates/components/__tests__/__snapshots__/TemplatesTable.spec.js.snap +94 -1
  125. package/src/templates/components/index.js +1 -2
  126. package/src/templates/components/templateForm/ActiveGroupForm.js +1 -4
  127. package/src/templates/components/templateForm/ConditionalFieldForm.js +0 -1
  128. package/src/templates/components/templateForm/DefaultValue.js +0 -1
  129. package/src/templates/components/templateForm/DependentDomain.js +0 -1
  130. package/src/templates/components/templateForm/DependentFormField.js +0 -1
  131. package/src/templates/components/templateForm/FieldForm.js +5 -5
  132. package/src/templates/components/templateForm/GroupsList.js +0 -1
  133. package/src/templates/components/templateForm/HierarchiesList.js +1 -2
  134. package/src/templates/components/templateForm/MandatoryConditional.js +0 -1
  135. package/src/templates/components/templateForm/SwitchListForm.js +2 -2
  136. package/src/templates/components/templateForm/SwitchSegment.js +0 -1
  137. package/src/templates/components/templateForm/TemplateForm.js +1 -1
  138. package/src/templates/components/templateForm/TemplateFormActions.js +3 -4
  139. package/src/templates/components/templateForm/ValuesField.js +1 -3
  140. package/src/templates/components/templateForm/ValuesListForm.js +3 -3
  141. package/src/templates/components/templateForm/ValuesSelector.js +0 -1
  142. package/src/templates/components/templateForm/__tests__/ActiveGroupForm.spec.js +8 -13
  143. package/src/templates/components/templateForm/__tests__/DefaultValue.spec.js +198 -113
  144. package/src/templates/components/templateForm/__tests__/DependentDomain.spec.js +0 -1
  145. package/src/templates/components/templateForm/__tests__/DependentFormField.spec.js +0 -1
  146. package/src/templates/components/templateForm/__tests__/FieldForm.spec.js +106 -72
  147. package/src/templates/components/templateForm/__tests__/GroupsList.spec.js +7 -12
  148. package/src/templates/components/templateForm/__tests__/MandatoryConditional.spec.js +0 -1
  149. package/src/templates/components/templateForm/__tests__/SwitchListForm.spec.js +71 -50
  150. package/src/templates/components/templateForm/__tests__/SwitchSegment.spec.js +37 -62
  151. package/src/templates/components/templateForm/__tests__/TemplateForm.spec.js +0 -1
  152. package/src/templates/components/templateForm/__tests__/TemplateFormActions.spec.js +19 -15
  153. package/src/templates/components/templateForm/__tests__/ValuesField.spec.js +84 -62
  154. package/src/templates/components/templateForm/__tests__/ValuesListForm.spec.js +108 -144
  155. package/src/templates/components/templateForm/__tests__/ValuesSelector.spec.js +36 -36
  156. package/src/templates/components/templateForm/__tests__/__snapshots__/ActiveGroupForm.spec.js.snap +654 -86
  157. package/src/templates/components/templateForm/__tests__/__snapshots__/DefaultValue.spec.js.snap +45 -23
  158. package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +1700 -1025
  159. package/src/templates/components/templateForm/__tests__/__snapshots__/GroupsList.spec.js.snap +44 -39
  160. package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchListForm.spec.js.snap +225 -60
  161. package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchSegment.spec.js.snap +1 -1
  162. package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap +89 -92
  163. package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateFormActions.spec.js.snap +66 -100
  164. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesField.spec.js.snap +542 -231
  165. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesListForm.spec.js.snap +264 -268
  166. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesSelector.spec.js.snap +146 -11
  167. package/src/templates/reducers/__tests__/allTemplates.spec.js +1 -1
  168. package/src/templates/reducers/__tests__/template.spec.js +3 -2
  169. package/src/templates/reducers/__tests__/templateLoading.spec.js +2 -2
  170. package/src/templates/reducers/__tests__/templates.spec.js +1 -1
  171. package/src/templates/reducers/__tests__/templatesLoading.spec.js +1 -1
  172. package/src/templates/reducers/allTemplates.js +1 -2
  173. package/src/templates/reducers/template.js +2 -1
  174. package/src/templates/reducers/templateRedirect.js +1 -1
  175. package/src/templates/reducers/templates.js +1 -1
  176. package/src/templates/reducers/templatesLoading.js +1 -1
  177. package/src/templates/routines.js +0 -2
  178. package/src/templates/sagas/__tests__/deleteTemplate.spec.js +2 -2
  179. package/src/templates/sagas/__tests__/fetchTemplates.spec.js +3 -6
  180. package/src/templates/sagas/__tests__/updateTemplate.spec.js +4 -4
  181. package/src/templates/sagas/deleteTemplate.js +1 -1
  182. package/src/templates/sagas/fetchTemplate.js +1 -1
  183. package/src/templates/sagas/fetchTemplates.js +1 -1
  184. package/src/templates/sagas/updateTemplate.js +1 -1
  185. package/src/templates/utils/filterSwitches.js +2 -2
  186. package/src/templates/utils/filterValues.js +2 -2
  187. package/src/api/hierarchies.js +0 -4
  188. package/src/components/FieldGroupCopy.js +0 -108
  189. package/src/components/FieldGroupSubSegment/FieldGroupSubSegment.js +0 -181
  190. package/src/components/FieldGroupSubSegment/__tests__/FieldGroupSubSegment.spec.js +0 -221
  191. package/src/components/FieldGroupSubSegment/__tests__/__snapshots__/FieldGroupSubSegment.spec.js.snap +0 -230
  192. package/src/components/FieldGroupSubSegment/constants.js +0 -68
  193. package/src/components/FieldGroupSubSegment/copyValidations.js +0 -75
  194. package/src/components/FieldGroupSubSegment/handleCopyModule.js +0 -186
  195. package/src/components/__tests__/FieldGroupCopy.spec.js +0 -14
  196. package/src/components/__tests__/__snapshots__/FieldGroupCopy.spec.js.snap +0 -307
  197. package/src/components/widgets/CopyField/CopyField.js +0 -270
  198. package/src/components/widgets/CopyField/CopyFieldCell.js +0 -138
  199. package/src/components/widgets/CopyField/CopyFieldColumn.js +0 -53
  200. package/src/components/widgets/CopyField/CopyFieldSelectableCell.js +0 -71
  201. package/src/components/widgets/CopyField/CustomStyles.js +0 -91
  202. package/src/components/widgets/CopyField/__tests__/CopyField.spec.js +0 -82
  203. package/src/components/widgets/CopyField/__tests__/CopyFieldCell.spec.js +0 -67
  204. package/src/components/widgets/CopyField/__tests__/CopyFieldColumn.spec.js +0 -33
  205. package/src/components/widgets/CopyField/__tests__/CopyFieldSelectableCell.spec.js +0 -49
  206. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyField.spec.js.snap +0 -279
  207. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldCell.spec.js.snap +0 -67
  208. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldColumn.spec.js.snap +0 -42
  209. package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldSelectableCell.spec.js.snap +0 -60
  210. package/src/hooks/useHierarchies.js +0 -112
  211. package/src/selectors/subscopedTemplates.js +0 -16
  212. package/src/templates/components/TemplatesLoader.js +0 -24
  213. package/src/templates/components/__tests__/TemplatesLoader.spec.js +0 -29
@@ -1,15 +1,9 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
3
- import { render } from "@truedat/test/render";
4
- import { intl } from "@truedat/test/intl-stub";
1
+ import userEvent from "@testing-library/user-event";
2
+ import { render, waitForLoad } from "@truedat/test/render";
5
3
  import { FieldForm } from "../FieldForm";
6
4
 
7
- // workaround for enzyme issue with React.useContext
8
- // see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
9
- jest.spyOn(React, "useContext").mockImplementation(() => intl);
10
-
11
5
  describe("<FieldForm />", () => {
12
- it("matches the latest snapshot", () => {
6
+ it("matches the latest snapshot", async () => {
13
7
  const onDelete = jest.fn();
14
8
  const onMove = jest.fn();
15
9
  const onChange = jest.fn();
@@ -26,11 +20,12 @@ describe("<FieldForm />", () => {
26
20
  const fieldIndex = 0;
27
21
  const fieldCount = 1;
28
22
  const props = { field, fieldIndex, fieldCount, onDelete, onMove, onChange };
29
- const { container } = render(<FieldForm {...props} />);
30
- expect(container).toMatchSnapshot();
23
+ const rendered = render(<FieldForm {...props} />);
24
+ await waitForLoad(rendered);
25
+ expect(rendered.container).toMatchSnapshot();
31
26
  });
32
27
 
33
- it("renders a FormInput disabled if editMode and disabled field are true", () => {
28
+ it("renders a FormInput disabled if editMode and disabled field are true", async () => {
34
29
  const onDelete = jest.fn();
35
30
  const onMove = jest.fn();
36
31
  const onChange = jest.fn();
@@ -57,11 +52,14 @@ describe("<FieldForm />", () => {
57
52
  onChange,
58
53
  editMode,
59
54
  };
60
- const wrapper = shallow(<FieldForm {...props} />);
61
- expect(wrapper.find("FormInput").at(1).prop("disabled")).toBe(true);
55
+ const rendered = render(<FieldForm {...props} />);
56
+ await waitForLoad(rendered);
57
+ expect(
58
+ rendered.container.querySelector("input[name='undefined.fields[0].name']")
59
+ ).toHaveAttribute("disabled");
62
60
  });
63
61
 
64
- it("renders ValuesField and manages onChange", () => {
62
+ it("renders ValuesField and manages onChange", async () => {
65
63
  const onDelete = jest.fn();
66
64
  const onMove = jest.fn();
67
65
  const onChange = jest.fn();
@@ -85,25 +83,30 @@ describe("<FieldForm />", () => {
85
83
  onMove,
86
84
  onChange,
87
85
  };
88
- const wrapper = shallow(<FieldForm {...props} />);
89
- expect(wrapper).toMatchSnapshot();
90
- const dropdown = wrapper
91
- .find("ValuesField")
92
- .first()
93
- .dive()
94
- .find("FormDropdown");
95
- dropdown.simulate("change", null, { value: "fixed_tuple" });
96
- expect(onChange).toBeCalledWith(null, {
97
- name: "Group.fields[0].subscribable",
98
- value: false,
99
- });
100
- expect(onChange).toBeCalledWith(null, {
86
+ const rendered = render(<FieldForm {...props} />);
87
+ await waitForLoad(rendered);
88
+ expect(rendered.container).toMatchSnapshot();
89
+
90
+ const user = userEvent.setup({ delay: null });
91
+ const fixedTupleOption = rendered.getByText(
92
+ "template.field.values.fixed_tuple"
93
+ );
94
+ await user.click(fixedTupleOption);
95
+
96
+ expect(onChange).toHaveBeenCalledWith(
97
+ expect.anything(),
98
+ expect.objectContaining({
99
+ name: "Group.fields[0].subscribable",
100
+ value: false,
101
+ })
102
+ );
103
+ expect(onChange).toHaveBeenCalledWith(null, {
101
104
  name: "Group.fields[0].values",
102
105
  value: { fixed_tuple: null },
103
106
  });
104
107
  });
105
108
 
106
- it("manages handleWidgetChange", () => {
109
+ it("manages handleWidgetChange", async () => {
107
110
  const onDelete = jest.fn();
108
111
  const onMove = jest.fn();
109
112
  const onChange = jest.fn();
@@ -127,26 +130,34 @@ describe("<FieldForm />", () => {
127
130
  onMove,
128
131
  onChange,
129
132
  };
130
- const wrapper = shallow(<FieldForm {...props} />);
131
- const widgetDropdown = wrapper.find({ name: "Group.fields[0].widget" });
133
+ const rendered = render(<FieldForm {...props} />);
134
+ await waitForLoad(rendered);
132
135
 
133
- widgetDropdown.simulate("change", null, { value: "string" });
134
- expect(onChange).toBeCalledWith(null, {
136
+ const user = userEvent.setup({ delay: null });
137
+ const stringOption = rendered.getByText("Text Input");
138
+ await user.click(stringOption);
139
+
140
+ expect(onChange).toHaveBeenCalledWith(null, {
135
141
  name: "Group.fields[0].values",
136
142
  value: null,
137
143
  });
138
- expect(onChange).toBeCalledWith(null, {
144
+ expect(onChange).toHaveBeenCalledWith(expect.anything(), {
139
145
  name: "Group.fields[0].default",
140
146
  value: { value: "", origin: "default" },
141
147
  });
142
- expect(onChange).toBeCalledWith(null, {
148
+ expect(onChange).toHaveBeenCalledWith(expect.anything(), {
143
149
  name: "Group.fields[0].subscribable",
144
150
  value: false,
145
151
  });
146
- expect(onChange).toBeCalledWith(null, { value: "string" });
152
+ expect(onChange).toHaveBeenCalledWith(
153
+ expect.anything(),
154
+ expect.objectContaining({
155
+ value: "string",
156
+ })
157
+ );
147
158
  });
148
159
 
149
- it("manages handleTypeChange", () => {
160
+ it("manages handleTypeChange", async () => {
150
161
  const onDelete = jest.fn();
151
162
  const onMove = jest.fn();
152
163
  const onChange = jest.fn();
@@ -170,26 +181,43 @@ describe("<FieldForm />", () => {
170
181
  onMove,
171
182
  onChange,
172
183
  };
173
- const wrapper = shallow(<FieldForm {...props} />);
174
- const typeDropdown = wrapper.find({ name: "Group.fields[0].type" });
184
+ const rendered = render(<FieldForm {...props} />);
185
+ await waitForLoad(rendered);
175
186
 
176
- typeDropdown.simulate("change", null, { value: "string" });
177
- expect(onChange).toBeCalledWith(null, {
178
- name: "Group.fields[0].values",
179
- value: { fixed: null },
180
- });
181
- expect(onChange).toBeCalledWith(null, {
182
- name: "Group.fields[0].default",
183
- value: { value: "", origin: "default" },
184
- });
185
- expect(onChange).toBeCalledWith(null, {
186
- name: "Group.fields[0].subscribable",
187
- value: false,
188
- });
189
- expect(onChange).toBeCalledWith(null, { value: "string" });
187
+ const user = userEvent.setup({ delay: null });
188
+ const stringOption = rendered.getByText("template.field.type.string");
189
+ await user.click(stringOption);
190
+
191
+ expect(onChange).toHaveBeenCalledWith(
192
+ null,
193
+ expect.objectContaining({
194
+ name: "Group.fields[0].values",
195
+ value: { fixed: null },
196
+ })
197
+ );
198
+ expect(onChange).toHaveBeenCalledWith(
199
+ expect.anything(),
200
+ expect.objectContaining({
201
+ name: "Group.fields[0].default",
202
+ value: { value: "", origin: "default" },
203
+ })
204
+ );
205
+ expect(onChange).toHaveBeenCalledWith(
206
+ expect.anything(),
207
+ expect.objectContaining({
208
+ name: "Group.fields[0].subscribable",
209
+ value: false,
210
+ })
211
+ );
212
+ expect(onChange).toHaveBeenCalledWith(
213
+ expect.anything(),
214
+ expect.objectContaining({
215
+ value: "string",
216
+ })
217
+ );
190
218
  });
191
219
 
192
- it("renders MandatoryConditional", () => {
220
+ it("renders MandatoryConditional", async () => {
193
221
  const allFields = [
194
222
  {
195
223
  name: "foo",
@@ -239,13 +267,15 @@ describe("<FieldForm />", () => {
239
267
  onMove,
240
268
  onChange,
241
269
  };
242
- const wrapper = shallow(<FieldForm {...props} />);
243
- expect(wrapper).toMatchSnapshot();
244
- const MandatoryConditional = wrapper.find("MandatoryConditional").first();
245
- expect(MandatoryConditional).toBeTruthy();
270
+ const rendered = render(<FieldForm {...props} />);
271
+ await waitForLoad(rendered);
272
+ expect(rendered.container).toMatchSnapshot();
273
+ expect(
274
+ rendered.getByText(/template.field.mandatory.depends.to_be/i)
275
+ ).toBeInTheDocument();
246
276
  });
247
277
 
248
- it("manages handleCardinalityChange", () => {
278
+ it("manages handleCardinalityChange", async () => {
249
279
  const allFields = [
250
280
  {
251
281
  name: "foo",
@@ -280,6 +310,7 @@ describe("<FieldForm />", () => {
280
310
  const field = {
281
311
  name: "name",
282
312
  label: "Name",
313
+ widget: "dropdown",
283
314
  mandatory: { on: "bar", to_be: ["3"] },
284
315
  cardinality: "?",
285
316
  };
@@ -295,20 +326,23 @@ describe("<FieldForm />", () => {
295
326
  onMove,
296
327
  onChange,
297
328
  };
298
- const wrapper = shallow(<FieldForm {...props} />);
299
- expect(wrapper).toMatchSnapshot();
300
- const CardinalityDropdown = wrapper.find({
301
- name: "Group.fields[0].cardinality",
302
- });
303
- CardinalityDropdown.simulate("change", null, {
304
- name: "Group.fields[0].cardinality",
305
- value: "1",
306
- });
307
- expect(onChange.mock.calls[0][1]).toEqual({
308
- name: "Group.fields[0].cardinality",
309
- value: "1",
329
+ const rendered = render(<FieldForm {...props} />);
330
+ await waitForLoad(rendered);
331
+
332
+ const user = userEvent.setup({ delay: null });
333
+ const oneOption = rendered.getByRole("option", {
334
+ name: "template.field.cardinality.1",
310
335
  });
311
- expect(onChange.mock.calls[1][1]).toEqual({
336
+ await user.click(oneOption);
337
+
338
+ expect(onChange).toHaveBeenCalledWith(
339
+ expect.anything(),
340
+ expect.objectContaining({
341
+ name: "Group.fields[0].cardinality",
342
+ value: "1",
343
+ })
344
+ );
345
+ expect(onChange).toHaveBeenCalledWith(expect.anything(), {
312
346
  name: "Group.fields[0].mandatory",
313
347
  value: null,
314
348
  });
@@ -1,18 +1,12 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
3
- import { intl } from "@truedat/test/intl-stub";
1
+ import { render, waitForLoad } from "@truedat/test/render";
4
2
  import { GroupsList } from "../GroupsList";
5
3
 
6
- // workaround for enzyme issue with React.useContext
7
- // see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
8
- jest.spyOn(React, "useContext").mockImplementation(() => intl);
9
-
10
4
  describe("<GroupsList />", () => {
11
- it("matches the latest snapshot", () => {
5
+ it("matches the latest snapshot", async () => {
12
6
  const groups = [
13
7
  { name: "group1", fields: [] },
14
8
  { name: "group2", fields: [] },
15
- { name: "group3", fields: [] }
9
+ { name: "group3", fields: [] },
16
10
  ];
17
11
  const activeGroup = 1;
18
12
  const onAddGroup = jest.fn();
@@ -21,9 +15,10 @@ describe("<GroupsList />", () => {
21
15
  groups,
22
16
  activeGroup,
23
17
  onAddGroup,
24
- onSelectGroup
18
+ onSelectGroup,
25
19
  };
26
- const wrapper = shallow(<GroupsList {...props} />);
27
- expect(wrapper).toMatchSnapshot();
20
+ const rendered = render(<GroupsList {...props} />);
21
+ await waitForLoad(rendered);
22
+ expect(rendered.container).toMatchSnapshot();
28
23
  });
29
24
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
2
  import userEvent from "@testing-library/user-event";
4
3
  import { render } from "@truedat/test/render";
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { shallowWithIntl } from "@truedat/test/intl-stub";
3
- import { SwitchListForm } from "../SwitchListForm";
1
+ import userEvent from "@testing-library/user-event";
2
+ import { render, waitForLoad } from "@truedat/test/render";
3
+ import SwitchListForm from "../SwitchListForm";
4
4
 
5
5
  describe("<SwitchListForm />", () => {
6
- it("matches the latest snapshot for null values", () => {
6
+ it("matches the latest snapshot for null values", async () => {
7
7
  const values = {
8
8
  on: "test",
9
9
  values: {
@@ -17,11 +17,13 @@ describe("<SwitchListForm />", () => {
17
17
  onChange,
18
18
  };
19
19
 
20
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
21
- expect(wrapper).toMatchSnapshot();
20
+ const rendered = render(<SwitchListForm {...props} />);
21
+ await waitForLoad(rendered);
22
+ expect(rendered.container).toMatchSnapshot();
22
23
  });
23
24
 
24
- it("test change field on", () => {
25
+ it("test change field on", async () => {
26
+ const user = userEvent.setup({ delay: null });
25
27
  const values = {
26
28
  on: "test",
27
29
  values: {
@@ -34,14 +36,18 @@ describe("<SwitchListForm />", () => {
34
36
  values,
35
37
  onChange,
36
38
  };
37
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
39
+ const rendered = render(<SwitchListForm {...props} />);
40
+ await waitForLoad(rendered);
38
41
 
39
- const input = wrapper.find("FormInput").at(0);
40
- input.simulate("change", null, { value: "Test" });
41
- expect(onChange).toBeCalledWith({ ...values, on: "Test" });
42
+ const input = rendered.getByPlaceholderText(
43
+ /template.field.values.switch_field/i
44
+ );
45
+ await user.type(input, "1");
46
+ expect(onChange).toHaveBeenCalledWith({ ...values, on: "test1" });
42
47
  });
43
48
 
44
- it("test remove value", () => {
49
+ it("test remove value", async () => {
50
+ const user = userEvent.setup({ delay: null });
45
51
  const values = {
46
52
  on: "test",
47
53
  values: {
@@ -54,18 +60,21 @@ describe("<SwitchListForm />", () => {
54
60
  values,
55
61
  onChange,
56
62
  };
57
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
58
- const deleteButton = wrapper
59
- .find("SwitchSegment")
60
- .at(0)
61
- .dive()
62
- .find("Icon")
63
- .at(0);
64
- deleteButton.simulate("click");
65
- expect(onChange).toBeCalledWith({ ...values, values: { b: ["3", "4"] } });
63
+ const rendered = render(<SwitchListForm {...props} />);
64
+ await waitForLoad(rendered);
65
+
66
+ const deleteButton = rendered.container.querySelectorAll(
67
+ ".remove.circle.link.icon"
68
+ )[0];
69
+ await user.click(deleteButton);
70
+ expect(onChange).toHaveBeenCalledWith({
71
+ ...values,
72
+ values: { b: ["3", "4"] },
73
+ });
66
74
  });
67
75
 
68
- it("test change list value", () => {
76
+ it("test change list value", async () => {
77
+ const user = userEvent.setup({ delay: null });
69
78
  const values = {
70
79
  on: "test",
71
80
  values: {
@@ -78,21 +87,26 @@ describe("<SwitchListForm />", () => {
78
87
  values,
79
88
  onChange,
80
89
  };
81
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
82
- const SwitchSegment = wrapper.find("SwitchSegment").at(0).dive();
83
- SwitchSegment.findWhere((n) => n.prop("type"))
84
- .at(0)
85
- .prop("onChange")(["5"]);
86
- expect(onChange).toBeCalledWith({
90
+ const rendered = render(<SwitchListForm {...props} />);
91
+ await waitForLoad(rendered);
92
+
93
+ const valueInput = rendered.getAllByPlaceholderText(
94
+ /template.field.values.add_value/i
95
+ )[0];
96
+ await user.clear(valueInput);
97
+ await user.type(valueInput, "5{enter}");
98
+
99
+ expect(onChange).toHaveBeenCalledWith({
87
100
  ...values,
88
101
  values: {
89
- a: ["5"],
102
+ a: ["1", "2", "5"],
90
103
  b: ["3", "4"],
91
104
  },
92
105
  });
93
106
  });
94
107
 
95
- it("test add new value", () => {
108
+ it("test add new value", async () => {
109
+ const user = userEvent.setup({ delay: null });
96
110
  const values = {
97
111
  on: "test",
98
112
  values: {
@@ -105,16 +119,16 @@ describe("<SwitchListForm />", () => {
105
119
  values,
106
120
  onChange,
107
121
  };
108
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
109
-
110
- const input = wrapper.find("FormInput").at(1);
111
- input.simulate("change", null, { value: "Test" });
122
+ const rendered = render(<SwitchListForm {...props} />);
123
+ await waitForLoad(rendered);
112
124
 
113
- const input2 = wrapper.find("FormInput").at(1);
114
- expect(input2.props().value).toBe("Test");
115
- input2.simulate("keyPress", { key: "Enter" });
125
+ const newValueInput = rendered.container.querySelector(
126
+ "input[placeholder='template.field.values.add_switch_value']"
127
+ );
128
+ await user.type(newValueInput, "Test");
129
+ await user.keyboard("{Enter}");
116
130
 
117
- expect(onChange).toBeCalledWith({
131
+ expect(onChange).toHaveBeenCalledWith({
118
132
  ...values,
119
133
  values: {
120
134
  Test: [],
@@ -124,7 +138,8 @@ describe("<SwitchListForm />", () => {
124
138
  });
125
139
  });
126
140
 
127
- it("test input error", () => {
141
+ it("test input error", async () => {
142
+ const user = userEvent.setup({ delay: null });
128
143
  const values = {
129
144
  on: "test",
130
145
  values: {
@@ -137,21 +152,27 @@ describe("<SwitchListForm />", () => {
137
152
  values,
138
153
  onChange,
139
154
  };
140
- const wrapper = shallowWithIntl(<SwitchListForm {...props} />);
155
+ const rendered = render(<SwitchListForm {...props} />);
156
+ await waitForLoad(rendered);
141
157
 
142
- const input = wrapper.find("FormInput").at(1);
143
- input.simulate("change", null, { value: "a" });
158
+ const newValueInput = rendered.getByPlaceholderText(
159
+ /template.field.values.add_switch_value/i
160
+ );
161
+ await user.type(newValueInput, "a");
144
162
 
145
- const input2 = wrapper.find("FormInput").at(1);
146
- expect(input2.props().value).toBe("a");
147
- expect(input2.props().error).toBe(true);
148
- input2.simulate("keyPress", { key: "Enter" });
163
+ const field = newValueInput.parentElement.parentElement;
164
+ // Check for error state
165
+ expect(field.classList.contains("error")).toBe(true);
149
166
 
167
+ // Try to submit with error
168
+ await user.keyboard("{Enter}");
150
169
  expect(onChange).not.toHaveBeenCalled();
151
170
 
152
- input2.simulate("change", null, { value: "aa" });
153
- const input3 = wrapper.find("FormInput").at(1);
154
- expect(input3.props().value).toBe("aa");
155
- expect(input3.props().error).toBe(false);
171
+ // Fix the error
172
+ await user.clear(newValueInput);
173
+ await user.type(newValueInput, "aa");
174
+
175
+ // Check error is gone
176
+ expect(field.classList.contains("error")).toBe(false);
156
177
  });
157
178
  });
@@ -1,7 +1,5 @@
1
- import React from "react";
2
- import { waitFor } from "@testing-library/react";
3
1
  import userEvent from "@testing-library/user-event";
4
- import { render } from "@truedat/test/render";
2
+ import { render, waitForLoad } from "@truedat/test/render";
5
3
  import { SwitchSegment } from "../SwitchSegment";
6
4
 
7
5
  describe("<SwitchSegment />", () => {
@@ -23,79 +21,56 @@ describe("<SwitchSegment />", () => {
23
21
  value,
24
22
  title,
25
23
  };
26
- const renderOpts = {
27
- messages: {
28
- en: {
29
- "template.field.values.default.omit": "omit",
30
- "template.field.values.default": "default",
31
- "template.field.values.add_value": "add",
32
- "template.field.values.add_value.label": "List value",
33
- "template.field.values.add_text": "add text",
34
- "template.field.values.add_format": "add format",
35
- "template.field.values.add_file_config": "file config",
36
- "template.widget.copy.char.separator.format": "separator",
37
- "template.widget.copy.without.fixed.column": "column",
38
- "template.widget.copy.fixed.column": "fixed column",
39
- },
40
- },
41
- };
42
24
 
43
- it("matches the latest snapshot", () => {
44
- const { container } = render(<SwitchSegment {...props} />, renderOpts);
45
- expect(container).toMatchSnapshot();
25
+ it("matches the latest snapshot", async () => {
26
+ const rendered = render(<SwitchSegment {...props} />);
27
+ await waitForLoad(rendered);
28
+ expect(rendered.container).toMatchSnapshot();
46
29
  });
47
30
 
48
31
  it("handles onDefaultValueChange addition", async () => {
49
- const { findByText, container } = render(
50
- <SwitchSegment {...props} />,
51
- renderOpts
52
- );
53
- await waitFor(() => {
54
- expect(findByText(/foo/)).toBeTruthy();
55
- });
32
+ const rendered = render(<SwitchSegment {...props} />);
33
+ await waitForLoad(rendered);
56
34
 
57
- await waitFor(() => {
58
- expect(findByText(/bar/)).toBeTruthy();
59
- });
35
+ expect(rendered.getByText(/foo/i)).toBeInTheDocument();
36
+ expect(rendered.getByText(/bar/i)).toBeInTheDocument();
37
+ expect(rendered.getByText(/baz/i)).toBeInTheDocument();
60
38
 
61
- await waitFor(() => {
62
- expect(findByText(/baz/)).toBeTruthy();
63
- });
64
-
65
- await waitFor(() => {
66
- userEvent.click(
67
- container.querySelectorAll('[class="circle outline link icon"]')[0]
68
- );
69
- expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "foo" });
70
- });
39
+ const user = userEvent.setup({ delay: null });
40
+ await user.click(
41
+ rendered.container.querySelectorAll(
42
+ '[class="circle outline link icon"]'
43
+ )[0]
44
+ );
45
+ expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "foo" });
71
46
 
72
- await waitFor(() => {
73
- userEvent.click(
74
- container.querySelectorAll('[class="circle outline link icon"]')[1]
75
- );
76
- expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "bar" });
77
- });
47
+ await user.click(
48
+ rendered.container.querySelectorAll(
49
+ '[class="circle outline link icon"]'
50
+ )[1]
51
+ );
52
+ expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "bar" });
78
53
 
79
- await waitFor(() => {
80
- userEvent.click(
81
- container.querySelectorAll('[class="circle outline link icon"]')[2]
82
- );
83
- expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "baz" });
84
- });
54
+ await user.click(
55
+ rendered.container.querySelectorAll(
56
+ '[class="circle outline link icon"]'
57
+ )[2]
58
+ );
59
+ expect(onDefaultValueChange).toHaveBeenCalledWith({ 1: "baz" });
85
60
  });
86
61
 
87
62
  it("handles onDefaultValueChange removal", async () => {
88
63
  onDefaultValueChange.mockClear();
89
64
  const updatedProps = { ...props, defaultValue: { 1: "foo" } };
90
- const { container } = render(
91
- <SwitchSegment {...updatedProps} />,
92
- renderOpts
65
+ const rendered = render(<SwitchSegment {...updatedProps} />);
66
+ await waitForLoad(rendered);
67
+
68
+ const user = userEvent.setup({ delay: null });
69
+ await user.click(
70
+ rendered.container.querySelector(
71
+ '[class="check circle outline link icon"]'
72
+ )
93
73
  );
94
- await waitFor(() => {
95
- userEvent.click(
96
- container.querySelector('[class="check circle outline link icon"]')
97
- );
98
- });
99
74
  expect(onDefaultValueChange).toHaveBeenCalledWith({});
100
75
  });
101
76
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import TemplateForm from "../TemplateForm";
4
3