@reltio/components 1.4.1999 → 1.4.2001

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 (127) hide show
  1. package/cjs/RCTree/RCTree.d.ts +17 -14
  2. package/cjs/RCTree/RCTree.js +24 -8
  3. package/cjs/RCTree/RCTreeLevelLines.d.ts +4 -0
  4. package/cjs/RCTree/RCTreeLevelLines.js +32 -0
  5. package/cjs/RCTree/RCTreeSwitchRenderer.d.ts +7 -0
  6. package/cjs/RCTree/{DefaultSwitchRenderer.js → RCTreeSwitchRenderer.js} +3 -3
  7. package/cjs/RCTree/helper.d.ts +10 -5
  8. package/cjs/RCTree/helper.js +49 -3
  9. package/cjs/RCTree/index.d.ts +2 -0
  10. package/cjs/RCTree/index.js +5 -1
  11. package/cjs/RCTree/levelLinesStyles.d.ts +5 -0
  12. package/cjs/RCTree/levelLinesStyles.js +53 -0
  13. package/cjs/RCTree/styles.d.ts +1 -1
  14. package/cjs/RCTree/styles.js +63 -30
  15. package/cjs/RCTree/types.d.ts +3 -2
  16. package/cjs/RCTree/useDnd.d.ts +16 -16
  17. package/cjs/features/crosswalks/AttributesTable/AttributesTable.test-data.d.ts +36 -0
  18. package/cjs/features/crosswalks/AttributesTable/AttributesTable.test-data.js +288 -0
  19. package/cjs/features/crosswalks/AttributesTable/AttributesTable.test.js +708 -370
  20. package/cjs/features/crosswalks/ColoredBlock/ColoredBlock.test.js +77 -15
  21. package/cjs/features/crosswalks/CopyableValueField/CopyableValueField.test.js +85 -15
  22. package/cjs/features/crosswalks/CrosswalkAttributes/CrosswalkAttributes.test.js +265 -193
  23. package/cjs/features/crosswalks/CrosswalkDateEditor/CrosswalkDateEditor.test.js +106 -12
  24. package/cjs/features/crosswalks/CrosswalkDragLayer/CrosswalkDragLayer.test.js +21 -9
  25. package/cjs/features/crosswalks/CrosswalkEditor/CrosswalkEditor.test.js +190 -90
  26. package/cjs/features/crosswalks/CrosswalkRow/CrosswalkRow.test.js +323 -225
  27. package/cjs/features/crosswalks/ShowDependentLink/ShowDependentLink.test.js +75 -12
  28. package/cjs/features/crosswalks/SourceCrosswalksRow/SourceCrosswalksRow.test.js +171 -138
  29. package/cjs/index.d.ts +1 -1
  30. package/cjs/index.js +6 -4
  31. package/esm/RCTree/RCTree.d.ts +17 -14
  32. package/esm/RCTree/RCTree.js +26 -10
  33. package/esm/RCTree/RCTreeLevelLines.d.ts +4 -0
  34. package/esm/RCTree/RCTreeLevelLines.js +25 -0
  35. package/esm/RCTree/RCTreeSwitchRenderer.d.ts +7 -0
  36. package/esm/RCTree/{DefaultSwitchRenderer.js → RCTreeSwitchRenderer.js} +1 -1
  37. package/esm/RCTree/helper.d.ts +10 -5
  38. package/esm/RCTree/helper.js +44 -1
  39. package/esm/RCTree/index.d.ts +2 -0
  40. package/esm/RCTree/index.js +2 -0
  41. package/esm/RCTree/levelLinesStyles.d.ts +5 -0
  42. package/esm/RCTree/levelLinesStyles.js +50 -0
  43. package/esm/RCTree/styles.d.ts +1 -1
  44. package/esm/RCTree/styles.js +63 -30
  45. package/esm/RCTree/types.d.ts +3 -2
  46. package/esm/RCTree/useDnd.d.ts +16 -16
  47. package/esm/features/crosswalks/AttributesTable/AttributesTable.test-data.d.ts +36 -0
  48. package/esm/features/crosswalks/AttributesTable/AttributesTable.test-data.js +283 -0
  49. package/esm/features/crosswalks/AttributesTable/AttributesTable.test.js +711 -350
  50. package/esm/features/crosswalks/ColoredBlock/ColoredBlock.test.js +77 -15
  51. package/esm/features/crosswalks/CopyableValueField/CopyableValueField.test.js +85 -15
  52. package/esm/features/crosswalks/CrosswalkAttributes/CrosswalkAttributes.test.js +266 -194
  53. package/esm/features/crosswalks/CrosswalkDateEditor/CrosswalkDateEditor.test.js +106 -12
  54. package/esm/features/crosswalks/CrosswalkDragLayer/CrosswalkDragLayer.test.js +21 -9
  55. package/esm/features/crosswalks/CrosswalkEditor/CrosswalkEditor.test.js +190 -90
  56. package/esm/features/crosswalks/CrosswalkRow/CrosswalkRow.test.js +324 -226
  57. package/esm/features/crosswalks/ShowDependentLink/ShowDependentLink.test.js +75 -12
  58. package/esm/features/crosswalks/SourceCrosswalksRow/SourceCrosswalksRow.test.js +171 -138
  59. package/esm/index.d.ts +1 -1
  60. package/esm/index.js +1 -1
  61. package/package.json +1 -1
  62. package/cjs/RCTree/DefaultSwitchRenderer.d.ts +0 -7
  63. package/cjs/features/crosswalks/AttributesTable/IntegrationAttributesTable.test-data.d.ts +0 -3
  64. package/cjs/features/crosswalks/AttributesTable/IntegrationAttributesTable.test-data.js +0 -52
  65. package/cjs/features/crosswalks/AttributesTable/IntegrationAttributesTable.test.d.ts +0 -1
  66. package/cjs/features/crosswalks/AttributesTable/IntegrationAttributesTable.test.js +0 -323
  67. package/cjs/features/crosswalks/AttributesTable/components/AddAttributesButton/AddAttributesButton.test.d.ts +0 -1
  68. package/cjs/features/crosswalks/AttributesTable/components/AddAttributesButton/AddAttributesButton.test.js +0 -142
  69. package/cjs/features/crosswalks/AttributesTable/components/AttributeValuesRenderer/AttributeValuesRenderer.test.d.ts +0 -1
  70. package/cjs/features/crosswalks/AttributesTable/components/AttributeValuesRenderer/AttributeValuesRenderer.test.js +0 -146
  71. package/cjs/features/crosswalks/AttributesTable/components/AttributesHeadCellRenderer/AttributesHeadCellRenderer.test.d.ts +0 -1
  72. package/cjs/features/crosswalks/AttributesTable/components/AttributesHeadCellRenderer/AttributesHeadCellRenderer.test.js +0 -50
  73. package/cjs/features/crosswalks/AttributesTable/components/ConfirmEditIgnoredDialog/ConfirmEditIgnoredDialog.test.d.ts +0 -1
  74. package/cjs/features/crosswalks/AttributesTable/components/ConfirmEditIgnoredDialog/ConfirmEditIgnoredDialog.test.js +0 -58
  75. package/cjs/features/crosswalks/AttributesTable/components/CountRenderer/CountRenderer.test.d.ts +0 -1
  76. package/cjs/features/crosswalks/AttributesTable/components/CountRenderer/CountRenderer.test.js +0 -14
  77. package/cjs/features/crosswalks/AttributesTable/components/ImageAttributesRenderer/ImageAttributesRenderer.test.d.ts +0 -1
  78. package/cjs/features/crosswalks/AttributesTable/components/ImageAttributesRenderer/ImageAttributesRenderer.test.js +0 -110
  79. package/cjs/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.test.d.ts +0 -1
  80. package/cjs/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.test.js +0 -111
  81. package/cjs/features/crosswalks/AttributesTable/components/OvValuesRenderer/OvValuesRenderer.test.d.ts +0 -1
  82. package/cjs/features/crosswalks/AttributesTable/components/OvValuesRenderer/OvValuesRenderer.test.js +0 -67
  83. package/cjs/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.test.d.ts +0 -1
  84. package/cjs/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.test.js +0 -193
  85. package/cjs/features/crosswalks/AttributesTable/components/RuleTypeInfoButton/RuleTypeInfoButton.test.d.ts +0 -1
  86. package/cjs/features/crosswalks/AttributesTable/components/RuleTypeInfoButton/RuleTypeInfoButton.test.js +0 -22
  87. package/cjs/features/crosswalks/AttributesTable/components/RuleTypeRenderer/RuleTypeRenderer.test.d.ts +0 -1
  88. package/cjs/features/crosswalks/AttributesTable/components/RuleTypeRenderer/RuleTypeRenderer.test.js +0 -58
  89. package/cjs/features/crosswalks/AttributesTable/components/SimpleAttributesRenderer/SimpleAttributesRenderer.test.d.ts +0 -1
  90. package/cjs/features/crosswalks/AttributesTable/components/SimpleAttributesRenderer/SimpleAttributesRenderer.test.js +0 -69
  91. package/cjs/features/crosswalks/CrosswalkDateEditor/IntegrationCrosswalkDateEditor.test.d.ts +0 -1
  92. package/cjs/features/crosswalks/CrosswalkDateEditor/IntegrationCrosswalkDateEditor.test.js +0 -137
  93. package/cjs/features/crosswalks/CrosswalkDragLayer/components/CrosswalkDragPreview/CrosswalkDragPreview.test.d.ts +0 -1
  94. package/cjs/features/crosswalks/CrosswalkDragLayer/components/CrosswalkDragPreview/CrosswalkDragPreview.test.js +0 -56
  95. package/esm/RCTree/DefaultSwitchRenderer.d.ts +0 -7
  96. package/esm/features/crosswalks/AttributesTable/IntegrationAttributesTable.test-data.d.ts +0 -3
  97. package/esm/features/crosswalks/AttributesTable/IntegrationAttributesTable.test-data.js +0 -47
  98. package/esm/features/crosswalks/AttributesTable/IntegrationAttributesTable.test.d.ts +0 -1
  99. package/esm/features/crosswalks/AttributesTable/IntegrationAttributesTable.test.js +0 -318
  100. package/esm/features/crosswalks/AttributesTable/components/AddAttributesButton/AddAttributesButton.test.d.ts +0 -1
  101. package/esm/features/crosswalks/AttributesTable/components/AddAttributesButton/AddAttributesButton.test.js +0 -137
  102. package/esm/features/crosswalks/AttributesTable/components/AttributeValuesRenderer/AttributeValuesRenderer.test.d.ts +0 -1
  103. package/esm/features/crosswalks/AttributesTable/components/AttributeValuesRenderer/AttributeValuesRenderer.test.js +0 -141
  104. package/esm/features/crosswalks/AttributesTable/components/AttributesHeadCellRenderer/AttributesHeadCellRenderer.test.d.ts +0 -1
  105. package/esm/features/crosswalks/AttributesTable/components/AttributesHeadCellRenderer/AttributesHeadCellRenderer.test.js +0 -45
  106. package/esm/features/crosswalks/AttributesTable/components/ConfirmEditIgnoredDialog/ConfirmEditIgnoredDialog.test.d.ts +0 -1
  107. package/esm/features/crosswalks/AttributesTable/components/ConfirmEditIgnoredDialog/ConfirmEditIgnoredDialog.test.js +0 -53
  108. package/esm/features/crosswalks/AttributesTable/components/CountRenderer/CountRenderer.test.d.ts +0 -1
  109. package/esm/features/crosswalks/AttributesTable/components/CountRenderer/CountRenderer.test.js +0 -9
  110. package/esm/features/crosswalks/AttributesTable/components/ImageAttributesRenderer/ImageAttributesRenderer.test.d.ts +0 -1
  111. package/esm/features/crosswalks/AttributesTable/components/ImageAttributesRenderer/ImageAttributesRenderer.test.js +0 -105
  112. package/esm/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.test.d.ts +0 -1
  113. package/esm/features/crosswalks/AttributesTable/components/NestedAttributesRenderer/NestedAttributesRenderer.test.js +0 -106
  114. package/esm/features/crosswalks/AttributesTable/components/OvValuesRenderer/OvValuesRenderer.test.d.ts +0 -1
  115. package/esm/features/crosswalks/AttributesTable/components/OvValuesRenderer/OvValuesRenderer.test.js +0 -62
  116. package/esm/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.test.d.ts +0 -1
  117. package/esm/features/crosswalks/AttributesTable/components/ReferenceAttributesRenderer/ReferenceAttributesRenderer.test.js +0 -188
  118. package/esm/features/crosswalks/AttributesTable/components/RuleTypeInfoButton/RuleTypeInfoButton.test.d.ts +0 -1
  119. package/esm/features/crosswalks/AttributesTable/components/RuleTypeInfoButton/RuleTypeInfoButton.test.js +0 -17
  120. package/esm/features/crosswalks/AttributesTable/components/RuleTypeRenderer/RuleTypeRenderer.test.d.ts +0 -1
  121. package/esm/features/crosswalks/AttributesTable/components/RuleTypeRenderer/RuleTypeRenderer.test.js +0 -53
  122. package/esm/features/crosswalks/AttributesTable/components/SimpleAttributesRenderer/SimpleAttributesRenderer.test.d.ts +0 -1
  123. package/esm/features/crosswalks/AttributesTable/components/SimpleAttributesRenderer/SimpleAttributesRenderer.test.js +0 -64
  124. package/esm/features/crosswalks/CrosswalkDateEditor/IntegrationCrosswalkDateEditor.test.d.ts +0 -1
  125. package/esm/features/crosswalks/CrosswalkDateEditor/IntegrationCrosswalkDateEditor.test.js +0 -132
  126. package/esm/features/crosswalks/CrosswalkDragLayer/components/CrosswalkDragPreview/CrosswalkDragPreview.test.d.ts +0 -1
  127. package/esm/features/crosswalks/CrosswalkDragLayer/components/CrosswalkDragPreview/CrosswalkDragPreview.test.js +0 -28
@@ -9,394 +9,755 @@ 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
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
12
57
  import React from 'react';
13
- import { mount, shallow } from 'enzyme';
14
- import { act } from 'react-dom/test-utils';
15
- import i18n from 'ui-i18n';
16
- import Button from '@mui/material/Button';
17
- import { BasicTable } from '../../../BasicTable';
18
- import { ColumnsSettings } from '../../../ColumnsSettings';
19
- import { BasicViewHeader } from '../../../BasicViewHeader';
20
- import { LinearLoadIndicator } from '../../../LinearLoadIndicator';
21
- import { EmptyStub } from '../../../EmptyStub';
22
- import { useMdmMetadata } from '../../../contexts/MdmModuleContext';
23
- import * as helpers from './helpers';
24
- import { COLUMNS_DATA, DEFAULT_VISIBLE_COLUMNS } from './helpers';
25
- import { AttributesFactory } from './components/AttributesFactory';
26
- import { OvValuesRenderer } from './components/OvValuesRenderer';
27
- import { RuleTypeRenderer } from './components/RuleTypeRenderer';
28
- import { ConfirmEditIgnoredDialog } from './components/ConfirmEditIgnoredDialog';
58
+ import { render, fireEvent, within, screen } from '@testing-library/react';
59
+ import userEvent from '@testing-library/user-event';
60
+ import { DndProvider } from 'react-dnd';
61
+ import HTML5Backend from 'react-dnd-html5-backend';
62
+ import { config } from 'react-transition-group';
63
+ import { mockBasicTableSizing } from '../../../test-utils';
64
+ import { MdmModuleProvider } from '../../../contexts/MdmModuleContext';
65
+ import { createEntity, createMetadata, selectedAttributeTypes } from './AttributesTable.test-data';
29
66
  import AttributesTable from './AttributesTable';
30
- jest.mock('react-virtualized-auto-sizer', function () {
31
- return jest.fn().mockImplementation(function (_a) {
32
- var children = _a.children;
33
- return React.createElement("div", null, children());
34
- });
35
- });
36
- jest.mock('./components/OvValuesRenderer', function () { return ({
37
- OvValuesRenderer: jest.fn()
38
- }); });
39
- jest.mock('./components/RuleTypeRenderer', function () { return ({
40
- RuleTypeRenderer: jest.fn()
41
- }); });
42
- jest.mock('./components/ConfirmEditIgnoredDialog', function () { return ({
43
- ConfirmEditIgnoredDialog: jest.fn()
44
- }); });
45
- jest.mock('../../../contexts/MdmModuleContext', function () { return (__assign(__assign({}, jest.requireActual('../../../contexts/MdmModuleContext')), { useMdmMetadata: jest.fn() })); });
46
- describe('AttributesTable tests', function () {
47
- var metadata = {
48
- entityTypes: [
67
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { debounce: function (x) { return x; } })); });
68
+ var visibleColumns = ['ovValues', 'values'];
69
+ var crosswalksMap = {
70
+ entity: {
71
+ 'entities/01L2n5z/attributes/Boolean/5nmc3Cp': [
49
72
  {
50
- uri: 'configuration/entityTypes/HCP',
51
- label: 'HCP',
52
73
  attributes: [
53
- {
54
- label: 'Country Code',
55
- name: 'CountryCode',
56
- type: 'String',
57
- uri: 'configuration/entityTypes/HCP/attributes/CountryCode'
58
- },
59
- {
60
- label: 'Date',
61
- name: 'Date',
62
- type: 'Date',
63
- uri: 'configuration/entityTypes/HCP/attributes/Date'
64
- },
65
- {
66
- label: 'Affiliated with',
67
- name: 'affiliatedwith',
68
- type: 'String',
69
- uri: 'configuration/entityTypes/HCP/attributes/affiliatedwith',
70
- hidden: true
71
- }
72
- ]
74
+ 'entities/01L2n5z/attributes/TextField/5noU1aB',
75
+ 'entities/01L2n5z/attributes/Boolean/5nmc3Cp'
76
+ ],
77
+ type: 'configuration/sources/Reltio',
78
+ uri: 'entities/01L2n5z/crosswalks/7F10sMx',
79
+ value: '01L2n5z'
80
+ }
81
+ ],
82
+ 'entities/01L2n5z/attributes/TextField/5noU1aB': [
83
+ {
84
+ attributes: [
85
+ 'entities/01L2n5z/attributes/TextField/5noU1aB',
86
+ 'entities/01L2n5z/attributes/Boolean/5nmc3Cp'
87
+ ],
88
+ type: 'configuration/sources/Reltio',
89
+ uri: 'entities/01L2n5z/crosswalks/7F10sMx',
90
+ value: '01L2n5z'
73
91
  }
74
92
  ]
93
+ },
94
+ relation: {}
95
+ };
96
+ var metadata = createMetadata();
97
+ var defaultProps = {
98
+ entity: createEntity(),
99
+ isLoading: false,
100
+ crosswalksMap: crosswalksMap,
101
+ visibleColumns: visibleColumns,
102
+ onChangeVisibleColumns: function () { },
103
+ readOnly: false,
104
+ onDelete: function () { },
105
+ onPin: function () { },
106
+ onIgnore: function () { },
107
+ onEdit: function () { },
108
+ onAdd: function () { },
109
+ selectedAttributeTypes: selectedAttributeTypes,
110
+ onSelectAttributeTypes: function () { },
111
+ additionalHeaderItems: null,
112
+ className: 'className',
113
+ emptyTempAttributeUris: []
114
+ };
115
+ var setUp = function (props) {
116
+ var user = userEvent.setup({ delay: null, skipHover: true });
117
+ var Providers = function (_a) {
118
+ var children = _a.children;
119
+ return (React.createElement(DndProvider, { backend: HTML5Backend },
120
+ React.createElement(MdmModuleProvider, { values: { metadata: metadata } }, children)));
75
121
  };
76
- var props = {
77
- entity: {
78
- attributes: {
79
- FirstName: [
80
- {
81
- uri: 'entities/1/attributes/FirstName/1',
82
- type: 'configuration/entityTypes/HCP/attributes/FirstName',
83
- ov: true,
84
- value: '90909'
85
- }
86
- ],
87
- CountryCode: [
88
- {
89
- uri: 'entities/1/attributes/CountryCode/1',
90
- type: 'configuration/entityTypes/HCP/attributes/CountryCode',
91
- value: 'Italy',
92
- lookupCode: 'IT',
93
- ov: true
94
- }
95
- ],
96
- Date: [
97
- {
98
- uri: 'entities/1/attributes/Date/1',
99
- type: 'configuration/entityTypes/HCP/attributes/Date',
100
- value: '123456',
101
- ov: false
102
- }
103
- ],
104
- affiliatedwith: [
105
- {
106
- uri: 'entities/1/attributes/affiliatedWith/1',
107
- type: 'configuration/entityTypes/HCP/attributes/affiliatedwith',
108
- value: 'value',
109
- ov: true
110
- }
111
- ],
112
- paging: {
113
- 'configuration/entityTypes/HCP/attributes/affiliatedwith': {
114
- totalValues: 6,
115
- totalOvValues: 1
116
- }
122
+ var renderer = render(React.createElement(AttributesTable, __assign({}, props)), { wrapper: Providers });
123
+ return __assign(__assign({}, renderer), { user: user });
124
+ };
125
+ describe('attribute table tests', function () {
126
+ var getRowByIndex = function (index) {
127
+ var fixHeadAndFirstColumnContainer = screen.queryByTestId('fix-head-and-fix-column-container');
128
+ return within(fixHeadAndFirstColumnContainer).queryAllByTestId("base-cell-".concat(index));
129
+ };
130
+ var getCellByIndexes = function (rowIndex, columnIndex) {
131
+ var row = getRowByIndex(rowIndex);
132
+ return row[columnIndex];
133
+ };
134
+ var editTextFieldAttribute = function (user_1) {
135
+ var args_1 = [];
136
+ for (var _i = 1; _i < arguments.length; _i++) {
137
+ args_1[_i - 1] = arguments[_i];
138
+ }
139
+ return __awaiter(void 0, __spreadArray([user_1], args_1, true), void 0, function (user, valueIndex) {
140
+ var attribute;
141
+ if (valueIndex === void 0) { valueIndex = 0; }
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ attribute = within(getCellByIndexes(0, 1)).getByTestId("value-index-".concat(valueIndex));
146
+ return [4 /*yield*/, user.hover(attribute)];
147
+ case 1:
148
+ _a.sent();
149
+ return [4 /*yield*/, user.click(within(attribute).queryByRole('button', { name: 'More actions' }))];
150
+ case 2:
151
+ _a.sent();
152
+ return [4 /*yield*/, user.click(screen.getByText('Edit'))];
153
+ case 3:
154
+ _a.sent();
155
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), ' newValue')];
156
+ case 4:
157
+ _a.sent();
158
+ return [4 /*yield*/, user.keyboard('[Enter]')];
159
+ case 5:
160
+ _a.sent();
161
+ return [2 /*return*/];
117
162
  }
118
- },
119
- type: 'configuration/entityTypes/HCP',
120
- uri: 'entities/1'
121
- },
122
- crosswalksMap: {
123
- entity: {},
124
- relation: {}
125
- },
126
- isLoading: false,
127
- onChangeVisibleColumns: jest.fn(),
128
- onDelete: jest.fn(),
129
- onPin: jest.fn(),
130
- onIgnore: jest.fn(),
131
- onEdit: jest.fn(),
132
- onAdd: jest.fn(),
133
- selectedAttributeTypes: [
134
- {
135
- label: 'Country Code',
136
- name: 'CountryCode',
137
- type: 'String',
138
- uri: 'configuration/entityTypes/HCP/attributes/CountryCode'
139
- },
140
- {
141
- label: 'Date',
142
- name: 'Date',
143
- type: 'Date',
144
- uri: 'configuration/entityTypes/HCP/attributes/Date'
145
- }
146
- ],
147
- activeSurvivorshipGroupUri: 'activeSurvivorshipGroupUri',
148
- onSelectAttributeTypes: jest.fn(),
149
- emptyTempAttributeUris: []
163
+ });
164
+ });
165
+ };
166
+ var checkBasicTableElements = function () {
167
+ expect(screen.getByText('Sources')).toBeInTheDocument();
168
+ expect(screen.getByLabelText('Show/hide columns')).toBeInTheDocument();
169
+ expect(screen.getByText('Attributes & OV')).toBeInTheDocument();
170
+ expect(screen.getByText('Attribute values')).toBeInTheDocument();
171
+ expect(screen.getByText('Winner source systems')).toBeInTheDocument();
172
+ expect(screen.getByText('Rule type')).toBeInTheDocument();
173
+ expect(screen.getByText('Count')).toBeInTheDocument();
174
+ expect(screen.getByText('Count')).toBeInTheDocument();
175
+ expect(screen.getByText('Attribute values')).toBeInTheDocument();
176
+ };
177
+ var checkDefaultAttributes = function () {
178
+ expect(within(getCellByIndexes(0, 0)).getByText('String Label')).toBeInTheDocument();
179
+ expect(within(getCellByIndexes(0, 0)).getByText('text field value')).toBeInTheDocument();
180
+ expect(within(getCellByIndexes(0, 0)).queryByText('another text value')).not.toBeInTheDocument();
181
+ expect(within(getCellByIndexes(0, 1)).getByText('Reltio')).toBeInTheDocument();
182
+ expect(within(getCellByIndexes(0, 2)).getByText('Recency')).toBeInTheDocument();
183
+ expect(within(getCellByIndexes(0, 3)).getByText('2')).toBeInTheDocument();
184
+ expect(within(getCellByIndexes(0, 4)).getByText('text field value')).toBeInTheDocument();
185
+ expect(within(getCellByIndexes(0, 4)).getByText('another text value')).toBeInTheDocument();
186
+ expect(within(within(getCellByIndexes(0, 4)).getByTestId('value-index-1')).getByTestId('SvgIgnored')).toBeInTheDocument();
187
+ expect(within(getCellByIndexes(1, 0)).getByText('Boolean')).toBeInTheDocument();
188
+ expect(within(getCellByIndexes(1, 0)).getByText('Yes')).toBeInTheDocument();
189
+ expect(within(getCellByIndexes(1, 1)).getByText('Reltio')).toBeInTheDocument();
190
+ expect(within(getCellByIndexes(1, 2)).getByText('Frequency')).toBeInTheDocument();
191
+ expect(within(getCellByIndexes(1, 3)).getByText('1')).toBeInTheDocument();
192
+ expect(within(getCellByIndexes(1, 4)).getByText('Yes')).toBeInTheDocument();
193
+ expect(within(getCellByIndexes(2, 0)).getByText('Nested attribute')).toBeInTheDocument();
194
+ expect(within(getCellByIndexes(2, 0)).getByText('Nested Label')).toBeInTheDocument();
195
+ expect(within(getCellByIndexes(2, 1)).queryByText(/./)).not.toBeInTheDocument();
196
+ expect(within(getCellByIndexes(2, 2)).getByText('Source system')).toBeInTheDocument();
197
+ expect(within(getCellByIndexes(2, 3)).getByText('1')).toBeInTheDocument();
198
+ expect(within(getCellByIndexes(2, 4)).getByText('Nested Label')).toBeInTheDocument();
199
+ expect(within(getCellByIndexes(3, 0)).getByText('Address')).toBeInTheDocument();
200
+ expect(within(getCellByIndexes(3, 0)).getByText('Reference Address')).toBeInTheDocument();
201
+ expect(within(getCellByIndexes(3, 0)).getByText('new address')).toBeInTheDocument();
202
+ expect(within(getCellByIndexes(3, 1)).queryByText(/./)).not.toBeInTheDocument();
203
+ expect(within(getCellByIndexes(3, 2)).getByText('Minimum value')).toBeInTheDocument();
204
+ expect(within(getCellByIndexes(3, 3)).getByText('1')).toBeInTheDocument();
205
+ expect(within(getCellByIndexes(3, 4)).getByText('Reference Address')).toBeInTheDocument();
206
+ expect(within(getCellByIndexes(3, 4)).getByText('new address')).toBeInTheDocument();
207
+ expect(within(getCellByIndexes(4, 0)).getByText('Image Gallery')).toBeInTheDocument();
208
+ expect(within(getCellByIndexes(4, 1)).queryByText(/./)).not.toBeInTheDocument();
209
+ expect(within(getCellByIndexes(4, 2)).getByText('Other Attribute Winner Crosswalk')).toBeInTheDocument();
210
+ expect(within(getCellByIndexes(4, 3)).getByText('1')).toBeInTheDocument();
211
+ expect(within(getCellByIndexes(4, 4)).getByRole('img')).toHaveAttribute('src', 'https://s3.amazonaws.com/reltio.qa.ih/thumbnailInew/5iWrjreLxiT2avDKoX3fQmqCu.png');
150
212
  };
151
- var COLUMNS_DATA_MOCK = [
152
- { id: '1', label: 'col 1' },
153
- { id: '2', label: 'col 2' }
154
- ];
155
- var ROWS_DATA_MOCK = [{ 1: 'col 1 row 1', 2: 'col 2 row 2' }];
156
213
  beforeAll(function () {
157
- useMdmMetadata.mockReturnValue(metadata);
158
- OvValuesRenderer.mockImplementation(EmptyStub);
159
- RuleTypeRenderer.mockImplementation(EmptyStub);
160
- ConfirmEditIgnoredDialog.mockImplementation(EmptyStub);
161
- jest.spyOn(AttributesFactory, 'build').mockReturnValue(null);
214
+ config.disabled = true;
215
+ });
216
+ afterAll(function () {
217
+ config.disabled = false;
162
218
  });
163
219
  afterEach(function () {
164
220
  jest.clearAllMocks();
165
221
  });
166
- it('should render basic table correctly', function () {
167
- jest.spyOn(helpers, 'getBasicTableColumnsData').mockReturnValueOnce(COLUMNS_DATA_MOCK);
168
- jest.spyOn(helpers, 'getBasicTableRowsData').mockReturnValueOnce(ROWS_DATA_MOCK);
169
- var wrapper = shallow(React.createElement(AttributesTable, __assign({}, props)));
170
- expect(wrapper.find(BasicTable).props()).toMatchObject({
171
- fixFirstColumn: true,
172
- rowsData: ROWS_DATA_MOCK,
173
- columnsData: COLUMNS_DATA_MOCK
222
+ it('should render basic table correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
223
+ var unmockTableSizing;
224
+ return __generator(this, function (_a) {
225
+ unmockTableSizing = mockBasicTableSizing();
226
+ setUp(__assign(__assign({}, defaultProps), { visibleColumns: ['ovValues', 'values', 'ruleType', 'count', 'winnerSources'] }));
227
+ expect(screen.getByText('Attribute')).toBeInTheDocument();
228
+ expect(screen.queryByTestId('reltio-linear-load-indicator')).not.toBeInTheDocument();
229
+ checkBasicTableElements();
230
+ checkDefaultAttributes();
231
+ unmockTableSizing();
232
+ return [2 /*return*/];
174
233
  });
175
- expect(helpers.getBasicTableRowsData).toHaveBeenCalledWith(metadata, 'configuration/entityTypes/HCP', props.selectedAttributeTypes, DEFAULT_VISIBLE_COLUMNS, props.crosswalksMap, props.entity.attributes, props.activeSurvivorshipGroupUri);
176
- expect(helpers.getBasicTableColumnsData).toHaveBeenCalledWith(DEFAULT_VISIBLE_COLUMNS.map(function (columnId) { return COLUMNS_DATA.find(function (_a) {
177
- var id = _a.id;
178
- return id === columnId;
179
- }); }));
180
- expect(wrapper.find(BasicViewHeader).prop('title')).toBe(i18n.text('Sources'));
181
- });
234
+ }); });
235
+ it('should render basic table correctly in readOnly mode', function () { return __awaiter(void 0, void 0, void 0, function () {
236
+ var unmockTableSizing, user, attribute;
237
+ return __generator(this, function (_a) {
238
+ switch (_a.label) {
239
+ case 0:
240
+ unmockTableSizing = mockBasicTableSizing();
241
+ user = setUp(__assign(__assign({}, defaultProps), { visibleColumns: ['ovValues', 'values', 'ruleType', 'count', 'winnerSources'], readOnly: true })).user;
242
+ expect(screen.queryByText('Attribute')).not.toBeInTheDocument();
243
+ checkBasicTableElements();
244
+ checkDefaultAttributes();
245
+ attribute = within(getCellByIndexes(0, 4)).getByTestId('value-index-0');
246
+ return [4 /*yield*/, user.hover(attribute)];
247
+ case 1:
248
+ _a.sent();
249
+ return [4 /*yield*/, user.click(within(attribute).queryByRole('button', { name: 'More actions' }))];
250
+ case 2:
251
+ _a.sent();
252
+ expect(screen.getByRole('menuitem', { name: 'Edit' })).toHaveClass('Mui-disabled');
253
+ expect(screen.getByRole('menuitem', { name: 'Delete' })).toHaveClass('Mui-disabled');
254
+ unmockTableSizing();
255
+ return [2 /*return*/];
256
+ }
257
+ });
258
+ }); });
182
259
  it('should show linear loader correctly', function () {
183
- var wrapper = shallow(React.createElement(AttributesTable, __assign({}, props, { isLoading: false })));
184
- expect(wrapper.find(LinearLoadIndicator).length).toBe(0);
185
- wrapper.setProps({ isLoading: true });
186
- expect(wrapper.find(LinearLoadIndicator).length).toBe(1);
260
+ setUp(__assign(__assign({}, defaultProps), { isLoading: true }));
261
+ expect(screen.getByTestId('reltio-linear-load-indicator')).toBeInTheDocument();
187
262
  });
188
263
  it('should select initial attribute types when props.selectedAttributeTypes is nil', function () {
189
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
190
- expect(props.onSelectAttributeTypes).not.toHaveBeenCalled();
191
- wrapper.setProps({ selectedAttributeTypes: undefined });
192
- expect(props.onSelectAttributeTypes).toHaveBeenCalledTimes(1);
193
- expect(props.onSelectAttributeTypes).toHaveBeenCalledWith([
264
+ var onSelectAttributeTypes = jest.fn();
265
+ setUp(__assign(__assign({}, defaultProps), { onSelectAttributeTypes: onSelectAttributeTypes, selectedAttributeTypes: undefined }));
266
+ expect(onSelectAttributeTypes).toHaveBeenCalledWith([
194
267
  {
195
- label: 'Country Code',
196
- name: 'CountryCode',
268
+ label: 'Boolean',
269
+ name: 'Boolean',
270
+ type: 'Boolean',
271
+ uri: 'configuration/entityTypes/HCP/attributes/Boolean'
272
+ },
273
+ {
274
+ label: 'String Label',
275
+ name: 'TextField',
197
276
  type: 'String',
198
- uri: 'configuration/entityTypes/HCP/attributes/CountryCode'
277
+ uri: 'configuration/entityTypes/HCP/attributes/TextField'
199
278
  },
200
279
  {
201
- label: 'Date',
202
- name: 'Date',
203
- type: 'Date',
204
- uri: 'configuration/entityTypes/HCP/attributes/Date'
280
+ label: 'Nested attribute',
281
+ name: 'DeepNested',
282
+ type: 'Nested',
283
+ uri: 'configuration/entityTypes/HCP/attributes/DeepNested'
205
284
  }
206
285
  ]);
207
286
  });
208
287
  it('should not render rows if entity is undefined', function () {
209
- var wrapper = shallow(React.createElement(AttributesTable, __assign({}, props, { entity: undefined })));
210
- expect(wrapper.find(BasicTable).prop('rowsData')).toEqual([]);
211
- });
212
- it('should render ColumnsSettings in the header and change columns correctly', function () {
213
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
214
- var columnsSettings = wrapper.find(ColumnsSettings);
215
- expect(columnsSettings.prop('selectedColumns')).toEqual(DEFAULT_VISIBLE_COLUMNS);
216
- expect(columnsSettings.prop('columnsData')).toEqual(COLUMNS_DATA);
217
- var nextVisibleColumns = DEFAULT_VISIBLE_COLUMNS.slice(0, -1);
218
- act(function () {
219
- columnsSettings.prop('onChangeColumns')(nextVisibleColumns);
220
- });
221
- expect(props.onChangeVisibleColumns).toHaveBeenCalledWith(nextVisibleColumns);
222
- wrapper.setProps({ visibleColumns: nextVisibleColumns });
223
- expect(wrapper.find(ColumnsSettings).prop('selectedColumns')).toEqual(nextVisibleColumns);
224
- expect(wrapper
225
- .find(BasicTable)
226
- .prop('columnsData')
227
- .map(function (_a) {
228
- var id = _a.id;
229
- return id;
230
- })).toEqual(nextVisibleColumns);
231
- });
232
- it('should pass props.onPin to AttributeValuesRenderer', function () {
233
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
234
- var onPin = wrapper.find('AttributeValuesRenderer').at(0).prop('onPin');
235
- expect(onPin).toBe(props.onPin);
288
+ var unmockTableSizing = mockBasicTableSizing();
289
+ setUp(__assign(__assign({}, defaultProps), { entity: undefined }));
290
+ expect(screen.queryByText(selectedAttributeTypes[0].label)).not.toBeInTheDocument();
291
+ expect(screen.queryByText(selectedAttributeTypes[1].label)).not.toBeInTheDocument();
292
+ expect(screen.queryByText('text field value')).not.toBeInTheDocument();
293
+ expect(screen.queryByText('Yes')).not.toBeInTheDocument();
294
+ unmockTableSizing();
236
295
  });
237
- it('should pass props.onIgnore to AttributeValuesRenderer', function () {
238
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
239
- var onIgnore = wrapper.find('AttributeValuesRenderer').at(0).prop('onIgnore');
240
- expect(onIgnore).toBe(props.onIgnore);
296
+ it('should render default columns', function () {
297
+ var unmockTableSizing = mockBasicTableSizing();
298
+ setUp(__assign(__assign({}, defaultProps), { visibleColumns: undefined }));
299
+ expect(screen.getByText('Rule type')).toBeInTheDocument();
300
+ expect(within(screen.getAllByTestId('column-name-ruleType')[0]).getByText('Recency')).toBeInTheDocument();
301
+ expect(within(screen.getAllByTestId('column-name-ruleType')[1]).getByText('Frequency')).toBeInTheDocument();
302
+ expect(within(screen.getAllByTestId('column-name-ruleType')[2]).getByText('Source system')).toBeInTheDocument();
303
+ unmockTableSizing();
241
304
  });
242
- it('should call props.onDelete after confirmation on attribute delete', function () {
243
- var _a, _b;
244
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
245
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(false);
246
- var onDelete = wrapper.find('AttributeValuesRenderer').at(0).prop('onDelete');
247
- var deleteEvent = {
248
- attributeValue: (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0],
249
- attributeType: metadata.entityTypes[0].attributes[0],
250
- crosswalks: []
251
- };
252
- act(function () {
253
- onDelete(deleteEvent);
254
- });
255
- wrapper.update();
256
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(true);
257
- act(function () {
258
- wrapper
259
- .find('ConfirmDeleteDialog')
260
- .find(Button)
261
- .filterWhere(function (button) { return button.text() === 'Yes'; })
262
- .find('button')
263
- .simulate('click');
264
- });
265
- wrapper.update();
266
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(false);
267
- expect(props.onDelete).toHaveBeenCalledWith(deleteEvent);
268
- });
269
- it('should not call props.onDelete without confirmation on attribute delete', function () {
270
- var _a, _b;
271
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
272
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(false);
273
- var onDelete = wrapper.find('AttributeValuesRenderer').at(0).prop('onDelete');
274
- var deleteEvent = {
275
- attributeValue: (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0],
276
- attributeType: metadata.entityTypes[0].attributes[0],
277
- crosswalks: []
278
- };
279
- act(function () {
280
- onDelete(deleteEvent);
281
- });
282
- wrapper.update();
283
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(true);
284
- act(function () {
285
- wrapper
286
- .find('ConfirmDeleteDialog')
287
- .find(Button)
288
- .filterWhere(function (button) { return button.text() === 'No'; })
289
- .find('button')
290
- .simulate('click');
291
- });
292
- wrapper.update();
293
- expect(wrapper.find('ConfirmDeleteDialog').prop('open')).toBe(false);
294
- expect(props.onDelete).not.toHaveBeenCalled();
295
- });
296
- it('should call props.onEdit on not ignored attribute edit', function () {
297
- var _a, _b;
298
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
299
- var onEdit = wrapper.find('AttributeValuesRenderer').at(0).prop('onEdit');
300
- var editEvent = {
301
- attributeValue: __assign(__assign({}, (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0]), { value: 'Russisa', lookupCode: 'RU' }),
302
- attributeType: metadata.entityTypes[0].attributes[0],
303
- crosswalk: {
304
- uri: 'entities/1/crosswalks/1',
305
- type: 'configuration/sources/Reltio',
306
- value: 'cw1'
305
+ it('should render Source sequence after clicking view details button', function () { return __awaiter(void 0, void 0, void 0, function () {
306
+ var unmockTableSizing, user;
307
+ return __generator(this, function (_a) {
308
+ switch (_a.label) {
309
+ case 0:
310
+ unmockTableSizing = mockBasicTableSizing();
311
+ user = setUp(__assign(__assign({}, defaultProps), { visibleColumns: undefined })).user;
312
+ return [4 /*yield*/, user.click(screen.getAllByRole('button', { name: 'View details' })[0])];
313
+ case 1:
314
+ _a.sent();
315
+ expect(within(screen.getByRole('presentation')).getByText('Source sequence')).toBeInTheDocument();
316
+ expect(within(screen.getByRole('presentation')).getByText('Reltio')).toBeInTheDocument();
317
+ return [4 /*yield*/, user.click(within(screen.getByRole('presentation')).getByRole('button'))];
318
+ case 2:
319
+ _a.sent();
320
+ expect(screen.queryByText('Source sequence')).not.toBeInTheDocument();
321
+ unmockTableSizing();
322
+ return [2 /*return*/];
307
323
  }
308
- };
309
- act(function () {
310
- onEdit(editEvent);
311
324
  });
312
- expect(props.onEdit).toHaveBeenCalledWith(editEvent);
313
- });
314
- it('should show confirmation dialog on ignored attribute edit', function () {
315
- var _a, _b;
316
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
317
- expect(wrapper.find(ConfirmEditIgnoredDialog).prop('open')).toBe(false);
318
- var onEdit = wrapper.find('AttributeValuesRenderer').at(0).prop('onEdit');
319
- var editEvent = {
320
- attributeValue: __assign(__assign({}, (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0]), { value: 'Russisa', lookupCode: 'RU', ignored: true }),
321
- attributeType: metadata.entityTypes[0].attributes[0],
322
- crosswalk: {
323
- uri: 'entities/1/crosswalks/1',
324
- type: 'configuration/sources/Reltio',
325
- value: 'cw1'
325
+ }); });
326
+ it('should call onChangeVisibleColumns on change columns', function () { return __awaiter(void 0, void 0, void 0, function () {
327
+ var onChangeVisibleColumns, user;
328
+ return __generator(this, function (_a) {
329
+ switch (_a.label) {
330
+ case 0:
331
+ onChangeVisibleColumns = jest.fn();
332
+ user = setUp(__assign(__assign({}, defaultProps), { onChangeVisibleColumns: onChangeVisibleColumns })).user;
333
+ return [4 /*yield*/, user.click(screen.getByLabelText('Show/hide columns'))];
334
+ case 1:
335
+ _a.sent();
336
+ return [4 /*yield*/, user.click(screen.getByText('Winner source systems'))];
337
+ case 2:
338
+ _a.sent();
339
+ expect(onChangeVisibleColumns).toHaveBeenCalledWith(['ovValues', 'values', 'winnerSources']);
340
+ return [2 /*return*/];
326
341
  }
327
- };
328
- act(function () {
329
- onEdit(editEvent);
330
342
  });
331
- wrapper.update();
332
- expect(props.onEdit).not.toHaveBeenCalled();
333
- expect(wrapper.find(ConfirmEditIgnoredDialog).prop('open')).toBe(true);
343
+ }); });
344
+ it.skip('should drag and drop rows correctly', function () {
345
+ jest.useFakeTimers();
346
+ var unmockTableSizing = mockBasicTableSizing();
347
+ var onSelectAttributeTypes = jest.fn();
348
+ var props = __assign(__assign({}, defaultProps), { onSelectAttributeTypes: onSelectAttributeTypes });
349
+ setUp(props);
350
+ expect(within(getCellByIndexes(1, 0)).queryByText('Yes')).toBeInTheDocument();
351
+ expect(within(getCellByIndexes(1, 0)).queryByText('Boolean')).toBeInTheDocument();
352
+ expect(within(getCellByIndexes(1, 1)).queryByText('Yes')).toBeInTheDocument();
353
+ expect(within(getCellByIndexes(0, 0)).queryByText('text field value')).toBeInTheDocument();
354
+ expect(within(getCellByIndexes(0, 0)).queryByText('<h1>String</h1>')).toBeInTheDocument();
355
+ expect(within(getCellByIndexes(0, 1)).queryByText('text field value')).toBeInTheDocument();
356
+ var dragIndicator = getCellByIndexes(0, 0).querySelector('.dragIndicator');
357
+ fireEvent.dragStart(dragIndicator);
358
+ jest.runAllTimers();
359
+ expect(within(getCellByIndexes(1, 0)).queryByText('Yes')).not.toBeInTheDocument();
360
+ expect(within(getCellByIndexes(1, 0)).queryByText('Boolean')).toBeInTheDocument();
361
+ expect(within(getCellByIndexes(1, 1)).queryByText('Yes')).not.toBeInTheDocument();
362
+ expect(within(getCellByIndexes(0, 0)).queryByText('text field value')).not.toBeInTheDocument();
363
+ expect(within(getCellByIndexes(0, 0)).queryByText('<h1>String</h1>')).toBeInTheDocument();
364
+ expect(within(getCellByIndexes(0, 1)).queryByText('text field value')).not.toBeInTheDocument();
365
+ var dropRow = getCellByIndexes(1, 0);
366
+ fireEvent.dragEnter(dropRow);
367
+ expect(within(getCellByIndexes(0, 0)).queryByText('Boolean')).toBeInTheDocument();
368
+ expect(within(getCellByIndexes(1, 0)).queryByText('<h1>String</h1>')).toBeInTheDocument();
369
+ fireEvent.dragEnd(dropRow);
370
+ expect(onSelectAttributeTypes).toHaveBeenCalledWith([selectedAttributeTypes[1], selectedAttributeTypes[0]]);
371
+ unmockTableSizing();
334
372
  });
335
- it('should call props.onEdit if confirmed editing attribute with ignored', function () {
336
- var _a, _b;
337
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
338
- var onEdit = wrapper.find('AttributeValuesRenderer').at(0).prop('onEdit');
339
- var editEvent = {
340
- attributeValue: __assign(__assign({}, (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0]), { value: 'Russisa', lookupCode: 'RU', ignored: true }),
341
- attributeType: metadata.entityTypes[0].attributes[0],
342
- crosswalk: {
343
- uri: 'entities/1/crosswalks/1',
344
- type: 'configuration/sources/Reltio',
345
- value: 'cw1'
373
+ it('should pin and ignore attributes', function () { return __awaiter(void 0, void 0, void 0, function () {
374
+ var unmockTableSizing, onPin, onIgnore, props, user, attribute, pinButton, ignoreButton;
375
+ return __generator(this, function (_a) {
376
+ switch (_a.label) {
377
+ case 0:
378
+ unmockTableSizing = mockBasicTableSizing();
379
+ onPin = jest.fn();
380
+ onIgnore = jest.fn();
381
+ props = __assign(__assign({}, defaultProps), { onPin: onPin, onIgnore: onIgnore });
382
+ user = setUp(props).user;
383
+ attribute = within(getCellByIndexes(0, 1)).getByTestId('value-index-0');
384
+ return [4 /*yield*/, user.hover(attribute)];
385
+ case 1:
386
+ _a.sent();
387
+ pinButton = within(attribute).getByLabelText('Pin').querySelector('button');
388
+ ignoreButton = within(attribute).getByLabelText('Ignore').querySelector('button');
389
+ return [4 /*yield*/, user.click(pinButton)];
390
+ case 2:
391
+ _a.sent();
392
+ expect(onPin).toHaveBeenCalled();
393
+ return [4 /*yield*/, user.click(ignoreButton)];
394
+ case 3:
395
+ _a.sent();
396
+ expect(onIgnore).toHaveBeenCalled();
397
+ unmockTableSizing();
398
+ return [2 /*return*/];
346
399
  }
347
- };
348
- act(function () {
349
- onEdit(editEvent);
350
400
  });
351
- wrapper.update();
352
- wrapper.find(ConfirmEditIgnoredDialog).prop('onConfirmEditWithIgnore')();
353
- expect(props.onEdit).toHaveBeenCalledWith(editEvent);
354
- expect(props.onIgnore).not.toHaveBeenCalled();
355
- });
356
- it('should call props.onEdit and props.onIgnore if confirmed editing attribute without ignored', function () {
357
- var _a, _b;
358
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
359
- var onEdit = wrapper.find('AttributeValuesRenderer').at(0).prop('onEdit');
360
- var editEvent = {
361
- attributeValue: __assign(__assign({}, (_b = (_a = props.entity) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b['CountryCode'][0]), { value: 'Russisa', lookupCode: 'RU', ignored: true }),
362
- attributeType: metadata.entityTypes[0].attributes[0],
363
- crosswalk: {
364
- uri: 'entities/1/crosswalks/1',
365
- type: 'configuration/sources/Reltio',
366
- value: 'cw1'
401
+ }); });
402
+ it('should pin and ignore auto generated attributes', function () { return __awaiter(void 0, void 0, void 0, function () {
403
+ var unmockTableSizing, onPin, onIgnore, selectedAttributeTypes, props, user, attribute, pinButton, ignoreButton;
404
+ return __generator(this, function (_a) {
405
+ switch (_a.label) {
406
+ case 0:
407
+ unmockTableSizing = mockBasicTableSizing();
408
+ onPin = jest.fn();
409
+ onIgnore = jest.fn();
410
+ selectedAttributeTypes = [
411
+ {
412
+ description: 'Yes or No',
413
+ label: 'Boolean',
414
+ name: 'Boolean',
415
+ type: 'Boolean',
416
+ uri: 'configuration/entityTypes/HCP/attributes/Boolean',
417
+ autoGenerated: true
418
+ }
419
+ ];
420
+ props = __assign(__assign({}, defaultProps), { selectedAttributeTypes: selectedAttributeTypes, onPin: onPin, onIgnore: onIgnore });
421
+ user = setUp(props).user;
422
+ attribute = within(getCellByIndexes(0, 1)).getByTestId('value-index-0');
423
+ return [4 /*yield*/, user.hover(attribute)];
424
+ case 1:
425
+ _a.sent();
426
+ pinButton = within(attribute).getByLabelText('Pin').querySelector('button');
427
+ ignoreButton = within(attribute).getByLabelText('Ignore').querySelector('button');
428
+ expect(within(attribute).queryByRole('button', { name: 'More actions' })).not.toBeInTheDocument();
429
+ return [4 /*yield*/, user.click(pinButton)];
430
+ case 2:
431
+ _a.sent();
432
+ expect(onPin).toHaveBeenCalled();
433
+ return [4 /*yield*/, user.click(ignoreButton)];
434
+ case 3:
435
+ _a.sent();
436
+ expect(onIgnore).toHaveBeenCalled();
437
+ unmockTableSizing();
438
+ return [2 /*return*/];
367
439
  }
368
- };
369
- act(function () {
370
- onEdit(editEvent);
371
440
  });
372
- wrapper.update();
373
- wrapper.find(ConfirmEditIgnoredDialog).prop('onConfirmEditWithoutIgnore')();
374
- expect(props.onEdit).toHaveBeenCalledWith(__assign(__assign({}, editEvent), { clearAttributeFlags: true }));
375
- expect(props.onIgnore).not.toHaveBeenCalled();
376
- });
377
- it('should pass props.onAdd to AttributeValuesRenderer', function () {
378
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
379
- var onAdd = wrapper.find('AttributeValuesRenderer').at(0).prop('onAdd');
380
- expect(onAdd).toBe(props.onAdd);
441
+ }); });
442
+ describe('Edit attributes', function () {
443
+ it('should edit attributes', function () { return __awaiter(void 0, void 0, void 0, function () {
444
+ var unmockTableSizing, entity, onEdit, props, user;
445
+ return __generator(this, function (_a) {
446
+ switch (_a.label) {
447
+ case 0:
448
+ unmockTableSizing = mockBasicTableSizing();
449
+ entity = createEntity();
450
+ onEdit = jest.fn();
451
+ props = __assign(__assign({}, defaultProps), { onEdit: onEdit });
452
+ user = setUp(props).user;
453
+ return [4 /*yield*/, editTextFieldAttribute(user)];
454
+ case 1:
455
+ _a.sent();
456
+ expect(onEdit).toHaveBeenCalledWith({
457
+ attributeType: selectedAttributeTypes[0],
458
+ attributeValue: __assign(__assign({}, entity.attributes.TextField[0]), { value: 'text field value newValue' }),
459
+ crosswalk: crosswalksMap.entity['entities/01L2n5z/attributes/TextField/5noU1aB'][0]
460
+ });
461
+ unmockTableSizing();
462
+ return [2 /*return*/];
463
+ }
464
+ });
465
+ }); });
466
+ it('should show confirmation dialog on edit ignored attributes', function () { return __awaiter(void 0, void 0, void 0, function () {
467
+ var unmockTableSizing, props, user;
468
+ return __generator(this, function (_a) {
469
+ switch (_a.label) {
470
+ case 0:
471
+ unmockTableSizing = mockBasicTableSizing();
472
+ props = __assign({}, defaultProps);
473
+ user = setUp(props).user;
474
+ return [4 /*yield*/, editTextFieldAttribute(user, 1)];
475
+ case 1:
476
+ _a.sent();
477
+ expect(screen.getByText('You are attempting to change a value that is presently ignored.')).toBeInTheDocument();
478
+ expect(screen.getByText('Please choose an option:')).toBeInTheDocument();
479
+ expect(screen.getByText('Save without Ignore')).toBeInTheDocument();
480
+ expect(screen.getByText('Save and apply Ignore to new value')).toBeInTheDocument();
481
+ expect(screen.getByText('Ok')).toBeInTheDocument();
482
+ expect(screen.getByText('Cancel')).toBeInTheDocument();
483
+ return [4 /*yield*/, user.click(screen.getByText('Cancel'))];
484
+ case 2:
485
+ _a.sent();
486
+ expect(screen.queryByText('You are attempting to change a value that is presently ignored.')).not.toBeInTheDocument();
487
+ unmockTableSizing();
488
+ return [2 /*return*/];
489
+ }
490
+ });
491
+ }); });
492
+ it('should call onEdit in case of applying ignore to new value', function () { return __awaiter(void 0, void 0, void 0, function () {
493
+ var unmockTableSizing, entity, onEdit, props, user;
494
+ return __generator(this, function (_a) {
495
+ switch (_a.label) {
496
+ case 0:
497
+ unmockTableSizing = mockBasicTableSizing();
498
+ entity = createEntity();
499
+ onEdit = jest.fn();
500
+ props = __assign(__assign({}, defaultProps), { onEdit: onEdit });
501
+ user = setUp(props).user;
502
+ return [4 /*yield*/, editTextFieldAttribute(user, 1)];
503
+ case 1:
504
+ _a.sent();
505
+ return [4 /*yield*/, user.click(screen.getByText('Save and apply Ignore to new value'))];
506
+ case 2:
507
+ _a.sent();
508
+ return [4 /*yield*/, user.click(screen.getByText('Ok'))];
509
+ case 3:
510
+ _a.sent();
511
+ expect(onEdit).toHaveBeenCalledWith({
512
+ attributeType: selectedAttributeTypes[0],
513
+ attributeValue: __assign(__assign({}, entity.attributes.TextField[1]), { value: 'another text value newValue' }),
514
+ crosswalk: crosswalksMap.entity['entities/01L2n5z/attributes/TextField/5noU1aB'][0]
515
+ });
516
+ unmockTableSizing();
517
+ return [2 /*return*/];
518
+ }
519
+ });
520
+ }); });
521
+ it('should call onEdit in without applying ignore to new value', function () { return __awaiter(void 0, void 0, void 0, function () {
522
+ var unmockTableSizing, entity, onEdit, props, user;
523
+ return __generator(this, function (_a) {
524
+ switch (_a.label) {
525
+ case 0:
526
+ unmockTableSizing = mockBasicTableSizing();
527
+ entity = createEntity();
528
+ onEdit = jest.fn();
529
+ props = __assign(__assign({}, defaultProps), { onEdit: onEdit });
530
+ user = setUp(props).user;
531
+ return [4 /*yield*/, editTextFieldAttribute(user, 1)];
532
+ case 1:
533
+ _a.sent();
534
+ return [4 /*yield*/, user.click(screen.getByText('Save without Ignore'))];
535
+ case 2:
536
+ _a.sent();
537
+ return [4 /*yield*/, user.click(screen.getByText('Ok'))];
538
+ case 3:
539
+ _a.sent();
540
+ expect(onEdit).toHaveBeenCalledWith({
541
+ attributeType: selectedAttributeTypes[0],
542
+ attributeValue: __assign(__assign({}, entity.attributes.TextField[1]), { value: 'another text value newValue' }),
543
+ crosswalk: crosswalksMap.entity['entities/01L2n5z/attributes/TextField/5noU1aB'][0],
544
+ clearAttributeFlags: true
545
+ });
546
+ unmockTableSizing();
547
+ return [2 /*return*/];
548
+ }
549
+ });
550
+ }); });
551
+ it('should call on edit only once in case of dblClick on "Safe without ignore"', function () { return __awaiter(void 0, void 0, void 0, function () {
552
+ var onEdit, unmockTableSizing, entity, props, user;
553
+ return __generator(this, function (_a) {
554
+ switch (_a.label) {
555
+ case 0:
556
+ onEdit = jest.fn();
557
+ unmockTableSizing = mockBasicTableSizing();
558
+ entity = createEntity();
559
+ entity.attributes.TextField[0].ignored = true;
560
+ props = __assign(__assign({}, defaultProps), { entity: entity, onEdit: onEdit });
561
+ user = setUp(props).user;
562
+ return [4 /*yield*/, editTextFieldAttribute(user)];
563
+ case 1:
564
+ _a.sent();
565
+ return [4 /*yield*/, user.dblClick(screen.getByText('Ok'))];
566
+ case 2:
567
+ _a.sent();
568
+ expect(onEdit).toHaveBeenCalledTimes(1);
569
+ unmockTableSizing();
570
+ return [2 /*return*/];
571
+ }
572
+ });
573
+ }); });
574
+ it('should call on edit only once in case of dblClick on "Save and apply Ignore to new value"', function () { return __awaiter(void 0, void 0, void 0, function () {
575
+ var onEdit, unmockTableSizing, entity, props, user;
576
+ return __generator(this, function (_a) {
577
+ switch (_a.label) {
578
+ case 0:
579
+ onEdit = jest.fn();
580
+ unmockTableSizing = mockBasicTableSizing();
581
+ entity = createEntity();
582
+ entity.attributes.TextField[0].ignored = true;
583
+ props = __assign(__assign({}, defaultProps), { entity: entity, onEdit: onEdit });
584
+ user = setUp(props).user;
585
+ return [4 /*yield*/, editTextFieldAttribute(user)];
586
+ case 1:
587
+ _a.sent();
588
+ return [4 /*yield*/, user.dblClick(screen.getByText('Save and apply Ignore to new value'))];
589
+ case 2:
590
+ _a.sent();
591
+ return [4 /*yield*/, user.dblClick(screen.getByText('Ok'))];
592
+ case 3:
593
+ _a.sent();
594
+ expect(onEdit).toHaveBeenCalledTimes(1);
595
+ unmockTableSizing();
596
+ return [2 /*return*/];
597
+ }
598
+ });
599
+ }); });
381
600
  });
382
- it('should pass entity uri to AttributeValuesRenderer', function () {
383
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
384
- var parentUri = wrapper.find('AttributeValuesRenderer').at(0).prop('parentUri');
385
- expect(parentUri).toBe(props.entity.uri);
601
+ describe('Delete attributes', function () {
602
+ it('should show confirmation dialog', function () { return __awaiter(void 0, void 0, void 0, function () {
603
+ var unmockTableSizing, onDelete, props, user, attribute;
604
+ return __generator(this, function (_a) {
605
+ switch (_a.label) {
606
+ case 0:
607
+ unmockTableSizing = mockBasicTableSizing();
608
+ onDelete = jest.fn();
609
+ props = __assign(__assign({}, defaultProps), { onDelete: onDelete });
610
+ user = setUp(props).user;
611
+ attribute = within(getCellByIndexes(0, 1)).getByTestId('value-index-0');
612
+ return [4 /*yield*/, user.hover(attribute)];
613
+ case 1:
614
+ _a.sent();
615
+ return [4 /*yield*/, user.click(within(attribute).queryByRole('button', { name: 'More actions' }))];
616
+ case 2:
617
+ _a.sent();
618
+ return [4 /*yield*/, user.click(screen.getByText('Delete'))];
619
+ case 3:
620
+ _a.sent();
621
+ expect(screen.getByText('Are you sure you want to delete this?')).toBeInTheDocument();
622
+ expect(within(screen.getByRole('dialog')).getByText('Yes')).toBeInTheDocument();
623
+ expect(within(screen.getByRole('dialog')).getByText('No')).toBeInTheDocument();
624
+ return [4 /*yield*/, user.click(within(screen.getByRole('dialog')).getByText('No'))];
625
+ case 4:
626
+ _a.sent();
627
+ expect(screen.queryByText('Are you sure you want to delete this?')).not.toBeInTheDocument();
628
+ unmockTableSizing();
629
+ return [2 /*return*/];
630
+ }
631
+ });
632
+ }); });
633
+ it('should delete attribute', function () { return __awaiter(void 0, void 0, void 0, function () {
634
+ var unmockTableSizing, entity, onDelete, props, user, attribute;
635
+ return __generator(this, function (_a) {
636
+ switch (_a.label) {
637
+ case 0:
638
+ unmockTableSizing = mockBasicTableSizing();
639
+ entity = createEntity();
640
+ onDelete = jest.fn();
641
+ props = __assign(__assign({}, defaultProps), { onDelete: onDelete });
642
+ user = setUp(props).user;
643
+ attribute = within(getCellByIndexes(0, 1)).getByTestId('value-index-0');
644
+ return [4 /*yield*/, user.hover(attribute)];
645
+ case 1:
646
+ _a.sent();
647
+ return [4 /*yield*/, user.click(within(attribute).queryByRole('button', { name: 'More actions' }))];
648
+ case 2:
649
+ _a.sent();
650
+ return [4 /*yield*/, user.click(screen.getByText('Delete'))];
651
+ case 3:
652
+ _a.sent();
653
+ return [4 /*yield*/, user.click(within(screen.getByRole('dialog')).getByText('Yes'))];
654
+ case 4:
655
+ _a.sent();
656
+ expect(onDelete).toHaveBeenCalledWith({
657
+ attributeType: selectedAttributeTypes[0],
658
+ attributeValue: entity.attributes.TextField[0],
659
+ crosswalks: crosswalksMap.entity['entities/01L2n5z/attributes/TextField/5noU1aB']
660
+ });
661
+ unmockTableSizing();
662
+ return [2 /*return*/];
663
+ }
664
+ });
665
+ }); });
666
+ it('should not call onDelete when user clicks No and then Yes in confirmation dialog on deleting attribute', function () { return __awaiter(void 0, void 0, void 0, function () {
667
+ var unmockTableSizing, onDelete, props, user, attribute, moreButton, deleteButton, dialog, declineButton, confirmButton;
668
+ return __generator(this, function (_a) {
669
+ switch (_a.label) {
670
+ case 0:
671
+ unmockTableSizing = mockBasicTableSizing();
672
+ onDelete = jest.fn();
673
+ props = __assign(__assign({}, defaultProps), { onDelete: onDelete });
674
+ user = setUp(props).user;
675
+ attribute = within(getCellByIndexes(1, 1)).getByTestId('value-index-0');
676
+ return [4 /*yield*/, user.hover(attribute)];
677
+ case 1:
678
+ _a.sent();
679
+ moreButton = within(attribute).getByRole('button', { name: 'More actions' });
680
+ return [4 /*yield*/, user.click(moreButton)];
681
+ case 2:
682
+ _a.sent();
683
+ deleteButton = screen.getByText('Delete');
684
+ return [4 /*yield*/, user.click(deleteButton)];
685
+ case 3:
686
+ _a.sent();
687
+ dialog = screen.getByRole('dialog');
688
+ declineButton = within(dialog).getByText('No');
689
+ confirmButton = within(dialog).getByText('Yes');
690
+ fireEvent.click(declineButton);
691
+ fireEvent.click(confirmButton);
692
+ expect(onDelete).not.toHaveBeenCalled();
693
+ unmockTableSizing();
694
+ return [2 /*return*/];
695
+ }
696
+ });
697
+ }); });
386
698
  });
387
- it('should pass correct props to AddAttributesButton', function () {
388
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props)));
389
- var buttonProps = wrapper.find('AddAttributesButton').props();
390
- expect(buttonProps).toEqual({
391
- parentUri: props.entity.uri,
392
- parentTypeUri: props.entity.type,
393
- selectedAttributeTypes: props.selectedAttributeTypes,
394
- onSelectAttributeTypes: props.onSelectAttributeTypes,
395
- onAdd: props.onAdd
699
+ it('should add attribute to beginning on simple attribute select', function () { return __awaiter(void 0, void 0, void 0, function () {
700
+ var onAdd, onSelectAttributeTypes, user;
701
+ return __generator(this, function (_a) {
702
+ switch (_a.label) {
703
+ case 0:
704
+ onAdd = jest.fn();
705
+ onSelectAttributeTypes = jest.fn();
706
+ user = setUp(__assign(__assign({}, defaultProps), { onAdd: onAdd, onSelectAttributeTypes: onSelectAttributeTypes })).user;
707
+ return [4 /*yield*/, user.click(screen.getByText('Attribute'))];
708
+ case 1:
709
+ _a.sent();
710
+ expect(screen.queryByText('Image')).not.toBeInTheDocument();
711
+ expect(screen.queryByText('Address')).not.toBeInTheDocument();
712
+ return [4 /*yield*/, user.click(screen.getByText('String Label 2'))];
713
+ case 2:
714
+ _a.sent();
715
+ return [4 /*yield*/, user.keyboard('{Escape}')];
716
+ case 3:
717
+ _a.sent();
718
+ expect(onSelectAttributeTypes).toHaveBeenCalledWith(__spreadArray([
719
+ {
720
+ label: 'String Label 2',
721
+ name: 'TextField 2',
722
+ type: 'String',
723
+ uri: 'configuration/entityTypes/HCP/attributes/TextField2'
724
+ }
725
+ ], selectedAttributeTypes, true));
726
+ expect(onAdd).not.toHaveBeenCalled();
727
+ return [2 /*return*/];
728
+ }
396
729
  });
397
- });
398
- it('should pass correct props to AttributesHeadCellRenderer', function () {
399
- var wrapper = mount(React.createElement(AttributesTable, __assign({}, props, { readOnly: true })));
400
- expect(wrapper.find('AttributesHeadCellRenderer').prop('readOnly')).toBe(true);
401
- });
730
+ }); });
731
+ it('should add attribute to beginning on nested attribute select', function () { return __awaiter(void 0, void 0, void 0, function () {
732
+ var onAdd, onSelectAttributeTypes, user, selectedNested;
733
+ return __generator(this, function (_a) {
734
+ switch (_a.label) {
735
+ case 0:
736
+ onAdd = jest.fn();
737
+ onSelectAttributeTypes = jest.fn();
738
+ user = setUp(__assign(__assign({}, defaultProps), { onAdd: onAdd, onSelectAttributeTypes: onSelectAttributeTypes })).user;
739
+ return [4 /*yield*/, user.click(screen.getByText('Attribute'))];
740
+ case 1:
741
+ _a.sent();
742
+ return [4 /*yield*/, user.click(screen.getByText('Nested'))];
743
+ case 2:
744
+ _a.sent();
745
+ return [4 /*yield*/, user.keyboard('{Escape}')];
746
+ case 3:
747
+ _a.sent();
748
+ selectedNested = {
749
+ label: 'Nested',
750
+ name: 'Nested',
751
+ type: 'Nested',
752
+ uri: 'configuration/entityTypes/HCP/attributes/Nested'
753
+ };
754
+ expect(onSelectAttributeTypes).toHaveBeenCalledWith(__spreadArray([selectedNested], selectedAttributeTypes, true));
755
+ expect(onAdd).toHaveBeenCalledWith({
756
+ attributeType: selectedNested,
757
+ parentUri: 'entities/01L2n5z'
758
+ });
759
+ return [2 /*return*/];
760
+ }
761
+ });
762
+ }); });
402
763
  });