@reltio/components 1.4.1906 → 1.4.1907

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 (97) hide show
  1. package/cjs/ActionsPanel/ActionsPanel.test.js +133 -49
  2. package/cjs/AttributeListItem/AttributeListItem.spec.js +147 -118
  3. package/cjs/AttributeSelector/AttributeSelector.specs.js +125 -193
  4. package/cjs/AttributesErrorsPanel/AttributesErrorsPanel.specs.js +128 -71
  5. package/cjs/AttributesErrorsPanel/components/Error/Error.specs.js +96 -90
  6. package/cjs/AttributesErrorsPanel/store.test-data.d.ts +22 -0
  7. package/cjs/AttributesErrorsPanel/store.test-data.js +29 -0
  8. package/cjs/AttributesFilterSelector/AttributesFilterSelector.test.js +127 -105
  9. package/cjs/AttributesFiltersButton/AttributesFiltersButton.test.js +218 -136
  10. package/cjs/AttributesValuesEditor/AttributesValuesEditor.test.js +92 -88
  11. package/cjs/AttributesView/AttributesView.test.js +67 -34
  12. package/cjs/AutoSizeList/AutoSizeList.test.js +81 -59
  13. package/cjs/{ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.js → AvatarWithFallback/AvatarWithFallback.test.js} +15 -31
  14. package/cjs/BarChart/BarChart.test.js +128 -65
  15. package/cjs/BasicAttributeSelector/BasicAttributeSelector.spec.js +27 -10
  16. package/cjs/BasicViewContent/BasicViewContent.test.js +7 -9
  17. package/cjs/BlobRenderer/BlobRenderer.test.js +28 -9
  18. package/cjs/BooleanRadioEditor/BooleanRadioEditor.test.js +89 -35
  19. package/cjs/BubbleChart/BubbleChart.test.js +111 -87
  20. package/cjs/CloudChart/CloudChart.test.js +95 -36
  21. package/cjs/CollaborationItem/CollaborationItem.test.js +67 -30
  22. package/cjs/CollaborationItem/components/Comment/Comment.test.js +221 -189
  23. package/cjs/CollaborationItem/components/CommentContent/CommentContent.test.js +46 -81
  24. package/cjs/CollaborationItem/components/RepliedComment/RepliedComment.test.js +194 -163
  25. package/cjs/CollaborationItem/components/SendMessageArea/SendMessageArea.test.js +307 -266
  26. package/cjs/CollapseButton/CollapseButton.test.js +74 -15
  27. package/cjs/CollapseRowButton/CollapseRowButton.test.js +82 -24
  28. package/cjs/ColorBar/ColorBar.test.js +13 -15
  29. package/cjs/ColumnsSettings/components/ColumnsSettingsPopup/ColumnsSettingsPopup.spec.js +207 -129
  30. package/cjs/CommentsContainer/CommentsContainer.test.js +282 -211
  31. package/cjs/CommentsContainer/components/CollaborationPopup/CollaborationPopup.test.js +183 -122
  32. package/cjs/ConfigureColumnsPopup/ConfigureColumnsPopup.test.js +42 -41
  33. package/cjs/ConfirmDeleteDialog/ConfirmDeleteDialog.test.js +77 -28
  34. package/cjs/ConfirmationDialog/ConfirmationDialog.test.js +85 -48
  35. package/cjs/ConnectionEditor/ConnectionEditor.test.js +299 -282
  36. package/esm/ActionsPanel/ActionsPanel.test.js +133 -49
  37. package/esm/AttributeListItem/AttributeListItem.spec.js +149 -97
  38. package/esm/AttributeSelector/AttributeSelector.specs.js +125 -193
  39. package/esm/AttributesErrorsPanel/AttributesErrorsPanel.specs.js +128 -71
  40. package/esm/AttributesErrorsPanel/components/Error/Error.specs.js +98 -72
  41. package/esm/AttributesErrorsPanel/store.test-data.d.ts +22 -0
  42. package/esm/AttributesErrorsPanel/store.test-data.js +26 -0
  43. package/esm/AttributesFilterSelector/AttributesFilterSelector.test.js +129 -84
  44. package/esm/AttributesFiltersButton/AttributesFiltersButton.test.js +218 -136
  45. package/esm/AttributesValuesEditor/AttributesValuesEditor.test.js +94 -67
  46. package/esm/AttributesView/AttributesView.test.js +67 -34
  47. package/esm/AutoSizeList/AutoSizeList.test.js +81 -59
  48. package/esm/{ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.js → AvatarWithFallback/AvatarWithFallback.test.js} +16 -32
  49. package/esm/BarChart/BarChart.test.js +128 -65
  50. package/esm/BasicAttributeSelector/BasicAttributeSelector.spec.js +27 -10
  51. package/esm/BasicViewContent/BasicViewContent.test.js +7 -9
  52. package/esm/BlobRenderer/BlobRenderer.test.js +28 -9
  53. package/esm/BooleanRadioEditor/BooleanRadioEditor.test.js +89 -35
  54. package/esm/BubbleChart/BubbleChart.test.js +111 -87
  55. package/esm/CloudChart/CloudChart.test.js +95 -36
  56. package/esm/CollaborationItem/CollaborationItem.test.js +67 -30
  57. package/esm/CollaborationItem/components/Comment/Comment.test.js +221 -189
  58. package/esm/CollaborationItem/components/CommentContent/CommentContent.test.js +46 -58
  59. package/esm/CollaborationItem/components/RepliedComment/RepliedComment.test.js +194 -163
  60. package/esm/CollaborationItem/components/SendMessageArea/SendMessageArea.test.js +307 -266
  61. package/esm/CollapseButton/CollapseButton.test.js +74 -15
  62. package/esm/CollapseRowButton/CollapseRowButton.test.js +82 -24
  63. package/esm/ColorBar/ColorBar.test.js +13 -15
  64. package/esm/ColumnsSettings/components/ColumnsSettingsPopup/ColumnsSettingsPopup.spec.js +207 -129
  65. package/esm/CommentsContainer/CommentsContainer.test.js +282 -211
  66. package/esm/CommentsContainer/components/CollaborationPopup/CollaborationPopup.test.js +182 -101
  67. package/esm/ConfigureColumnsPopup/ConfigureColumnsPopup.test.js +42 -41
  68. package/esm/ConfirmDeleteDialog/ConfirmDeleteDialog.test.js +77 -28
  69. package/esm/ConfirmationDialog/ConfirmationDialog.test.js +85 -48
  70. package/esm/ConnectionEditor/ConnectionEditor.test.js +300 -283
  71. package/package.json +1 -1
  72. package/cjs/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.js +0 -100
  73. package/cjs/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.d.ts +0 -1
  74. package/cjs/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.js +0 -46
  75. package/cjs/AvatarWithFallback/AvatarWithFallback.specs.d.ts +0 -1
  76. package/cjs/AvatarWithFallback/AvatarWithFallback.specs.js +0 -27
  77. package/cjs/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.d.ts +0 -1
  78. package/cjs/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.js +0 -27
  79. package/cjs/CollaborationItem/components/Avatar/Avatar.test.d.ts +0 -1
  80. package/cjs/CollaborationItem/components/Avatar/Avatar.test.js +0 -15
  81. package/cjs/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.d.ts +0 -1
  82. package/cjs/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.js +0 -80
  83. package/esm/ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.d.ts +0 -1
  84. package/esm/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.d.ts +0 -1
  85. package/esm/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.js +0 -95
  86. package/esm/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.d.ts +0 -1
  87. package/esm/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.js +0 -41
  88. package/esm/AvatarWithFallback/AvatarWithFallback.specs.d.ts +0 -1
  89. package/esm/AvatarWithFallback/AvatarWithFallback.specs.js +0 -22
  90. package/esm/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.d.ts +0 -1
  91. package/esm/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.js +0 -22
  92. package/esm/CollaborationItem/components/Avatar/Avatar.test.d.ts +0 -1
  93. package/esm/CollaborationItem/components/Avatar/Avatar.test.js +0 -10
  94. package/esm/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.d.ts +0 -1
  95. package/esm/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.js +0 -55
  96. /package/cjs/{ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.d.ts → AvatarWithFallback/AvatarWithFallback.test.d.ts} +0 -0
  97. /package/{cjs/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.d.ts → esm/AvatarWithFallback/AvatarWithFallback.test.d.ts} +0 -0
@@ -46,227 +46,159 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  }
47
47
  };
48
48
  import React from 'react';
49
- import { act } from 'react-dom/test-utils';
50
- import { mount } from 'enzyme';
51
- import TextField from '@mui/material/TextField';
52
- import Typography from '@mui/material/Typography';
53
49
  import { AttributeSelector } from './AttributeSelector';
54
- import { MultiSelect } from '../MultiSelect';
55
- import { awaitMockPromises } from '../test-utils';
50
+ import { getMuiIconByName } from '../test-utils';
56
51
  import { MdmModuleProvider } from '../contexts/MdmModuleContext';
57
- var attributes = [
58
- {
59
- label: 'Activity',
60
- name: 'activitywith',
61
- description: 'Activity',
62
- type: 'Reference',
63
- hidden: false,
64
- important: false,
65
- system: false,
66
- searchable: true,
67
- relationshipLabelPattern: '{Name}',
68
- uri: 'configuration/entityTypes/HCP/attributes/activitywith',
69
- referencedAttributeURIs: ['configuration/relationTypes/HasAddress/attributes/AddressType']
70
- },
71
- {
72
- label: 'ActivityTest',
73
- name: 'activitywithTest',
74
- description: 'Activity',
75
- type: 'String',
76
- hidden: false,
77
- important: false,
78
- system: false,
79
- searchable: true,
80
- relationshipLabelPattern: '{Name}',
81
- uri: 'configuration/entityTypes/HCP/attributes/activitywithTest'
82
- }
83
- ];
84
- var metadata = {
85
- entityTypes: [
52
+ import { render, screen } from '@testing-library/react';
53
+ import userEvent from '@testing-library/user-event';
54
+ describe('AttributeSelector tests', function () {
55
+ var attributes = [
86
56
  {
87
- uri: 'configuration/entityTypes/Contact',
88
- label: 'Contact',
89
- attributes: attributes
90
- }
91
- ],
92
- relationTypes: [
57
+ label: 'Activity',
58
+ name: 'activitywith',
59
+ type: 'Reference',
60
+ hidden: false,
61
+ uri: 'configuration/entityTypes/HCP/attributes/activitywith',
62
+ referencedAttributeURIs: ['configuration/relationTypes/HasAddress/attributes/AddressType']
63
+ },
93
64
  {
94
- label: 'Relation',
95
- name: 'relation',
96
- description: 'Activity',
65
+ label: 'ActivityTest',
66
+ name: 'activitywithTest',
97
67
  type: 'String',
98
68
  hidden: false,
99
- important: false,
100
- system: false,
101
- searchable: true,
102
- relationshipLabelPattern: '{Name}',
103
- uri: 'configuration/relationTypes/HasAddress',
104
- attributes: [
105
- {
106
- label: 'AddressType',
107
- name: 'relation',
108
- description: 'Activity',
109
- type: 'String',
110
- hidden: false,
111
- important: false,
112
- system: false,
113
- searchable: true,
114
- relationshipLabelPattern: '{Name}',
115
- uri: 'configuration/relationTypes/HasAddress/attributes/AddressType'
116
- }
117
- ]
69
+ uri: 'configuration/entityTypes/HCP/attributes/activitywithTest'
70
+ },
71
+ {
72
+ label: 'ActivityHidden',
73
+ name: 'activityHidden',
74
+ type: 'String',
75
+ hidden: true,
76
+ uri: 'configuration/entityTypes/HCP/attributes/activityHidden'
118
77
  }
119
- ]
120
- };
121
- var defaultProps = {
122
- entityType: {
123
- uri: 'configuration/entityTypes/Contact',
124
- label: 'Contact',
125
- attributes: attributes
126
- },
127
- selectedAttributes: [],
128
- onChange: jest.fn(),
129
- className: 'someclass'
130
- };
131
- var setUp = function (props) {
132
- if (props === void 0) { props = defaultProps; }
133
- return mount(React.createElement(MdmModuleProvider, { values: { metadata: metadata } },
134
- React.createElement(AttributeSelector, __assign({}, props))));
135
- };
136
- describe('AttributeSelector tests', function () {
78
+ ];
79
+ var metadata = {
80
+ entityTypes: [
81
+ {
82
+ uri: 'configuration/entityTypes/Contact',
83
+ label: 'Contact',
84
+ attributes: attributes
85
+ }
86
+ ],
87
+ relationTypes: [
88
+ {
89
+ label: 'Relation',
90
+ name: 'relation',
91
+ type: 'String',
92
+ hidden: false,
93
+ uri: 'configuration/relationTypes/HasAddress',
94
+ attributes: [
95
+ {
96
+ label: 'AddressType',
97
+ name: 'relation',
98
+ type: 'String',
99
+ hidden: false,
100
+ uri: 'configuration/relationTypes/HasAddress/attributes/AddressType'
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ };
106
+ var defaultProps = {
107
+ entityType: {
108
+ uri: 'configuration/entityTypes/Contact',
109
+ label: 'Contact',
110
+ attributes: attributes
111
+ },
112
+ selectedAttributes: [],
113
+ onChange: jest.fn(),
114
+ className: 'someclass'
115
+ };
116
+ var setUp = function (props) {
117
+ if (props === void 0) { props = defaultProps; }
118
+ var Providers = function (_a) {
119
+ var children = _a.children;
120
+ return (React.createElement(MdmModuleProvider, { values: { metadata: metadata } }, children));
121
+ };
122
+ var user = userEvent.setup();
123
+ return __assign({ user: user }, render(React.createElement(AttributeSelector, __assign({}, props)), { wrapper: Providers }));
124
+ };
137
125
  it('should render correct default state', function () { return __awaiter(void 0, void 0, void 0, function () {
138
- var attributeOptions, props, wrapper, title;
126
+ var user;
127
+ return __generator(this, function (_a) {
128
+ switch (_a.label) {
129
+ case 0:
130
+ user = setUp(__assign(__assign({}, defaultProps), { title: 'sometitle' })).user;
131
+ expect(screen.getByText('sometitle')).toBeInTheDocument();
132
+ expect(document.querySelector('.MuiInput-underline')).toBeInTheDocument();
133
+ return [4 /*yield*/, user.click(getMuiIconByName('ArrowDropDown'))];
134
+ case 1:
135
+ _a.sent();
136
+ expect(screen.getByText('ActivityTest')).toBeInTheDocument();
137
+ expect(screen.getByText('Activity')).toBeInTheDocument();
138
+ expect(screen.getByText('AddressType')).toBeInTheDocument();
139
+ return [2 /*return*/];
140
+ }
141
+ });
142
+ }); });
143
+ it('should render default title if props.title is not defined', function () {
144
+ setUp();
145
+ expect(screen.getByText('Attribute')).toBeInTheDocument();
146
+ });
147
+ it('should render TextField with disableUnderline if props.disableUnderline is true', function () {
148
+ setUp(__assign(__assign({}, defaultProps), { disableUnderline: true }));
149
+ expect(document.querySelector('.MuiInput-underline')).not.toBeInTheDocument();
150
+ });
151
+ it('should call onChange when new attribute is selected', function () { return __awaiter(void 0, void 0, void 0, function () {
152
+ var newAttributes, onChangeSpy, user;
139
153
  return __generator(this, function (_a) {
140
154
  switch (_a.label) {
141
155
  case 0:
142
- attributeOptions = [
156
+ newAttributes = [
143
157
  {
144
158
  label: 'Activity',
145
159
  value: 'configuration/entityTypes/HCP/attributes/activitywith',
146
160
  attrType: attributes[0],
147
161
  chipLabel: 'Activity',
148
162
  level: 0
149
- },
150
- {
151
- label: 'AddressType',
152
- value: 'configuration/relationTypes/HasAddress/attributes/AddressType',
153
- attrType: __assign(__assign({}, attributes[1]), { label: 'AddressType', name: 'relation', uri: 'configuration/relationTypes/HasAddress/attributes/AddressType' }),
154
- chipLabel: 'Activity / AddressType',
155
- level: 1
156
- },
157
- {
158
- label: 'ActivityTest',
159
- value: 'configuration/entityTypes/HCP/attributes/activitywithTest',
160
- attrType: attributes[1],
161
- chipLabel: 'ActivityTest',
162
- level: 0
163
163
  }
164
164
  ];
165
- props = __assign(__assign({}, defaultProps), { title: 'sometitle' });
166
- wrapper = setUp(props);
167
- return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
168
- return __generator(this, function (_a) {
169
- switch (_a.label) {
170
- case 0: return [4 /*yield*/, awaitMockPromises()];
171
- case 1:
172
- _a.sent();
173
- return [2 /*return*/];
174
- }
175
- });
176
- }); })];
165
+ onChangeSpy = jest.fn();
166
+ user = setUp(__assign(__assign({}, defaultProps), { onChange: onChangeSpy })).user;
167
+ return [4 /*yield*/, user.click(getMuiIconByName('ArrowDropDown'))];
177
168
  case 1:
178
169
  _a.sent();
179
- wrapper.update();
180
- expect(wrapper.find('.root').prop('className')).toContain(props.className);
181
- title = wrapper.find(Typography).filterWhere(function (component) { return component.prop('className') === 'title'; });
182
- expect(title.text()).toBe(props.title);
183
- expect(wrapper.find(MultiSelect).length).toBe(1);
184
- expect(wrapper.find(MultiSelect).prop('menuPlacement')).toBe('bottom');
185
- expect(wrapper.find(MultiSelect).prop('menuPortalTarget')).toBe(document.body);
186
- expect(wrapper.find('Select').prop('options')).toStrictEqual(attributeOptions);
187
- expect(wrapper.find(TextField).prop('InputProps')['disableUnderline']).toBeUndefined();
170
+ return [4 /*yield*/, user.click(screen.getByText('Activity'))];
171
+ case 2:
172
+ _a.sent();
173
+ expect(onChangeSpy).toHaveBeenCalledWith(newAttributes);
188
174
  return [2 /*return*/];
189
175
  }
190
176
  });
191
177
  }); });
192
- it('should render default title if props.title is not defined', function () { return __awaiter(void 0, void 0, void 0, function () {
193
- var wrapper, title;
194
- return __generator(this, function (_a) {
195
- wrapper = setUp();
196
- title = wrapper.find(Typography).filterWhere(function (component) { return component.prop('className') === 'title'; });
197
- expect(title.text()).toBe('Attribute');
198
- return [2 /*return*/];
199
- });
200
- }); });
201
- it('should render TextField with disableUnderline if props.disableUnderline is true', function () { return __awaiter(void 0, void 0, void 0, function () {
202
- var props, wrapper;
203
- return __generator(this, function (_a) {
204
- props = __assign(__assign({}, defaultProps), { disableUnderline: true });
205
- wrapper = setUp(props);
206
- expect(wrapper.find(TextField).prop('InputProps')['disableUnderline']).toBeTruthy();
207
- return [2 /*return*/];
208
- });
209
- }); });
210
- it('should render MultiSelect with proper placement from props.menuPlacement', function () { return __awaiter(void 0, void 0, void 0, function () {
211
- var props, wrapper;
178
+ it('should render correctly if props.entityType is null', function () { return __awaiter(void 0, void 0, void 0, function () {
179
+ var user;
212
180
  return __generator(this, function (_a) {
213
- props = __assign(__assign({}, defaultProps), { menuPlacement: 'top' });
214
- wrapper = setUp(props);
215
- expect(wrapper.find(MultiSelect).prop('menuPlacement')).toBe('top');
216
- return [2 /*return*/];
181
+ switch (_a.label) {
182
+ case 0:
183
+ user = setUp(__assign(__assign({}, defaultProps), { entityType: null })).user;
184
+ return [4 /*yield*/, user.click(getMuiIconByName('ArrowDropDown'))];
185
+ case 1:
186
+ _a.sent();
187
+ expect(screen.queryByRole('menuitem')).not.toBeInTheDocument();
188
+ return [2 /*return*/];
189
+ }
217
190
  });
218
191
  }); });
219
- it('should call onChange when new user is selected', function () {
220
- var newAttributes = [
221
- {
222
- label: 'Activity',
223
- value: 'configuration/entityTypes/HCP/attributes/activitywith',
224
- attrType: {
192
+ it('render selected attributes correctlry', function () {
193
+ setUp(__assign(__assign({}, defaultProps), { selectedAttributes: [
194
+ {
225
195
  label: 'Activity',
226
- name: 'activitywith',
227
- description: 'Activity',
228
- type: 'String',
229
- hidden: false,
230
- important: false,
231
- system: false,
232
- searchable: true,
233
- relationshipLabelPattern: '{Name}',
234
- uri: 'configuration/entityTypes/HCP/attributes/activitywith'
235
- },
236
- chipLabel: 'Activity',
237
- level: 0
238
- },
239
- {
240
- label: 'ActivityTest',
241
- value: 'configuration/entityTypes/HCP/attributes/activitywithTest',
242
- attrType: {
243
- label: 'ActivityTest',
244
- name: 'activitywithTest',
245
- description: 'Activity',
246
- type: 'String',
247
- hidden: false,
248
- important: false,
249
- system: false,
250
- searchable: true,
251
- relationshipLabelPattern: '{Name}',
252
- uri: 'configuration/entityTypes/HCP/attributes/activitywithTest'
253
- },
254
- chipLabel: 'Activity',
255
- level: 0
256
- }
257
- ];
258
- var wrapper = setUp();
259
- var select = wrapper.find(MultiSelect);
260
- select.prop('onChange')(newAttributes);
261
- expect(defaultProps.onChange).toHaveBeenCalledWith(newAttributes);
196
+ value: 'configuration/entityTypes/HCP/attributes/activitywith',
197
+ attrType: attributes[0],
198
+ chipLabel: 'Activity',
199
+ level: 0
200
+ }
201
+ ] }));
202
+ expect(screen.queryByText('Activity')).toBeInTheDocument();
262
203
  });
263
- it('should render correctly if props.entityType is null', function () { return __awaiter(void 0, void 0, void 0, function () {
264
- var props, wrapper;
265
- return __generator(this, function (_a) {
266
- props = __assign(__assign({}, defaultProps), { entityType: null });
267
- wrapper = setUp(props);
268
- expect(wrapper.find('Select').prop('options')).toStrictEqual([]);
269
- return [2 /*return*/];
270
- });
271
- }); });
272
204
  });
@@ -9,12 +9,50 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
12
48
  import React from 'react';
13
- import { mount, shallow } from 'enzyme';
14
49
  import { ErrorSeverity, ErrorSource, ErrorType } from '@reltio/mdm-sdk';
15
50
  import { AttributesErrorsPanel } from './AttributesErrorsPanel';
16
- import { ErrorsPanel } from './components/ErrorsPanel';
17
- import { Error } from './components/Error';
51
+ import userEvent from '@testing-library/user-event';
52
+ import { MdmModuleProvider } from '../contexts/MdmModuleContext';
53
+ import { render, screen, within } from '@testing-library/react';
54
+ import { getMuiIconByName } from '../test-utils';
55
+ import { store } from './store.test-data';
18
56
  describe('AttributesErrorsPanel tests', function () {
19
57
  var error = {
20
58
  type: ErrorType.invalid,
@@ -36,80 +74,99 @@ describe('AttributesErrorsPanel tests', function () {
36
74
  source: ErrorSource.validationService,
37
75
  path: []
38
76
  };
39
- afterEach(function () {
40
- jest.clearAllMocks();
41
- });
77
+ var setUp = function (props) {
78
+ var Providers = function (_a) {
79
+ var children = _a.children;
80
+ return (React.createElement(MdmModuleProvider, { values: store }, children));
81
+ };
82
+ var user = userEvent.setup();
83
+ return __assign({ user: user }, render(React.createElement(AttributesErrorsPanel, __assign({}, props)), { wrapper: Providers }));
84
+ };
42
85
  it('should render nothing if there are no errors', function () {
43
- var component = shallow(React.createElement(AttributesErrorsPanel, null));
44
- expect(component.isEmptyRender()).toBe(true);
86
+ var container = setUp().container;
87
+ expect(container).toBeEmptyDOMElement();
45
88
  });
46
89
  it('should render ErrorsPanel with 2 panels when there are both errors and warnings', function () {
47
- var component = shallow(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [error, error, warning] }));
48
- expect(component.isEmptyRender()).toBe(false);
49
- var errorsPanel = component.find(ErrorsPanel);
50
- expect(errorsPanel.length).toBe(1);
51
- var panels = errorsPanel.prop('panels');
52
- expect(panels.length).toBe(2);
53
- expect(panels[0].title).toBe('2 errors');
54
- expect(panels[0].items).toEqual([error, error]);
55
- expect(panels[1].title).toBe('1 warning');
56
- expect(panels[1].items).toEqual([warning]);
57
- expect(errorsPanel.prop('ErrorComponent')).toBe(Error);
90
+ setUp({ attributesWithErrors: [error, error, warning] });
91
+ expect(screen.getByText('2 errors')).toBeInTheDocument();
92
+ expect(screen.getAllByText('Error 1')).toHaveLength(2);
93
+ expect(screen.getByText('1 warning')).toBeInTheDocument();
94
+ expect(screen.getByText('Warning 1')).toBeInTheDocument();
95
+ expect(getMuiIconByName('Error')).toBeInTheDocument();
96
+ expect(getMuiIconByName('Warning')).toBeInTheDocument();
58
97
  });
59
98
  it('should render ErrorsPanel with only error panel when there are only error(s)', function () {
60
- var component = shallow(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [error] }));
61
- var errorsPanel = component.find(ErrorsPanel);
62
- expect(errorsPanel.length).toBe(1);
63
- var panels = errorsPanel.prop('panels');
64
- expect(panels.length).toBe(1);
65
- expect(panels[0].title).toBe('1 error');
66
- expect(panels[0].items).toEqual([error]);
67
- expect(errorsPanel.prop('ErrorComponent')).toBe(Error);
99
+ setUp({ attributesWithErrors: [error] });
100
+ expect(screen.getAllByRole('region')).toHaveLength(1);
101
+ expect(screen.getByText('1 error')).toBeInTheDocument();
102
+ expect(screen.getByText('Error 1')).toBeInTheDocument();
68
103
  });
69
104
  it('should render ErrorsPanel with only warning panel when there are only warning(s)', function () {
70
- var component = shallow(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [warning, warning] }));
71
- var errorsPanel = component.find(ErrorsPanel);
72
- expect(errorsPanel.length).toBe(1);
73
- var panels = errorsPanel.prop('panels');
74
- expect(panels.length).toBe(1);
75
- expect(panels[0].title).toBe('2 warnings');
76
- expect(panels[0].items).toEqual([warning, warning]);
77
- expect(errorsPanel.prop('ErrorComponent')).toBe(Error);
78
- });
79
- it('should toggle panels', function () {
80
- var component = shallow(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [error, warning] }));
81
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe(null);
82
- component.find(ErrorsPanel).prop('onToggle')('error')({}, true);
83
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe('error');
84
- component.find(ErrorsPanel).prop('onToggle')('warning')({}, true);
85
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe('warning');
86
- component.find(ErrorsPanel).prop('onToggle')('warning')({}, false);
87
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe(null);
88
- });
89
- it('should expand error panel on new errors appearing', function () {
90
- var component = mount(React.createElement(AttributesErrorsPanel, null));
91
- expect(component.find(ErrorsPanel).length).toBe(0);
92
- component.setProps({ attributesWithErrors: [error, warning] });
93
- expect(component.find(ErrorsPanel).length).toBe(1);
94
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe('errors');
95
- component.find(ErrorsPanel).prop('onToggle')('error')({}, false);
96
- component.update();
97
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe(null);
98
- component.setProps({ attributesWithErrors: [__assign(__assign({}, error), { message: 'new message' }), warning] });
99
- component.update();
100
- expect(component.find(ErrorsPanel).length).toBe(1);
101
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe('errors');
102
- });
103
- it('should not expand error panel after error deactivating', function () {
104
- var component = mount(React.createElement(AttributesErrorsPanel, null));
105
- expect(component.find(ErrorsPanel).length).toBe(0);
106
- component.setProps({ attributesWithErrors: [error, warning] });
107
- expect(component.find(ErrorsPanel).length).toBe(1);
108
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe('errors');
109
- component.find(ErrorsPanel).prop('onToggle')('error')({}, false);
110
- component.update();
111
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe(null);
112
- component.setProps({ attributesWithErrors: [__assign(__assign({}, error), { deactivated: true }), warning] });
113
- expect(component.find(ErrorsPanel).prop('expandedPanelId')).toBe(null);
105
+ setUp({ attributesWithErrors: [warning, warning] });
106
+ expect(screen.getAllByRole('region')).toHaveLength(1);
107
+ expect(screen.getByText('2 warnings')).toBeInTheDocument();
108
+ expect(screen.getAllByText('Warning 1')).toHaveLength(2);
114
109
  });
110
+ it('should toggle panels, error expand by default', function () { return __awaiter(void 0, void 0, void 0, function () {
111
+ var user, expandButtons, errorExpandButton, warningExpandButton;
112
+ return __generator(this, function (_a) {
113
+ switch (_a.label) {
114
+ case 0:
115
+ user = setUp({ attributesWithErrors: [error, warning] }).user;
116
+ expandButtons = screen.getAllByRole('button');
117
+ errorExpandButton = expandButtons[0];
118
+ warningExpandButton = expandButtons[1];
119
+ expect(errorExpandButton).toHaveAttribute('aria-expanded', 'true');
120
+ return [4 /*yield*/, user.click(errorExpandButton)];
121
+ case 1:
122
+ _a.sent();
123
+ expect(errorExpandButton).toHaveAttribute('aria-expanded', 'false');
124
+ expect(warningExpandButton).toHaveAttribute('aria-expanded', 'false');
125
+ return [4 /*yield*/, user.click(warningExpandButton)];
126
+ case 2:
127
+ _a.sent();
128
+ expect(warningExpandButton).toHaveAttribute('aria-expanded', 'true');
129
+ return [2 /*return*/];
130
+ }
131
+ });
132
+ }); });
133
+ it('should expand error panel on new errors appearing', function () { return __awaiter(void 0, void 0, void 0, function () {
134
+ var _a, user, rerender, errorExpandButton;
135
+ return __generator(this, function (_b) {
136
+ switch (_b.label) {
137
+ case 0:
138
+ _a = setUp(), user = _a.user, rerender = _a.rerender;
139
+ expect(screen.queryByRole('region')).not.toBeInTheDocument();
140
+ rerender(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [error, warning] }));
141
+ errorExpandButton = screen.getByRole('button', { expanded: true });
142
+ expect(within(errorExpandButton).getByText('1 error')).toBeInTheDocument();
143
+ expect(screen.getByText('Error 1')).toBeInTheDocument();
144
+ return [4 /*yield*/, user.click(errorExpandButton)];
145
+ case 1:
146
+ _b.sent();
147
+ expect(errorExpandButton).toHaveAttribute('aria-expanded', 'false');
148
+ rerender(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [__assign(__assign({}, error), { message: 'new message' }), warning] }));
149
+ expect(errorExpandButton).toHaveAttribute('aria-expanded', 'true');
150
+ expect(within(errorExpandButton).getByText('1 error')).toBeInTheDocument();
151
+ expect(screen.getByText('new message')).toBeInTheDocument();
152
+ return [2 /*return*/];
153
+ }
154
+ });
155
+ }); });
156
+ it('should not expand error panel after error deactivating', function () { return __awaiter(void 0, void 0, void 0, function () {
157
+ var _a, user, rerender, errorExpandButton;
158
+ return __generator(this, function (_b) {
159
+ switch (_b.label) {
160
+ case 0:
161
+ _a = setUp({ attributesWithErrors: [error, warning] }), user = _a.user, rerender = _a.rerender;
162
+ errorExpandButton = screen.getByRole('button', { expanded: true });
163
+ return [4 /*yield*/, user.click(errorExpandButton)];
164
+ case 1:
165
+ _b.sent();
166
+ rerender(React.createElement(AttributesErrorsPanel, { attributesWithErrors: [__assign(__assign({}, error), { deactivated: true }), warning] }));
167
+ expect(errorExpandButton).toHaveAttribute('aria-expanded', 'false');
168
+ return [2 /*return*/];
169
+ }
170
+ });
171
+ }); });
115
172
  });