@reltio/components 1.4.1905 → 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 (105) 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/cjs/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.d.ts +3 -1
  37. package/cjs/ReactSortableTree/ReactSortableTree.js +2 -7
  38. package/cjs/RelationTypeSelector/RelationTypeSelector.d.ts +3 -1
  39. package/cjs/types/index.d.ts +1 -1
  40. package/esm/ActionsPanel/ActionsPanel.test.js +133 -49
  41. package/esm/AttributeListItem/AttributeListItem.spec.js +149 -97
  42. package/esm/AttributeSelector/AttributeSelector.specs.js +125 -193
  43. package/esm/AttributesErrorsPanel/AttributesErrorsPanel.specs.js +128 -71
  44. package/esm/AttributesErrorsPanel/components/Error/Error.specs.js +98 -72
  45. package/esm/AttributesErrorsPanel/store.test-data.d.ts +22 -0
  46. package/esm/AttributesErrorsPanel/store.test-data.js +26 -0
  47. package/esm/AttributesFilterSelector/AttributesFilterSelector.test.js +129 -84
  48. package/esm/AttributesFiltersButton/AttributesFiltersButton.test.js +218 -136
  49. package/esm/AttributesValuesEditor/AttributesValuesEditor.test.js +94 -67
  50. package/esm/AttributesView/AttributesView.test.js +67 -34
  51. package/esm/AutoSizeList/AutoSizeList.test.js +81 -59
  52. package/esm/{ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.js → AvatarWithFallback/AvatarWithFallback.test.js} +16 -32
  53. package/esm/BarChart/BarChart.test.js +128 -65
  54. package/esm/BasicAttributeSelector/BasicAttributeSelector.spec.js +27 -10
  55. package/esm/BasicViewContent/BasicViewContent.test.js +7 -9
  56. package/esm/BlobRenderer/BlobRenderer.test.js +28 -9
  57. package/esm/BooleanRadioEditor/BooleanRadioEditor.test.js +89 -35
  58. package/esm/BubbleChart/BubbleChart.test.js +111 -87
  59. package/esm/CloudChart/CloudChart.test.js +95 -36
  60. package/esm/CollaborationItem/CollaborationItem.test.js +67 -30
  61. package/esm/CollaborationItem/components/Comment/Comment.test.js +221 -189
  62. package/esm/CollaborationItem/components/CommentContent/CommentContent.test.js +46 -58
  63. package/esm/CollaborationItem/components/RepliedComment/RepliedComment.test.js +194 -163
  64. package/esm/CollaborationItem/components/SendMessageArea/SendMessageArea.test.js +307 -266
  65. package/esm/CollapseButton/CollapseButton.test.js +74 -15
  66. package/esm/CollapseRowButton/CollapseRowButton.test.js +82 -24
  67. package/esm/ColorBar/ColorBar.test.js +13 -15
  68. package/esm/ColumnsSettings/components/ColumnsSettingsPopup/ColumnsSettingsPopup.spec.js +207 -129
  69. package/esm/CommentsContainer/CommentsContainer.test.js +282 -211
  70. package/esm/CommentsContainer/components/CollaborationPopup/CollaborationPopup.test.js +182 -101
  71. package/esm/ConfigureColumnsPopup/ConfigureColumnsPopup.test.js +42 -41
  72. package/esm/ConfirmDeleteDialog/ConfirmDeleteDialog.test.js +77 -28
  73. package/esm/ConfirmationDialog/ConfirmationDialog.test.js +85 -48
  74. package/esm/ConnectionEditor/ConnectionEditor.test.js +300 -283
  75. package/esm/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.d.ts +3 -1
  76. package/esm/ReactSortableTree/ReactSortableTree.js +2 -7
  77. package/esm/RelationTypeSelector/RelationTypeSelector.d.ts +3 -1
  78. package/esm/types/index.d.ts +1 -1
  79. package/package.json +2 -2
  80. package/cjs/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.js +0 -100
  81. package/cjs/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.d.ts +0 -1
  82. package/cjs/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.js +0 -46
  83. package/cjs/AvatarWithFallback/AvatarWithFallback.specs.d.ts +0 -1
  84. package/cjs/AvatarWithFallback/AvatarWithFallback.specs.js +0 -27
  85. package/cjs/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.d.ts +0 -1
  86. package/cjs/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.js +0 -27
  87. package/cjs/CollaborationItem/components/Avatar/Avatar.test.d.ts +0 -1
  88. package/cjs/CollaborationItem/components/Avatar/Avatar.test.js +0 -15
  89. package/cjs/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.d.ts +0 -1
  90. package/cjs/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.js +0 -80
  91. package/esm/ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.d.ts +0 -1
  92. package/esm/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.d.ts +0 -1
  93. package/esm/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.js +0 -95
  94. package/esm/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.d.ts +0 -1
  95. package/esm/AttributesFiltersButton/components/ActionButtons/ActionButtons.test.js +0 -41
  96. package/esm/AvatarWithFallback/AvatarWithFallback.specs.d.ts +0 -1
  97. package/esm/AvatarWithFallback/AvatarWithFallback.specs.js +0 -22
  98. package/esm/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.d.ts +0 -1
  99. package/esm/BooleanRadioEditor/components/BooleanEditor/BooleanEditor.test.js +0 -22
  100. package/esm/CollaborationItem/components/Avatar/Avatar.test.d.ts +0 -1
  101. package/esm/CollaborationItem/components/Avatar/Avatar.test.js +0 -10
  102. package/esm/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.d.ts +0 -1
  103. package/esm/CollaborationItem/components/TextFieldWithMentions/TextFieldWithMentions.test.js +0 -55
  104. /package/cjs/{ActionsPanel/components/MenuItemRenderer/MenuItemRenderer.spec.d.ts → AvatarWithFallback/AvatarWithFallback.test.d.ts} +0 -0
  105. /package/{cjs/AttributesErrorsPanel/components/ErrorsPanel/ErrorsPanel.specs.d.ts → esm/AvatarWithFallback/AvatarWithFallback.test.d.ts} +0 -0
@@ -338,14 +338,12 @@ var ReactSortableTree = /** @class */ (function (_super) {
338
338
  // if onlyExpandSearchedNodes collapse the tree and search
339
339
  var _a = (0, tree_1.find)({
340
340
  getNodeKey: getNodeKey,
341
- /* eslint-disable indent */
342
341
  treeData: onlyExpandSearchedNodes
343
342
  ? (0, tree_1.toggleExpandedForAll)({
344
343
  treeData: instanceProps.treeData,
345
344
  expanded: false
346
345
  })
347
346
  : instanceProps.treeData,
348
- /* eslint-enable indent */
349
347
  searchQuery: searchQuery,
350
348
  searchMethod: searchMethod || defaultHandlers_1.defaultSearchMethod,
351
349
  searchFocusOffset: searchFocusOffset,
@@ -524,9 +522,8 @@ var ReactSortableTree = /** @class */ (function (_super) {
524
522
  // Only replace the old node if it's the one we set off to find children
525
523
  // for in the first place
526
524
  return oldNode === node
527
- ? /* eslint-disable indent */ __assign(__assign({}, oldNode), { children: childrenArray }) : oldNode;
525
+ ? __assign(__assign({}, oldNode), { children: childrenArray }) : oldNode;
528
526
  },
529
- /* eslint-enable indent */
530
527
  getNodeKey: props.getNodeKey
531
528
  }), true);
532
529
  }
@@ -617,9 +614,7 @@ var ReactSortableTree = /** @class */ (function (_super) {
617
614
  return (react_1.default.createElement(ScrollZoneVirtualList_1, __assign({}, scrollToInfo, { dragDropManager: dragDropManager, verticalStrength: _this.vStrength, horizontalStrength: _this.hStrength, speed: 30, scrollToAlignment: "start", className: _this.props.classes.rst__virtualScrollOverride, width: width, onScroll: function (_a) {
618
615
  var scrollTop = _a.scrollTop;
619
616
  _this.scrollTop = scrollTop;
620
- }, height: height, style: innerStyle, rowCount: rows.length, estimatedRowSize: typeof rowHeight !== 'function' ? rowHeight : undefined, rowHeight:
621
- /* eslint-disable indent */
622
- typeof rowHeight !== 'function'
617
+ }, height: height, style: innerStyle, rowCount: rows.length, estimatedRowSize: typeof rowHeight !== 'function' ? rowHeight : undefined, rowHeight: typeof rowHeight !== 'function'
623
618
  ? rowHeight
624
619
  : function (_a) {
625
620
  var index = _a.index;
@@ -1,6 +1,8 @@
1
+ import { ComponentProps } from 'react';
1
2
  import { TextFieldProps } from '@mui/material/TextField';
3
+ import { DropDownSelector } from '../DropDownSelector';
2
4
  import { RelationOption as RelationOptionType } from '../types';
3
- type Props = {
5
+ type Props = Omit<ComponentProps<typeof DropDownSelector>, 'value' | 'options' | 'onChange' | 'TextFieldProps'> & {
4
6
  value?: RelationOptionType;
5
7
  options?: RelationOptionType[];
6
8
  onChange?: (value: RelationOptionType) => void;
@@ -29,7 +29,7 @@ export type QueryBuilderAttribute = {
29
29
  values: Array<unknown>;
30
30
  data: QueryBuilderAttributeData;
31
31
  filter: string;
32
- operator: string;
32
+ operator: SearchOperator;
33
33
  };
34
34
  export type FiltersRowData = {
35
35
  attribute: AttributeSelectorItem;
@@ -9,72 +9,156 @@ 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 { omit } from 'ramda';
14
- import { shallow } from 'enzyme';
15
49
  import { ActionsPanel } from './ActionsPanel';
16
- import { DropDownMenuButton } from '../DropDownMenuButton';
50
+ import { render, screen, within } from '@testing-library/react';
51
+ import userEvent from '@testing-library/user-event';
17
52
  describe('ActionsPanel tests', function () {
18
- var MergeButton = function () { return React.createElement("div", null); };
53
+ var MergeButton = function (_a) {
54
+ var mode = _a.mode, onMenuClose = _a.onMenuClose;
55
+ return (React.createElement("button", { "data-reltio-id": "testButton", "data-mode": mode, onClick: onMenuClose }));
56
+ };
19
57
  var actions = [
20
- { ActionButton: MergeButton, test: 'test', show: true },
21
- { ActionButton: MergeButton, test: 'test 2' },
22
- { ActionButton: MergeButton, test: 'test 3' },
23
- { ActionButton: MergeButton, test: 'test 4', show: false }
58
+ { ActionButton: MergeButton, show: true },
59
+ { ActionButton: MergeButton },
60
+ { ActionButton: MergeButton },
61
+ { ActionButton: MergeButton, show: false }
24
62
  ];
63
+ var setUp = function (props) {
64
+ if (props === void 0) { props = { actions: actions }; }
65
+ var user = userEvent.setup();
66
+ return __assign({ user: user }, render(React.createElement(ActionsPanel, __assign({}, props))));
67
+ };
25
68
  it('should render main parts', function () {
26
- var component = shallow(React.createElement(ActionsPanel, { actions: actions }));
27
- expect(component.find(MergeButton)).toHaveLength(2);
28
- expect(component.find(DropDownMenuButton)).toHaveLength(1);
69
+ setUp();
70
+ expect(screen.getAllByTestId('testButton')).toHaveLength(2);
71
+ expect(screen.getByLabelText('More actions')).toBeInTheDocument();
29
72
  });
30
73
  it('should render empty panel if actions is empty array', function () {
31
- var component = shallow(React.createElement(ActionsPanel, { actions: [] }));
32
- expect(component.find(MergeButton)).toHaveLength(0);
33
- expect(component.find(DropDownMenuButton)).toHaveLength(0);
74
+ setUp({ actions: [] });
75
+ expect(screen.queryByTestId('testButton')).not.toBeInTheDocument();
76
+ expect(screen.queryByLabelText('More actions')).not.toBeInTheDocument();
34
77
  });
35
78
  it('should not render DropDownMenuButton if length of actions <= numberOfButtons', function () {
36
- var component = shallow(React.createElement(ActionsPanel, { actions: actions, numberOfButtons: actions.length }));
37
- expect(component.find(MergeButton)).toHaveLength(3);
38
- expect(component.find(DropDownMenuButton)).toHaveLength(0);
79
+ setUp({ actions: actions, numberOfButtons: actions.length });
80
+ expect(screen.getAllByTestId('testButton')).toHaveLength(3);
81
+ expect(screen.queryByLabelText('More actions')).not.toBeInTheDocument();
39
82
  });
40
83
  it('should render numberOfButtons action button from actions', function () {
41
- var numberOfButtons = 1;
42
- var component = shallow(React.createElement(ActionsPanel, { actions: actions, numberOfButtons: numberOfButtons }));
43
- expect(component.find(MergeButton)).toHaveLength(numberOfButtons);
44
- expect(component.find(DropDownMenuButton)).toHaveLength(1);
84
+ setUp({ actions: actions, numberOfButtons: 1 });
85
+ expect(screen.queryByTestId('testButton')).toBeInTheDocument();
86
+ expect(screen.queryByLabelText('More actions')).toBeInTheDocument();
45
87
  });
46
- it('should render ActionButton with correct props if mode is normal', function () {
47
- var onActionsMenuOpen = jest.fn();
48
- var onActionsMenuClose = jest.fn();
49
- var component = shallow(React.createElement(ActionsPanel, { actions: actions, mode: "normal", onActionsMenuOpen: onActionsMenuOpen, onActionsMenuClose: onActionsMenuClose }));
50
- var buttons = component.find(MergeButton);
51
- expect(buttons).toHaveLength(2);
52
- buttons.map(function (button, index) {
53
- expect(button.props()).toMatchObject(__assign({ mode: 'button' }, omit(['ActionButton', 'show'], actions[index])));
88
+ it('should call onActionsMenuOpen, onActionsMenuClose ', function () { return __awaiter(void 0, void 0, void 0, function () {
89
+ var onActionsMenuOpenSpy, onActionsMenuCloseSpy, user;
90
+ return __generator(this, function (_a) {
91
+ switch (_a.label) {
92
+ case 0:
93
+ onActionsMenuOpenSpy = jest.fn();
94
+ onActionsMenuCloseSpy = jest.fn();
95
+ user = setUp({
96
+ actions: actions,
97
+ onActionsMenuClose: onActionsMenuCloseSpy,
98
+ onActionsMenuOpen: onActionsMenuOpenSpy
99
+ }).user;
100
+ return [4 /*yield*/, user.click(screen.getByLabelText('More actions'))];
101
+ case 1:
102
+ _a.sent();
103
+ expect(onActionsMenuOpenSpy).toHaveBeenCalled();
104
+ return [4 /*yield*/, user.click(screen.getByLabelText('More actions'))];
105
+ case 2:
106
+ _a.sent();
107
+ expect(onActionsMenuCloseSpy).toHaveBeenCalled();
108
+ return [2 /*return*/];
109
+ }
54
110
  });
55
- var dropDownMenuButton = component.find(DropDownMenuButton);
56
- expect(dropDownMenuButton).toHaveLength(1);
57
- expect(dropDownMenuButton.props()).toMatchObject({
58
- menuItems: [actions[2]],
59
- onMenuOpen: onActionsMenuOpen,
60
- onMenuClose: onActionsMenuClose
111
+ }); });
112
+ it('should render buttons for default mode', function () {
113
+ setUp();
114
+ var buttons = screen.getAllByTestId('testButton');
115
+ expect(buttons).toHaveLength(2);
116
+ buttons.forEach(function (button) {
117
+ expect(button).toHaveAttribute('data-mode', 'button');
61
118
  });
62
119
  });
63
- it('should render ActionButton with correct props if mode is hover', function () {
64
- var onActionsMenuOpen = jest.fn();
65
- var onActionsMenuClose = jest.fn();
66
- var component = shallow(React.createElement(ActionsPanel, { actions: actions, mode: "hover", onActionsMenuOpen: onActionsMenuOpen, onActionsMenuClose: onActionsMenuClose }));
67
- var buttons = component.find(MergeButton);
120
+ it('should render buttons for hover mode', function () {
121
+ setUp({ actions: actions, mode: 'hover' });
122
+ var buttons = screen.getAllByTestId('testButton');
68
123
  expect(buttons).toHaveLength(2);
69
- buttons.map(function (button, index) {
70
- expect(button.props()).toMatchObject(__assign({ mode: 'iconButton' }, omit(['ActionButton', 'show'], actions[index])));
71
- });
72
- var dropDownMenuButton = component.find(DropDownMenuButton);
73
- expect(dropDownMenuButton).toHaveLength(1);
74
- expect(dropDownMenuButton.props()).toMatchObject({
75
- menuItems: [actions[2]],
76
- onMenuOpen: onActionsMenuOpen,
77
- onMenuClose: onActionsMenuClose
124
+ buttons.forEach(function (button) {
125
+ expect(button).toHaveAttribute('data-mode', 'iconButton');
78
126
  });
79
127
  });
128
+ describe('menu item tests', function () {
129
+ it('should call onActionsMenuClose from menu item', function () { return __awaiter(void 0, void 0, void 0, function () {
130
+ var onActionsMenuCloseSpy, user, menu;
131
+ return __generator(this, function (_a) {
132
+ switch (_a.label) {
133
+ case 0:
134
+ onActionsMenuCloseSpy = jest.fn();
135
+ user = setUp({ actions: actions, onActionsMenuClose: onActionsMenuCloseSpy }).user;
136
+ return [4 /*yield*/, user.click(screen.getByLabelText('More actions'))];
137
+ case 1:
138
+ _a.sent();
139
+ menu = screen.getByRole('menu');
140
+ return [4 /*yield*/, user.click(within(menu).getByRole('button'))];
141
+ case 2:
142
+ _a.sent();
143
+ expect(onActionsMenuCloseSpy).toHaveBeenCalled();
144
+ return [2 /*return*/];
145
+ }
146
+ });
147
+ }); });
148
+ it('should render menu button with correct mode', function () { return __awaiter(void 0, void 0, void 0, function () {
149
+ var user, menuButton;
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ user = setUp().user;
154
+ return [4 /*yield*/, user.click(screen.getByLabelText('More actions'))];
155
+ case 1:
156
+ _a.sent();
157
+ menuButton = within(screen.getByRole('menu')).getByRole('button');
158
+ expect(menuButton).toHaveAttribute('data-mode', 'menuItem');
159
+ return [2 /*return*/];
160
+ }
161
+ });
162
+ }); });
163
+ });
80
164
  });
@@ -9,141 +9,193 @@ 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
49
  import { render, screen } from '@testing-library/react';
14
- import { mount, shallow } from 'enzyme';
15
- import MenuItem from '@mui/material/MenuItem';
16
- import ListItemText from '@mui/material/ListItemText';
17
- import AttributeListItem, { RecommendedIconWithTooltip } from './AttributeListItem';
18
- import Checkbox from '@mui/material/Checkbox';
19
- import SimpleAttrIcon from '../icons/SimpleAttribute';
20
- import NestedAttrIcon from '../icons/NestedAttribute';
21
- import ReferenceAttrIcon from '../icons//ReferenceAttribute';
50
+ import AttributeListItem from './AttributeListItem';
22
51
  import SomeLogoIcon from '@mui/icons-material/PlayArrow';
23
- import { AttrTypeIcon } from './components/AttrTypeIcon';
52
+ import { getMuiIconByName } from '../test-utils';
53
+ import userEvent from '@testing-library/user-event';
24
54
  describe('AttributeListItem tests', function () {
25
55
  var defaultProps = {
26
56
  data: {},
27
57
  checked: false,
28
58
  label: 'Some Title'
29
59
  };
30
- it('should render main components', function () {
31
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps)));
32
- expect(component.find(Checkbox).length).toBe(1);
33
- expect(component.find(Checkbox).prop('disabled')).toBe(false);
34
- expect(component.text().includes('Some Title')).toBe(true);
60
+ var setUp = function (props) {
61
+ if (props === void 0) { props = defaultProps; }
62
+ var user = userEvent.setup();
63
+ return __assign({ user: user }, render(React.createElement(AttributeListItem, __assign({}, props))));
64
+ };
65
+ it('should render default components', function () {
66
+ setUp();
67
+ expect(screen.getByText(defaultProps.label)).toBeInTheDocument();
68
+ expect(screen.getByRole('checkbox')).not.toBeDisabled();
69
+ expect(screen.getByTestId('SvgSimpleAttribute')).toBeInTheDocument();
35
70
  });
36
71
  it('should render main components with label as a node', function () {
37
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { label: React.createElement("span", null, "Some Title") })));
38
- expect(component.find(ListItemText).length).toBe(1);
39
- expect(component.find(ListItemText).text()).toBe('Some Title');
72
+ var label = React.createElement("span", null, "Some Title");
73
+ setUp(__assign(__assign({}, defaultProps), { label: label }));
74
+ expect(screen.getByText('Some Title')).toBeInTheDocument();
40
75
  });
41
76
  it('should render checked checkbox', function () {
42
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { checked: true })));
43
- var checkbox = component.find(Checkbox);
44
- expect(checkbox.prop('checked')).toBe(true);
45
- expect(component.find(Checkbox).prop('disabled')).toBe(false);
46
- expect(checkbox.prop('className').includes('checked')).toBe(true);
77
+ setUp(__assign(__assign({}, defaultProps), { checked: true }));
78
+ var chechbox = screen.getByRole('checkbox');
79
+ expect(chechbox).toBeChecked();
80
+ expect(chechbox).not.toBeDisabled();
81
+ expect(chechbox.parentNode).toHaveClass('checked');
47
82
  });
48
83
  it('should render unchecked checkbox', function () {
49
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { checked: false })));
50
- var checkbox = component.find(Checkbox);
51
- expect(checkbox.prop('checked')).toBe(false);
52
- expect(checkbox.prop('className').includes('checked')).toBe(false);
53
- });
54
- it('should render simple attribute icon by default', function () {
55
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps)));
56
- expect(component.find(SimpleAttrIcon)).toHaveLength(1);
57
- expect(component.find(NestedAttrIcon)).toHaveLength(0);
58
- expect(component.find(ReferenceAttrIcon)).toHaveLength(0);
59
- expect(component.find(RecommendedIconWithTooltip)).toHaveLength(0);
84
+ setUp(__assign(__assign({}, defaultProps), { checked: false }));
85
+ var chechbox = screen.getByRole('checkbox');
86
+ expect(chechbox).not.toBeChecked();
87
+ expect(chechbox).not.toBeDisabled();
88
+ expect(chechbox.parentNode).not.toHaveClass('checked');
60
89
  });
61
90
  it('should render nested attribute icon', function () {
62
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: {
91
+ setUp(__assign(__assign({}, defaultProps), { data: {
63
92
  attrType: {
64
93
  type: 'Nested',
65
94
  name: 'name',
66
95
  uri: 'uri'
67
96
  }
68
- } })));
69
- expect(component.find(SimpleAttrIcon)).toHaveLength(0);
70
- expect(component.find(NestedAttrIcon)).toHaveLength(1);
71
- expect(component.find(ReferenceAttrIcon)).toHaveLength(0);
72
- expect(component.find(RecommendedIconWithTooltip)).toHaveLength(0);
97
+ } }));
98
+ expect(screen.getByTestId('SvgNestedAttribute')).toBeInTheDocument();
73
99
  });
74
100
  it('should render reference attribute icon', function () {
75
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: {
101
+ setUp(__assign(__assign({}, defaultProps), { data: {
76
102
  attrType: {
77
103
  type: 'Reference',
78
104
  name: 'name',
79
105
  uri: 'uri'
80
106
  }
81
- } })));
82
- expect(component.find(SimpleAttrIcon)).toHaveLength(0);
83
- expect(component.find(NestedAttrIcon)).toHaveLength(0);
84
- expect(component.find(ReferenceAttrIcon)).toHaveLength(1);
85
- expect(component.find(RecommendedIconWithTooltip)).toHaveLength(0);
107
+ } }));
108
+ expect(screen.getByTestId('SvgReferenceAttribute')).toBeInTheDocument();
86
109
  });
87
110
  it("should render recommended icon if groupId === 'recommended'", function () {
88
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { hideIcon: false, data: {}, groupId: 'recommended' })));
89
- expect(component.find(SimpleAttrIcon)).toHaveLength(0);
90
- expect(component.find(NestedAttrIcon)).toHaveLength(0);
91
- expect(component.find(ReferenceAttrIcon)).toHaveLength(0);
92
- expect(component.find(RecommendedIconWithTooltip)).toHaveLength(1);
111
+ setUp(__assign(__assign({}, defaultProps), { hideIcon: false, data: {}, groupId: 'recommended' }));
112
+ expect(screen.getByTestId('SvgRecommended')).toBeInTheDocument();
93
113
  });
94
114
  it('should not render icon if props.hideIcon === true', function () {
95
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { hideIcon: true, data: {} })));
96
- expect(component.find(SimpleAttrIcon)).toHaveLength(0);
97
- expect(component.find(NestedAttrIcon)).toHaveLength(0);
98
- expect(component.find(ReferenceAttrIcon)).toHaveLength(0);
99
- expect(component.find(RecommendedIconWithTooltip)).toHaveLength(0);
115
+ setUp(__assign(__assign({}, defaultProps), { hideIcon: true }));
116
+ expect(screen.queryByTestId('SvgSimpleAttribute')).not.toBeInTheDocument();
100
117
  });
101
118
  it('should render logo attribute icon', function () {
102
- var component = shallow(React.createElement(AttributeListItem, __assign({}, defaultProps, { LogoIcon: SomeLogoIcon })));
103
- expect(component.find(AttrTypeIcon).length).toBe(1);
104
- expect(component.find('.logoIcon').length).toBe(1);
105
- expect(component.find(ListItemText).length).toBe(1);
106
- });
107
- it('should call onClick props with checked state and attributeTypes', function () {
108
- var onClick = jest.fn();
109
- var data = {};
110
- var groupId = 'tesGroupId';
111
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: data, onClick: onClick, groupId: groupId })));
112
- component.find(MenuItem).find('li').simulate('click');
113
- expect(onClick).toBeCalledWith(data, true, groupId);
114
- component.setProps({ checked: true });
115
- component.find(MenuItem).find('li').simulate('click');
116
- expect(onClick).toBeCalledWith(data, false, groupId);
117
- });
119
+ setUp(__assign(__assign({}, defaultProps), { LogoIcon: SomeLogoIcon }));
120
+ expect(getMuiIconByName('PlayArrow')).toBeInTheDocument();
121
+ });
122
+ it('should call onClick props with checked state and attributeTypes', function () { return __awaiter(void 0, void 0, void 0, function () {
123
+ var onClick, data, groupId, _a, user, rerender;
124
+ return __generator(this, function (_b) {
125
+ switch (_b.label) {
126
+ case 0:
127
+ onClick = jest.fn();
128
+ data = {};
129
+ groupId = 'tesGroupId';
130
+ _a = setUp(__assign(__assign({}, defaultProps), { data: data, onClick: onClick, groupId: groupId })), user = _a.user, rerender = _a.rerender;
131
+ return [4 /*yield*/, user.click(screen.getByRole('menuitem'))];
132
+ case 1:
133
+ _b.sent();
134
+ expect(onClick).toBeCalledWith(data, true, groupId);
135
+ rerender(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: data, onClick: onClick, groupId: groupId, checked: true })));
136
+ return [4 /*yield*/, user.click(screen.getByRole('menuitem'))];
137
+ case 2:
138
+ _b.sent();
139
+ expect(onClick).toBeCalledWith(data, false, groupId);
140
+ return [2 /*return*/];
141
+ }
142
+ });
143
+ }); });
118
144
  it('should hide checkbox when hideCheckBox is set', function () {
119
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: {}, hideCheckBox: true })));
120
- expect(component.find(Checkbox)).toHaveLength(0);
121
- });
122
- it('should unable click for nested attribute when hideCheckBox is set', function () {
123
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { data: {
124
- attrType: {
125
- type: 'Nested',
126
- name: 'name',
127
- uri: 'uri'
128
- }
129
- }, hideCheckBox: true })));
130
- var menuItem = component.find(MenuItem);
131
- expect(menuItem.prop('onClick')).toBeUndefined();
132
- expect(menuItem.prop('className')).toContain('defaultCursor');
133
- });
134
- it('should do not allow to click on attribute when notSelectable is true', function () {
135
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { notSelectable: true })));
136
- var menuItem = component.find(MenuItem);
137
- expect(menuItem.prop('onClick')).toBeUndefined();
138
- expect(menuItem.prop('className')).toContain('defaultCursor');
139
- expect(component.find(Checkbox).prop('disabled')).toBe(true);
140
- });
145
+ setUp(__assign(__assign({}, defaultProps), { hideCheckBox: true }));
146
+ expect(screen.queryByRole('checkbox')).not.toBeInTheDocument();
147
+ });
148
+ it('should unable click for nested attribute when hideCheckBox is set', function () { return __awaiter(void 0, void 0, void 0, function () {
149
+ var onClick, user;
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ onClick = jest.fn();
154
+ user = setUp(__assign(__assign({}, defaultProps), { onClick: onClick, data: {
155
+ attrType: {
156
+ type: 'Nested',
157
+ name: 'name',
158
+ uri: 'uri'
159
+ }
160
+ }, hideCheckBox: true })).user;
161
+ return [4 /*yield*/, user.click(screen.getByRole('menuitem'))];
162
+ case 1:
163
+ _a.sent();
164
+ expect(onClick).not.toBeCalled();
165
+ return [2 /*return*/];
166
+ }
167
+ });
168
+ }); });
169
+ it('should do not allow to click on attribute when notSelectable is true', function () { return __awaiter(void 0, void 0, void 0, function () {
170
+ var onClick, user, menuItem;
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0:
174
+ onClick = jest.fn();
175
+ user = setUp(__assign(__assign({}, defaultProps), { onClick: onClick, data: {
176
+ attrType: {
177
+ type: 'Nested',
178
+ name: 'name',
179
+ uri: 'uri'
180
+ }
181
+ }, notSelectable: true })).user;
182
+ menuItem = screen.getByRole('menuitem');
183
+ return [4 /*yield*/, user.click(menuItem)];
184
+ case 1:
185
+ _a.sent();
186
+ expect(menuItem).toHaveClass('defaultCursor');
187
+ expect(onClick).not.toBeCalled();
188
+ expect(screen.getByRole('checkbox')).toBeDisabled();
189
+ return [2 /*return*/];
190
+ }
191
+ });
192
+ }); });
141
193
  it('should render RequiredMark if isRequired=true', function () {
142
- var component = mount(React.createElement(AttributeListItem, __assign({}, defaultProps, { isRequired: true })));
143
- expect(component.find('RequiredMark')).toHaveLength(1);
194
+ setUp(__assign(__assign({}, defaultProps), { isRequired: true }));
195
+ expect(screen.getByText('*')).toBeInTheDocument();
144
196
  });
145
197
  it('should disable notSelectable if disableNonSelectable=true', function () {
146
- render(React.createElement(AttributeListItem, __assign({}, defaultProps, { isRequired: true, notSelectable: true, disableNonSelectable: true })));
147
- expect(screen.getByRole('checkbox')).toHaveAttribute('disabled');
198
+ setUp(__assign(__assign({}, defaultProps), { isRequired: true, notSelectable: true, disableNonSelectable: true }));
199
+ expect(screen.getByRole('checkbox')).toBeDisabled();
148
200
  });
149
201
  });