@reltio/components 1.4.2044 → 1.4.2046

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 (175) hide show
  1. package/AttributesFiltersBuilder/AttributesFiltersBuilder.test.js +72 -50
  2. package/BasicTable/BasicTable.test.js +232 -278
  3. package/BlobRenderer/BlobRenderer.js +1 -1
  4. package/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.test.js +125 -111
  5. package/DateIntervalSelector/DateIntervalSelector.test.js +87 -65
  6. package/DefaultCellValueRenderer/DefaultCellValueRenderer.js +1 -1
  7. package/DefaultCellValueRenderer/DefaultCellValueRenderer.test.js +16 -46
  8. package/DeleteButton/DeleteButton.spec.js +53 -15
  9. package/DependentLookupEditor/DependentLookupEditor.test.js +555 -807
  10. package/Drawer/Drawer.test.js +9 -20
  11. package/DropDownEditor/DropDownEditor.test.js +81 -29
  12. package/DropDownMenuButton/DropDownMenuButton.spec.js +101 -70
  13. package/DropDownSelector/DropDownSelector.test.js +159 -30
  14. package/EditModeAttributesFactory/EditModeAttributesFactory.test.js +143 -0
  15. package/EditModeAttributesList/EditModeAttributesList.test.js +277 -224
  16. package/EditModeAttributesList/attributes.test-data.d.ts +0 -11
  17. package/EditModeAttributesList/attributes.test-data.js +1 -1
  18. package/EditModeAttributesPager/EditModeAttributesPager.test.js +698 -234
  19. package/EditModeAttributesPager/helpers.test.js +2 -12
  20. package/EditModeAttributesView/EditModeAttributesView.test.js +263 -157
  21. package/EditModeComplexAttribute/EditModeComplexAttribute.js +1 -1
  22. package/EditModeComplexAttribute/EditModeComplexAttribute.test.js +313 -298
  23. package/EditModeComplexAttribute/nestedAttrType.test-data.d.ts +0 -5
  24. package/EditModeComplexAttribute/nestedAttrType.test-data.js +3 -44
  25. package/EmptyState/EmptyState.test.js +99 -38
  26. package/EntityCreator/EntityCreator.test.js +68 -35
  27. package/EntitySelector/EntitySelector.js +1 -1
  28. package/EntitySelector/EntitySelector.test.js +275 -422
  29. package/EntityTypeIcon/EntityTypeIcon.test.js +16 -16
  30. package/EntityTypesSelector/EntityTypesSelector.test.js +62 -21
  31. package/ErrorBoundary/ErrorBoundary.test.js +19 -17
  32. package/ErrorMessage/ErrorMessage.js +1 -1
  33. package/ErrorPopup/ErrorPopup.test.js +72 -25
  34. package/ErrorWrapper/ErrorWrapper.test.js +10 -9
  35. package/ExpandedValueTooltip/ExpandedValueTooltip.test.js +111 -37
  36. package/FileTypeEditor/FileTypeEditor.test.js +95 -64
  37. package/FilterValueEditor/FilterValueEditor.test.js +183 -157
  38. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.js +2 -2
  39. package/HierarchicalAttributeTooltip/HierarchicalAttributeTooltip.test.js +114 -24
  40. package/HierarchyNodeTitle/HierarchyNodeTitle.test.js +61 -100
  41. package/OvIcon/OvIcon.js +2 -2
  42. package/ProfileCard/components/ProfileCardPlaceholder/ProfileCardPlaceholder.js +2 -2
  43. package/ShowLess/ShowLess.js +1 -1
  44. package/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  45. package/UploadFileButton/components/UploadMode/UploadMode.js +1 -1
  46. package/cjs/AttributesFiltersBuilder/AttributesFiltersBuilder.test.js +72 -50
  47. package/cjs/BasicTable/BasicTable.test.js +230 -299
  48. package/cjs/BlobRenderer/BlobRenderer.js +1 -1
  49. package/cjs/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.test.js +125 -111
  50. package/cjs/DateIntervalSelector/DateIntervalSelector.test.js +87 -65
  51. package/cjs/DefaultCellValueRenderer/DefaultCellValueRenderer.js +1 -1
  52. package/cjs/DefaultCellValueRenderer/DefaultCellValueRenderer.test.js +16 -46
  53. package/cjs/DeleteButton/DeleteButton.spec.js +53 -15
  54. package/cjs/DependentLookupEditor/DependentLookupEditor.test.js +569 -821
  55. package/cjs/Drawer/Drawer.test.js +10 -21
  56. package/cjs/DropDownEditor/DropDownEditor.test.js +81 -29
  57. package/cjs/DropDownMenuButton/DropDownMenuButton.spec.js +102 -71
  58. package/cjs/DropDownSelector/DropDownSelector.test.js +159 -30
  59. package/cjs/EditModeAttributesFactory/EditModeAttributesFactory.test.js +148 -0
  60. package/cjs/EditModeAttributesList/EditModeAttributesList.test.js +277 -224
  61. package/cjs/EditModeAttributesList/attributes.test-data.d.ts +0 -11
  62. package/cjs/EditModeAttributesList/attributes.test-data.js +1 -1
  63. package/cjs/EditModeAttributesPager/EditModeAttributesPager.test.js +696 -232
  64. package/cjs/EditModeAttributesPager/helpers.test.js +2 -12
  65. package/cjs/EditModeAttributesView/EditModeAttributesView.test.js +262 -156
  66. package/cjs/EditModeComplexAttribute/EditModeComplexAttribute.js +1 -1
  67. package/cjs/EditModeComplexAttribute/EditModeComplexAttribute.test.js +312 -297
  68. package/cjs/EditModeComplexAttribute/nestedAttrType.test-data.d.ts +0 -5
  69. package/cjs/EditModeComplexAttribute/nestedAttrType.test-data.js +3 -44
  70. package/cjs/EmptyState/EmptyState.test.js +98 -37
  71. package/cjs/EntityCreator/EntityCreator.test.js +69 -36
  72. package/cjs/EntitySelector/EntitySelector.js +1 -1
  73. package/cjs/EntitySelector/EntitySelector.test.js +274 -421
  74. package/cjs/EntityTypeIcon/EntityTypeIcon.test.js +17 -17
  75. package/cjs/EntityTypesSelector/EntityTypesSelector.test.js +62 -21
  76. package/cjs/ErrorBoundary/ErrorBoundary.test.js +19 -17
  77. package/cjs/ErrorMessage/ErrorMessage.js +1 -1
  78. package/cjs/ErrorPopup/ErrorPopup.test.js +71 -24
  79. package/cjs/ErrorWrapper/ErrorWrapper.test.js +10 -9
  80. package/cjs/ExpandedValueTooltip/ExpandedValueTooltip.test.js +111 -37
  81. package/cjs/FileTypeEditor/FileTypeEditor.test.js +95 -64
  82. package/cjs/FilterValueEditor/FilterValueEditor.test.js +182 -156
  83. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.js +2 -2
  84. package/cjs/HierarchicalAttributeTooltip/HierarchicalAttributeTooltip.test.js +114 -24
  85. package/cjs/HierarchyNodeTitle/HierarchyNodeTitle.test.js +61 -100
  86. package/cjs/OvIcon/OvIcon.js +2 -2
  87. package/cjs/ProfileCard/components/ProfileCardPlaceholder/ProfileCardPlaceholder.js +2 -2
  88. package/cjs/ShowLess/ShowLess.js +1 -1
  89. package/cjs/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  90. package/cjs/UploadFileButton/components/UploadMode/UploadMode.js +1 -1
  91. package/cjs/contexts/ExpandedAttributesContext/useAttributeExpanded.test.js +25 -18
  92. package/cjs/contexts/MdmModuleContext/hooks.d.ts +2 -2
  93. package/cjs/contexts/ReloadDataContext/ReloadDataContext.spec.js +16 -53
  94. package/cjs/test-utils/TestStylesProvider.js +6 -5
  95. package/contexts/ExpandedAttributesContext/useAttributeExpanded.test.js +25 -18
  96. package/contexts/MdmModuleContext/hooks.d.ts +2 -2
  97. package/contexts/ReloadDataContext/ReloadDataContext.spec.js +16 -30
  98. package/package.json +2 -2
  99. package/test-utils/TestStylesProvider.js +3 -2
  100. package/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.js +0 -101
  101. package/AttributesFiltersBuilder/components/RowActions/RowActions.test.js +0 -106
  102. package/BasicTable/IntegrationBasicTable.test.d.ts +0 -1
  103. package/BasicTable/IntegrationBasicTable.test.js +0 -203
  104. package/DependentLookupEditor/IntegrationDependentLookupEditor.test.d.ts +0 -1
  105. package/DependentLookupEditor/IntegrationDependentLookupEditor.test.js +0 -137
  106. package/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.d.ts +0 -1
  107. package/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.js +0 -32
  108. package/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.d.ts +0 -1
  109. package/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.js +0 -106
  110. package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.d.ts +0 -1
  111. package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.js +0 -338
  112. package/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.d.ts +0 -1
  113. package/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.js +0 -225
  114. package/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.d.ts +0 -1
  115. package/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.js +0 -47
  116. package/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.d.ts +0 -1
  117. package/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.js +0 -204
  118. package/EditModeAttributesView/IntegrationEditModeAttributesView.test.d.ts +0 -1
  119. package/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +0 -246
  120. package/EditModeAttributesView/metadata.test-data.d.ts +0 -4
  121. package/EditModeAttributesView/metadata.test-data.js +0 -119
  122. package/EntityCreator/entityType.test-data.d.ts +0 -52
  123. package/EntityCreator/entityType.test-data.js +0 -188
  124. package/EntitySelector/components/ClearIndicator/ClearIndicator.test.d.ts +0 -1
  125. package/EntitySelector/components/ClearIndicator/ClearIndicator.test.js +0 -27
  126. package/EntitySelector/components/EntityOption/EntityOption.test.d.ts +0 -1
  127. package/EntitySelector/components/EntityOption/EntityOption.test.js +0 -79
  128. package/EntitySelector/components/Group/Group.test.d.ts +0 -1
  129. package/EntitySelector/components/Group/Group.test.js +0 -65
  130. package/EntitySelector/components/SingleValue/SingleValue.test.d.ts +0 -1
  131. package/EntitySelector/components/SingleValue/SingleValue.test.js +0 -78
  132. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.d.ts +0 -1
  133. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.js +0 -76
  134. package/cjs/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.d.ts +0 -1
  135. package/cjs/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.js +0 -106
  136. package/cjs/AttributesFiltersBuilder/components/RowActions/RowActions.test.d.ts +0 -1
  137. package/cjs/AttributesFiltersBuilder/components/RowActions/RowActions.test.js +0 -111
  138. package/cjs/BasicTable/IntegrationBasicTable.test.d.ts +0 -1
  139. package/cjs/BasicTable/IntegrationBasicTable.test.js +0 -208
  140. package/cjs/DependentLookupEditor/IntegrationDependentLookupEditor.test.d.ts +0 -1
  141. package/cjs/DependentLookupEditor/IntegrationDependentLookupEditor.test.js +0 -142
  142. package/cjs/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.d.ts +0 -1
  143. package/cjs/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.js +0 -37
  144. package/cjs/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.d.ts +0 -1
  145. package/cjs/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.js +0 -111
  146. package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.d.ts +0 -1
  147. package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.js +0 -343
  148. package/cjs/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.d.ts +0 -1
  149. package/cjs/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.js +0 -230
  150. package/cjs/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.d.ts +0 -1
  151. package/cjs/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.js +0 -52
  152. package/cjs/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.d.ts +0 -1
  153. package/cjs/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.js +0 -209
  154. package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.d.ts +0 -1
  155. package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +0 -251
  156. package/cjs/EditModeAttributesView/metadata.test-data.d.ts +0 -4
  157. package/cjs/EditModeAttributesView/metadata.test-data.js +0 -123
  158. package/cjs/EntityCreator/entityType.test-data.d.ts +0 -52
  159. package/cjs/EntityCreator/entityType.test-data.js +0 -191
  160. package/cjs/EntitySelector/components/ClearIndicator/ClearIndicator.test.d.ts +0 -1
  161. package/cjs/EntitySelector/components/ClearIndicator/ClearIndicator.test.js +0 -32
  162. package/cjs/EntitySelector/components/EntityOption/EntityOption.test.d.ts +0 -1
  163. package/cjs/EntitySelector/components/EntityOption/EntityOption.test.js +0 -84
  164. package/cjs/EntitySelector/components/Group/Group.test.d.ts +0 -1
  165. package/cjs/EntitySelector/components/Group/Group.test.js +0 -70
  166. package/cjs/EntitySelector/components/SingleValue/SingleValue.test.d.ts +0 -1
  167. package/cjs/EntitySelector/components/SingleValue/SingleValue.test.js +0 -83
  168. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.d.ts +0 -1
  169. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.js +0 -81
  170. package/cjs/contexts/CollaborationContext/CollaborationContextProvider.test.d.ts +0 -1
  171. package/cjs/contexts/CollaborationContext/CollaborationContextProvider.test.js +0 -104
  172. package/contexts/CollaborationContext/CollaborationContextProvider.test.d.ts +0 -1
  173. package/contexts/CollaborationContext/CollaborationContextProvider.test.js +0 -99
  174. /package/{AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.d.ts → EditModeAttributesFactory/EditModeAttributesFactory.test.d.ts} +0 -0
  175. /package/{AttributesFiltersBuilder/components/RowActions/RowActions.test.d.ts → cjs/EditModeAttributesFactory/EditModeAttributesFactory.test.d.ts} +0 -0
@@ -46,83 +46,114 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  }
47
47
  };
48
48
  import React from 'react';
49
- import { shallow } from 'enzyme';
50
- import { UploadFileButton } from '../UploadFileButton';
49
+ import { render, screen } from '@testing-library/react';
50
+ import userEvent from '@testing-library/user-event';
51
+ import { uploadFileForSearch } from '@reltio/mdm-sdk';
51
52
  import { FileTypeEditor } from './FileTypeEditor';
52
- jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { uploadFileForSearch: function (file) {
53
- return Promise.resolve({
54
- downloadLink: file.name,
55
- path: file.name,
56
- expirationDate: '2021-10-27T10:39:14.374+0000'
57
- });
58
- } })); });
53
+ import { getMuiIconByName } from '../test-utils';
54
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { uploadFileForSearch: jest.fn() })); });
55
+ var defaultProps = {
56
+ onChange: jest.fn(),
57
+ onError: jest.fn()
58
+ };
59
+ var setUp = function (props) {
60
+ if (props === void 0) { props = defaultProps; }
61
+ var user = userEvent.setup();
62
+ return __assign(__assign({}, render(React.createElement(FileTypeEditor, __assign({}, props)))), { user: user });
63
+ };
59
64
  describe('File Type editor tests', function () {
60
- it('should render UploadFileButton', function () {
61
- var wrapper = shallow(React.createElement(FileTypeEditor, { onChange: jest.fn() }));
62
- expect(wrapper.find(UploadFileButton)).toHaveLength(1);
65
+ beforeEach(function () {
66
+ jest.spyOn(Date, 'now').mockReturnValue(new Date('2024-01-05T16:00:00.374+0000').getTime());
67
+ uploadFileForSearch.mockResolvedValue({
68
+ downloadLink: 'https://reltio.com/file.csv',
69
+ path: 'path',
70
+ expirationDate: '2024-01-05T16:00:00.374+0000'
71
+ });
63
72
  });
64
- it('should pass value into UploadFileButton', function () {
65
- var value = { downloadLink: 'downloadLink', expirationDate: 1234567890, filename: 'file', link: 'link' };
66
- var wrapper = shallow(React.createElement(FileTypeEditor, { value: value, onChange: jest.fn() }));
67
- wrapper.update();
68
- var uploadFileButton = wrapper.find(UploadFileButton);
69
- expect(uploadFileButton.prop('link')).toBe(value.downloadLink);
70
- expect(uploadFileButton.prop('filename')).toBe(value.filename);
71
- expect(uploadFileButton.prop('supportedFileTypes')).toEqual(['.txt', '.csv']);
73
+ afterEach(function () {
74
+ jest.clearAllMocks();
72
75
  });
73
- it('should call onChange with correct parameters on file upload', function () { return __awaiter(void 0, void 0, void 0, function () {
74
- var onChange, wrapper, uploadFileButton;
76
+ it('should render correctly', function () {
77
+ setUp();
78
+ screen.getByText('Select File');
79
+ expect(screen.getByTestId('file-uploader')).toHaveAttribute('accept', '.txt,.csv');
80
+ });
81
+ it('should upload file correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
82
+ var user, file;
75
83
  return __generator(this, function (_a) {
76
84
  switch (_a.label) {
77
85
  case 0:
78
- onChange = jest.fn();
79
- wrapper = shallow(React.createElement(FileTypeEditor, { onChange: onChange }));
80
- wrapper.update();
81
- uploadFileButton = wrapper.find(UploadFileButton);
82
- uploadFileButton.prop('onUpload')({ name: 'file' });
83
- return [4 /*yield*/, Promise.resolve()];
86
+ user = setUp().user;
87
+ file = new File(['file'], 'file.csv', { type: 'text/csv' });
88
+ return [4 /*yield*/, user.upload(screen.getByTestId('file-uploader'), [file])];
84
89
  case 1:
85
90
  _a.sent();
86
- expect(onChange).toHaveBeenCalledWith({
87
- filename: 'file',
88
- downloadLink: 'file',
89
- link: 'file',
90
- expirationDate: 1635331154374
91
+ expect(uploadFileForSearch).toHaveBeenCalledWith(file);
92
+ expect(defaultProps.onChange).toHaveBeenCalledWith({
93
+ downloadLink: 'https://reltio.com/file.csv',
94
+ expirationDate: 1704470400374,
95
+ filename: 'file.csv',
96
+ link: 'path'
91
97
  });
92
98
  return [2 /*return*/];
93
99
  }
94
100
  });
95
101
  }); });
96
- it('should call onChange with empty params on cancel action', function () {
97
- var onChange = jest.fn();
98
- var wrapper = shallow(React.createElement(FileTypeEditor, { onChange: onChange }));
99
- wrapper.update();
100
- var uploadFileButton = wrapper.find(UploadFileButton);
101
- uploadFileButton.prop('onCancel')();
102
- expect(onChange).toHaveBeenCalledWith(null);
103
- });
104
- it('should call onError with error message on file upload error', function () {
105
- var onError = jest.fn();
106
- var wrapper = shallow(React.createElement(FileTypeEditor, { onError: onError, onChange: jest.fn() }));
107
- wrapper.update();
108
- var uploadFileButton = wrapper.find(UploadFileButton);
109
- var ERROR_MESSAGE = new Error('Error');
110
- uploadFileButton.prop('onError')(ERROR_MESSAGE);
111
- expect(onError).toHaveBeenCalledWith(ERROR_MESSAGE);
112
- });
113
- it('should not have default value for onError prop', function () {
114
- var wrapper = shallow(React.createElement(FileTypeEditor, { onChange: jest.fn() }));
115
- wrapper.update();
116
- var uploadFileButton = wrapper.find(UploadFileButton);
117
- expect(uploadFileButton.prop('onError')).toBeUndefined();
118
- });
119
- it('should pass isValidLink prop to UploadFileButton correctly', function () {
120
- var value = { downloadLink: 'downloadLink', expirationDate: 1234567890, filename: 'file', link: 'link' };
121
- var wrapper = shallow(React.createElement(FileTypeEditor, { value: value, onChange: jest.fn() }));
122
- expect(wrapper.find(UploadFileButton).prop('isValidLink')).toBe(false);
123
- wrapper.setProps({
124
- value: __assign(__assign({}, value), { expirationDate: 12312312314324 })
102
+ it('should cancel upload correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
103
+ var props, user;
104
+ return __generator(this, function (_a) {
105
+ switch (_a.label) {
106
+ case 0:
107
+ props = __assign(__assign({}, defaultProps), { value: { downloadLink: 'https://reltio.com/file.csv' } });
108
+ user = setUp(props).user;
109
+ return [4 /*yield*/, user.click(getMuiIconByName('Cancel'))];
110
+ case 1:
111
+ _a.sent();
112
+ expect(props.onChange).toHaveBeenCalledWith(null);
113
+ return [2 /*return*/];
114
+ }
125
115
  });
126
- expect(wrapper.find(UploadFileButton).prop('isValidLink')).toBe(true);
127
- });
116
+ }); });
117
+ it('should handle error correctly in case if upload request has been rejected', function () { return __awaiter(void 0, void 0, void 0, function () {
118
+ var user, file;
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ uploadFileForSearch.mockRejectedValue({ errorMessage: 'Something went wrong' });
123
+ user = setUp().user;
124
+ file = new File(['file'], 'file.csv', { type: 'text/csv' });
125
+ return [4 /*yield*/, user.upload(screen.getByTestId('file-uploader'), [file])];
126
+ case 1:
127
+ _a.sent();
128
+ expect(defaultProps.onError).toHaveBeenCalledWith({ errorMessage: 'Something went wrong' });
129
+ return [2 /*return*/];
130
+ }
131
+ });
132
+ }); });
133
+ it('should render label as link if link is valid', function () { return __awaiter(void 0, void 0, void 0, function () {
134
+ var props;
135
+ return __generator(this, function (_a) {
136
+ props = __assign(__assign({}, defaultProps), { value: {
137
+ downloadLink: 'https://reltio.com/file.csv',
138
+ filename: 'file.csv',
139
+ expirationDate: new Date('2025-01-05T16:00:00.374+0000').getTime()
140
+ } });
141
+ setUp(props);
142
+ expect(screen.getByText('file.csv')).toHaveAttribute('href', 'https://reltio.com/file.csv');
143
+ return [2 /*return*/];
144
+ });
145
+ }); });
146
+ it('should render label as plain text if link is not valid', function () { return __awaiter(void 0, void 0, void 0, function () {
147
+ var props;
148
+ return __generator(this, function (_a) {
149
+ props = __assign(__assign({}, defaultProps), { value: {
150
+ downloadLink: 'https://reltio.com/file.csv',
151
+ filename: 'file.csv',
152
+ expirationDate: new Date('2023-01-05T16:00:00.374+0000').getTime()
153
+ } });
154
+ setUp(props);
155
+ expect(screen.getByText('file.csv')).not.toHaveAttribute('href');
156
+ return [2 /*return*/];
157
+ });
158
+ }); });
128
159
  });
@@ -9,172 +9,198 @@ 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 = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["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 { shallow } from 'enzyme';
14
- import { DataTypes, FilterOptions, DateRangeValue } from '@reltio/mdm-sdk';
15
- import { DataTypeValueEditor } from '../DataTypeValueEditor';
16
- import { DateRangeEditor } from '../DateRangeEditor';
17
- import { RangeDataTypeValueEditor } from './components/RangeDataTypeValueEditor';
49
+ import { render, screen } from '@testing-library/react';
50
+ import userEvent from '@testing-library/user-event';
51
+ import { DataTypes, DateRangeValue, FilterOptions } from '@reltio/mdm-sdk';
52
+ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
53
+ import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
18
54
  import { FilterValueEditor } from './FilterValueEditor';
19
- var toLocalDate = function (timestamp) {
20
- var date = new Date(timestamp);
21
- return new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
55
+ var defaultProps = {
56
+ filter: { fieldName: 'entity.label', filter: FilterOptions.EQUALS, values: ['test label'] },
57
+ dataTypeDefinition: { type: DataTypes.TYPE_STRING },
58
+ TextFieldProps: {},
59
+ onChange: jest.fn()
22
60
  };
23
- describe('FilterValueEditor', function () {
24
- it('should render DataTypeValueEditor with correct props (not range value)', function () {
25
- var props = {
26
- filter: { fieldName: 'entity.label', filter: FilterOptions.EQUALS, values: ['Label1'] },
27
- onChange: jest.fn(),
28
- dataTypeDefinition: {
29
- type: DataTypes.TYPE_STRING
30
- },
31
- orientation: 'horizontal'
32
- };
33
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
34
- var editor = wrapper.find(DataTypeValueEditor);
35
- expect(editor).toHaveLength(1);
36
- expect(editor.props()).toMatchObject({
37
- value: props.filter.values[0],
38
- dataTypeDefinition: props.dataTypeDefinition,
39
- fieldName: props.filter.fieldName
40
- });
41
- expect(editor.prop('orientation')).toBeUndefined();
42
- editor.prop('onChange')('Label2');
43
- expect(props.onChange).toHaveBeenCalledWith(['Label2']);
61
+ var setUp = function (props) {
62
+ if (props === void 0) { props = defaultProps; }
63
+ var user = userEvent.setup();
64
+ var Providers = function (_a) {
65
+ var children = _a.children;
66
+ return (React.createElement(LocalizationProvider, { dateAdapter: AdapterMoment }, children));
67
+ };
68
+ return __assign(__assign({}, render(React.createElement(FilterValueEditor, __assign({}, props)), { wrapper: Providers })), { user: user });
69
+ };
70
+ describe('Filter value editor', function () {
71
+ afterEach(function () {
72
+ jest.clearAllMocks();
44
73
  });
45
- it('should render RangeDataTypeValueEditor if filter is type of range (not date range)', function () {
46
- var props = {
47
- filter: { fieldName: 'relation.attributes.int', filter: FilterOptions.IN_RANGE, values: [['1', '2']] },
48
- onChange: jest.fn(),
49
- dataTypeDefinition: {
50
- type: DataTypes.TYPE_INT
51
- },
52
- orientation: 'horizontal'
53
- };
54
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
55
- var editor = wrapper.find(RangeDataTypeValueEditor);
56
- expect(editor).toHaveLength(1);
57
- expect(editor.props()).toMatchObject({
58
- value: ['1', '2'],
59
- dataTypeDefinition: props.dataTypeDefinition,
60
- fieldName: props.filter.fieldName,
61
- orientation: 'horizontal'
74
+ it('should render data type value editor with correct props (not range value)', function () { return __awaiter(void 0, void 0, void 0, function () {
75
+ var user, input;
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0:
79
+ user = setUp().user;
80
+ screen.getByText('test label');
81
+ input = screen.getByRole('textbox');
82
+ return [4 /*yield*/, user.type(input, 'new label{Enter}')];
83
+ case 1:
84
+ _a.sent();
85
+ expect(defaultProps.onChange).toHaveBeenCalledWith([['test label', 'new label']]);
86
+ return [2 /*return*/];
87
+ }
62
88
  });
63
- editor.prop('onChange')(['1', '3']);
64
- expect(props.onChange).toHaveBeenLastCalledWith([['1', '3']]);
65
- });
66
- it('should render DateRangeEditor if filter is type of date range with special value)', function () {
67
- var props = {
68
- filter: {
69
- fieldName: 'relation.attributes.date',
70
- filter: FilterOptions.WITHIN,
71
- values: [DateRangeValue.LAST_MONTH]
72
- },
73
- onChange: jest.fn(),
74
- dataTypeDefinition: {
75
- type: DataTypes.TYPE_DATE
89
+ }); });
90
+ it('should render range data type value editor with horizontal orientation if filter is type of range (not date range)', function () { return __awaiter(void 0, void 0, void 0, function () {
91
+ var props, user, inputs;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0:
95
+ props = __assign(__assign({}, defaultProps), { orientation: 'horizontal', filter: { fieldName: 'relation.attributes.int', filter: FilterOptions.IN_RANGE, values: [['1', '2']] }, dataTypeDefinition: { type: DataTypes.TYPE_INT } });
96
+ user = setUp(props).user;
97
+ screen.getByTestId('horizontal-range-data-type-value-editor');
98
+ inputs = screen.getAllByRole('textbox');
99
+ expect(inputs[0]).toHaveValue('1');
100
+ expect(inputs[1]).toHaveValue('2');
101
+ return [4 /*yield*/, user.type(inputs[1], '{Backspace}3{Enter}')];
102
+ case 1:
103
+ _a.sent();
104
+ expect(props.onChange).toHaveBeenCalledWith([['1', '3']]);
105
+ return [2 /*return*/];
76
106
  }
77
- };
78
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
79
- var editor = wrapper.find(DateRangeEditor);
80
- expect(editor).toHaveLength(1);
81
- expect(editor.props()).toMatchObject({
82
- values: DateRangeValue.LAST_MONTH,
83
- dataTypeDefinition: props.dataTypeDefinition
84
107
  });
85
- });
86
- it('should render DateRangeEditor if filter is type of date range)', function () {
87
- var values = [1568937600000, 1568938000000];
88
- var expectedValues = [toLocalDate(values[0]), toLocalDate(values[1])];
89
- var props = {
90
- filter: { fieldName: 'relation.attributes.date', filter: FilterOptions.WITHIN, values: [values] },
91
- onChange: jest.fn(),
92
- dataTypeDefinition: {
93
- type: DataTypes.TYPE_DATE
108
+ }); });
109
+ it('should render range data type value editor with vertical orientation if filter is type of range (not date range)', function () { return __awaiter(void 0, void 0, void 0, function () {
110
+ var props, user, inputs;
111
+ return __generator(this, function (_a) {
112
+ switch (_a.label) {
113
+ case 0:
114
+ props = __assign(__assign({}, defaultProps), { orientation: 'vertical', filter: { fieldName: 'relation.attributes.int', filter: FilterOptions.IN_RANGE, values: [['1', '2']] }, dataTypeDefinition: { type: DataTypes.TYPE_INT } });
115
+ user = setUp(props).user;
116
+ screen.getByTestId('vertical-range-data-type-value-editor');
117
+ screen.getByText('From');
118
+ screen.getByText('To');
119
+ inputs = screen.getAllByRole('textbox');
120
+ expect(inputs[0]).toHaveValue('1');
121
+ expect(inputs[1]).toHaveValue('2');
122
+ return [4 /*yield*/, user.type(inputs[1], '{Backspace}8{Enter}')];
123
+ case 1:
124
+ _a.sent();
125
+ expect(props.onChange).toHaveBeenCalledWith([['1', '8']]);
126
+ return [2 /*return*/];
94
127
  }
95
- };
96
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
97
- var editor = wrapper.find(DateRangeEditor);
98
- expect(editor).toHaveLength(1);
99
- expect(editor.props()).toMatchObject({
100
- values: expectedValues,
101
- dataTypeDefinition: props.dataTypeDefinition
102
128
  });
103
- });
104
- it('should not provide TextFieldProps prop to DateRangeEditor', function () {
105
- var values = [1568937600000, 1568938000000];
106
- var props = {
107
- filter: { fieldName: 'relation.attributes.date', filter: FilterOptions.WITHIN, values: [values] },
108
- onChange: jest.fn(),
109
- dataTypeDefinition: {
110
- type: DataTypes.TYPE_DATE
111
- },
112
- TextFieldProps: {
113
- InputProps: {
114
- classes: {
115
- root: 'rootclass'
116
- }
117
- }
129
+ }); });
130
+ it('should render date range editor if filter is type of date range with special value', function () { return __awaiter(void 0, void 0, void 0, function () {
131
+ var props, user, input;
132
+ return __generator(this, function (_a) {
133
+ switch (_a.label) {
134
+ case 0:
135
+ props = __assign(__assign({}, defaultProps), { filter: {
136
+ fieldName: 'relation.attributes.date',
137
+ filter: FilterOptions.WITHIN,
138
+ values: [DateRangeValue.LAST_MONTH]
139
+ }, dataTypeDefinition: { type: DataTypes.TYPE_DATE } });
140
+ user = setUp(props).user;
141
+ screen.getByText('Date Range');
142
+ input = screen.getByRole('textbox');
143
+ expect(input).toHaveAttribute('value', 'Last month');
144
+ return [4 /*yield*/, user.click(input)];
145
+ case 1:
146
+ _a.sent();
147
+ return [4 /*yield*/, user.click(screen.getByText('Last 7 days'))];
148
+ case 2:
149
+ _a.sent();
150
+ expect(props.onChange).toHaveBeenCalledWith(['lastWeek']);
151
+ return [2 /*return*/];
118
152
  }
119
- };
120
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
121
- var editor = wrapper.find(DateRangeEditor);
122
- expect(editor).toHaveLength(1);
123
- expect(editor.prop('TextFieldProps')).toBe(undefined);
124
- });
125
- it('should work correctly with activeness date filters', function () {
126
- var props = {
127
- filter: {
128
- fieldName: 'relation.activeness.startDate',
129
- values: [1568937600000],
130
- filter: FilterOptions.BEFORE
131
- },
132
- dataTypeDefinition: {
133
- type: DataTypes.TYPE_ACTIVENESS_DATE
134
- },
135
- onChange: jest.fn()
136
- };
137
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
138
- var editor = wrapper.find(DataTypeValueEditor);
139
- expect(editor.prop('value')).toEqual(new Date(1568937600000));
140
- editor.prop('onChange')(new Date('2019-09-03T00:00:00+05:00'));
141
- expect(props.onChange).toHaveBeenCalledWith([1567450800000]);
142
- });
143
- it('should work correctly with date filters', function () {
144
- var props = {
145
- filter: {
146
- fieldName: 'relation.attributes.date',
147
- values: ['2019-09-01'],
148
- filter: FilterOptions.ON
149
- },
150
- dataTypeDefinition: {
151
- type: DataTypes.TYPE_DATE
152
- },
153
- onChange: jest.fn()
154
- };
155
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
156
- var editor = wrapper.find(DataTypeValueEditor);
157
- var expectedTimestamp = toLocalDate(props.filter.values[0]);
158
- expect(editor.prop('value')).toEqual(expectedTimestamp);
159
- editor.prop('onChange')(new Date(2019, 8, 3));
160
- expect(props.onChange).toHaveBeenCalledWith([1567468800000]);
161
- });
162
- it('should work correctly with timestamp filters', function () {
163
- var props = {
164
- filter: {
165
- fieldName: 'relation.attributes.timestamp',
166
- values: [1568937600000],
167
- filter: FilterOptions.LT
168
- },
169
- dataTypeDefinition: {
170
- type: DataTypes.TYPE_TIMESTAMP
171
- },
172
- onChange: jest.fn()
173
- };
174
- var wrapper = shallow(React.createElement(FilterValueEditor, __assign({}, props)));
175
- var editor = wrapper.find(DataTypeValueEditor);
176
- expect(editor.prop('value')).toEqual(new Date(1568937600000));
177
- editor.prop('onChange')(new Date(1568938000000));
178
- expect(props.onChange).toHaveBeenCalledWith([1568938000000]);
153
+ });
154
+ }); });
155
+ it('should render date range editor if filter is type of date range', function () {
156
+ var values = [new Date('09/20/2019 04:00:00 AM').valueOf(), new Date('09/25/2019 04:00:00 AM').valueOf()];
157
+ var props = __assign(__assign({}, defaultProps), { filter: { fieldName: 'relation.attributes.date', filter: FilterOptions.WITHIN, values: [values] }, dataTypeDefinition: { type: DataTypes.TYPE_DATE } });
158
+ setUp(props);
159
+ screen.getByText('Date Range');
160
+ expect(screen.getByRole('textbox')).toHaveAttribute('value', '09/20/2019 09/25/2019');
179
161
  });
162
+ it('should work correctly with activeness date filters', function () { return __awaiter(void 0, void 0, void 0, function () {
163
+ var props, user, input;
164
+ return __generator(this, function (_a) {
165
+ switch (_a.label) {
166
+ case 0:
167
+ props = __assign(__assign({}, defaultProps), { filter: {
168
+ fieldName: 'relation.activeness.startDate',
169
+ values: [new Date('09/20/2019').valueOf()],
170
+ filter: FilterOptions.BEFORE
171
+ }, dataTypeDefinition: { type: DataTypes.TYPE_ACTIVENESS_DATE } });
172
+ user = setUp(props).user;
173
+ input = screen.getByRole('textbox');
174
+ expect(input).toHaveValue('09/20/2019');
175
+ screen.getByLabelText('Choose date, selected date is Sep 20, 2019');
176
+ return [4 /*yield*/, user.type(input, '05')];
177
+ case 1:
178
+ _a.sent();
179
+ expect(props.onChange).toHaveBeenCalledWith([new Date('05/20/2019').valueOf()]);
180
+ return [2 /*return*/];
181
+ }
182
+ });
183
+ }); });
184
+ it('should work correctly with timestamp filters', function () { return __awaiter(void 0, void 0, void 0, function () {
185
+ var props, user, input;
186
+ return __generator(this, function (_a) {
187
+ switch (_a.label) {
188
+ case 0:
189
+ props = __assign(__assign({}, defaultProps), { filter: {
190
+ fieldName: 'relation.attributes.timestamp',
191
+ values: [new Date('09/20/2019 04:00:00 AM').valueOf()],
192
+ filter: FilterOptions.LT
193
+ }, dataTypeDefinition: { type: DataTypes.TYPE_TIMESTAMP } });
194
+ user = setUp(props).user;
195
+ input = screen.getByRole('textbox');
196
+ expect(input).toHaveValue('09/20/2019 04:00:00 AM');
197
+ screen.getByLabelText('Choose date, selected date is Sep 20, 2019');
198
+ return [4 /*yield*/, user.type(input, '02')];
199
+ case 1:
200
+ _a.sent();
201
+ expect(props.onChange).toHaveBeenCalledWith([new Date('02/20/2019 04:00:00 AM').valueOf()]);
202
+ return [2 /*return*/];
203
+ }
204
+ });
205
+ }); });
180
206
  });
@@ -37,13 +37,13 @@ export var RangeDataTypeValueEditor = function (_a) {
37
37
  var fromEditor = (React.createElement(DataTypeValueEditor, __assign({ id: rangeEditorFromId.current, value: value[0], onChange: pipe(update(0, __, value), onChange) }, otherProps)));
38
38
  var toEditor = (React.createElement(DataTypeValueEditor, __assign({ id: rangeEditorToId.current, value: value[1], onChange: pipe(update(1, __, value), onChange) }, otherProps)));
39
39
  if (orientation === 'horizontal') {
40
- return (React.createElement("div", { className: styles['range-inline-editor'] },
40
+ return (React.createElement("div", { "data-reltio-id": "horizontal-range-data-type-value-editor", className: styles['range-inline-editor'] },
41
41
  fromEditor,
42
42
  React.createElement("div", { className: styles['range-editor__dash'] }, '—'),
43
43
  toEditor));
44
44
  }
45
45
  else {
46
- return (React.createElement("div", { className: styles['range-editor'] },
46
+ return (React.createElement("div", { "data-reltio-id": "vertical-range-data-type-value-editor", className: styles['range-editor'] },
47
47
  React.createElement(FormControl, { variant: "standard", fullWidth: true, className: styles['range-editor__control'] },
48
48
  React.createElement(InputLabel, { htmlFor: rangeEditorFromId.current, shrink: true }, i18n.text('From')),
49
49
  fromEditor),