@reltio/components 1.4.2044 → 1.4.2046

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/AttributesFiltersBuilder/AttributesFiltersBuilder.test.js +72 -50
  2. package/BasicTable/BasicTable.test.js +232 -278
  3. package/BlobRenderer/BlobRenderer.js +1 -1
  4. package/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.test.js +125 -111
  5. package/DateIntervalSelector/DateIntervalSelector.test.js +87 -65
  6. package/DefaultCellValueRenderer/DefaultCellValueRenderer.js +1 -1
  7. package/DefaultCellValueRenderer/DefaultCellValueRenderer.test.js +16 -46
  8. package/DeleteButton/DeleteButton.spec.js +53 -15
  9. package/DependentLookupEditor/DependentLookupEditor.test.js +555 -807
  10. package/Drawer/Drawer.test.js +9 -20
  11. package/DropDownEditor/DropDownEditor.test.js +81 -29
  12. package/DropDownMenuButton/DropDownMenuButton.spec.js +101 -70
  13. package/DropDownSelector/DropDownSelector.test.js +159 -30
  14. package/EditModeAttributesFactory/EditModeAttributesFactory.test.js +143 -0
  15. package/EditModeAttributesList/EditModeAttributesList.test.js +277 -224
  16. package/EditModeAttributesList/attributes.test-data.d.ts +0 -11
  17. package/EditModeAttributesList/attributes.test-data.js +1 -1
  18. package/EditModeAttributesPager/EditModeAttributesPager.test.js +698 -234
  19. package/EditModeAttributesPager/helpers.test.js +2 -12
  20. package/EditModeAttributesView/EditModeAttributesView.test.js +263 -157
  21. package/EditModeComplexAttribute/EditModeComplexAttribute.js +1 -1
  22. package/EditModeComplexAttribute/EditModeComplexAttribute.test.js +313 -298
  23. package/EditModeComplexAttribute/nestedAttrType.test-data.d.ts +0 -5
  24. package/EditModeComplexAttribute/nestedAttrType.test-data.js +3 -44
  25. package/EmptyState/EmptyState.test.js +99 -38
  26. package/EntityCreator/EntityCreator.test.js +68 -35
  27. package/EntitySelector/EntitySelector.js +1 -1
  28. package/EntitySelector/EntitySelector.test.js +275 -422
  29. package/EntityTypeIcon/EntityTypeIcon.test.js +16 -16
  30. package/EntityTypesSelector/EntityTypesSelector.test.js +62 -21
  31. package/ErrorBoundary/ErrorBoundary.test.js +19 -17
  32. package/ErrorMessage/ErrorMessage.js +1 -1
  33. package/ErrorPopup/ErrorPopup.test.js +72 -25
  34. package/ErrorWrapper/ErrorWrapper.test.js +10 -9
  35. package/ExpandedValueTooltip/ExpandedValueTooltip.test.js +111 -37
  36. package/FileTypeEditor/FileTypeEditor.test.js +95 -64
  37. package/FilterValueEditor/FilterValueEditor.test.js +183 -157
  38. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.js +2 -2
  39. package/HierarchicalAttributeTooltip/HierarchicalAttributeTooltip.test.js +114 -24
  40. package/HierarchyNodeTitle/HierarchyNodeTitle.test.js +61 -100
  41. package/OvIcon/OvIcon.js +2 -2
  42. package/ProfileCard/components/ProfileCardPlaceholder/ProfileCardPlaceholder.js +2 -2
  43. package/ShowLess/ShowLess.js +1 -1
  44. package/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  45. package/UploadFileButton/components/UploadMode/UploadMode.js +1 -1
  46. package/cjs/AttributesFiltersBuilder/AttributesFiltersBuilder.test.js +72 -50
  47. package/cjs/BasicTable/BasicTable.test.js +230 -299
  48. package/cjs/BlobRenderer/BlobRenderer.js +1 -1
  49. package/cjs/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.test.js +125 -111
  50. package/cjs/DateIntervalSelector/DateIntervalSelector.test.js +87 -65
  51. package/cjs/DefaultCellValueRenderer/DefaultCellValueRenderer.js +1 -1
  52. package/cjs/DefaultCellValueRenderer/DefaultCellValueRenderer.test.js +16 -46
  53. package/cjs/DeleteButton/DeleteButton.spec.js +53 -15
  54. package/cjs/DependentLookupEditor/DependentLookupEditor.test.js +569 -821
  55. package/cjs/Drawer/Drawer.test.js +10 -21
  56. package/cjs/DropDownEditor/DropDownEditor.test.js +81 -29
  57. package/cjs/DropDownMenuButton/DropDownMenuButton.spec.js +102 -71
  58. package/cjs/DropDownSelector/DropDownSelector.test.js +159 -30
  59. package/cjs/EditModeAttributesFactory/EditModeAttributesFactory.test.js +148 -0
  60. package/cjs/EditModeAttributesList/EditModeAttributesList.test.js +277 -224
  61. package/cjs/EditModeAttributesList/attributes.test-data.d.ts +0 -11
  62. package/cjs/EditModeAttributesList/attributes.test-data.js +1 -1
  63. package/cjs/EditModeAttributesPager/EditModeAttributesPager.test.js +696 -232
  64. package/cjs/EditModeAttributesPager/helpers.test.js +2 -12
  65. package/cjs/EditModeAttributesView/EditModeAttributesView.test.js +262 -156
  66. package/cjs/EditModeComplexAttribute/EditModeComplexAttribute.js +1 -1
  67. package/cjs/EditModeComplexAttribute/EditModeComplexAttribute.test.js +312 -297
  68. package/cjs/EditModeComplexAttribute/nestedAttrType.test-data.d.ts +0 -5
  69. package/cjs/EditModeComplexAttribute/nestedAttrType.test-data.js +3 -44
  70. package/cjs/EmptyState/EmptyState.test.js +98 -37
  71. package/cjs/EntityCreator/EntityCreator.test.js +69 -36
  72. package/cjs/EntitySelector/EntitySelector.js +1 -1
  73. package/cjs/EntitySelector/EntitySelector.test.js +274 -421
  74. package/cjs/EntityTypeIcon/EntityTypeIcon.test.js +17 -17
  75. package/cjs/EntityTypesSelector/EntityTypesSelector.test.js +62 -21
  76. package/cjs/ErrorBoundary/ErrorBoundary.test.js +19 -17
  77. package/cjs/ErrorMessage/ErrorMessage.js +1 -1
  78. package/cjs/ErrorPopup/ErrorPopup.test.js +71 -24
  79. package/cjs/ErrorWrapper/ErrorWrapper.test.js +10 -9
  80. package/cjs/ExpandedValueTooltip/ExpandedValueTooltip.test.js +111 -37
  81. package/cjs/FileTypeEditor/FileTypeEditor.test.js +95 -64
  82. package/cjs/FilterValueEditor/FilterValueEditor.test.js +182 -156
  83. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.js +2 -2
  84. package/cjs/HierarchicalAttributeTooltip/HierarchicalAttributeTooltip.test.js +114 -24
  85. package/cjs/HierarchyNodeTitle/HierarchyNodeTitle.test.js +61 -100
  86. package/cjs/OvIcon/OvIcon.js +2 -2
  87. package/cjs/ProfileCard/components/ProfileCardPlaceholder/ProfileCardPlaceholder.js +2 -2
  88. package/cjs/ShowLess/ShowLess.js +1 -1
  89. package/cjs/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  90. package/cjs/UploadFileButton/components/UploadMode/UploadMode.js +1 -1
  91. package/cjs/contexts/ExpandedAttributesContext/useAttributeExpanded.test.js +25 -18
  92. package/cjs/contexts/MdmModuleContext/hooks.d.ts +2 -2
  93. package/cjs/contexts/ReloadDataContext/ReloadDataContext.spec.js +16 -53
  94. package/cjs/test-utils/TestStylesProvider.js +6 -5
  95. package/contexts/ExpandedAttributesContext/useAttributeExpanded.test.js +25 -18
  96. package/contexts/MdmModuleContext/hooks.d.ts +2 -2
  97. package/contexts/ReloadDataContext/ReloadDataContext.spec.js +16 -30
  98. package/package.json +2 -2
  99. package/test-utils/TestStylesProvider.js +3 -2
  100. package/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.js +0 -101
  101. package/AttributesFiltersBuilder/components/RowActions/RowActions.test.js +0 -106
  102. package/BasicTable/IntegrationBasicTable.test.d.ts +0 -1
  103. package/BasicTable/IntegrationBasicTable.test.js +0 -203
  104. package/DependentLookupEditor/IntegrationDependentLookupEditor.test.d.ts +0 -1
  105. package/DependentLookupEditor/IntegrationDependentLookupEditor.test.js +0 -137
  106. package/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.d.ts +0 -1
  107. package/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.js +0 -32
  108. package/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.d.ts +0 -1
  109. package/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.js +0 -106
  110. package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.d.ts +0 -1
  111. package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.js +0 -338
  112. package/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.d.ts +0 -1
  113. package/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.js +0 -225
  114. package/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.d.ts +0 -1
  115. package/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.js +0 -47
  116. package/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.d.ts +0 -1
  117. package/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.js +0 -204
  118. package/EditModeAttributesView/IntegrationEditModeAttributesView.test.d.ts +0 -1
  119. package/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +0 -246
  120. package/EditModeAttributesView/metadata.test-data.d.ts +0 -4
  121. package/EditModeAttributesView/metadata.test-data.js +0 -119
  122. package/EntityCreator/entityType.test-data.d.ts +0 -52
  123. package/EntityCreator/entityType.test-data.js +0 -188
  124. package/EntitySelector/components/ClearIndicator/ClearIndicator.test.d.ts +0 -1
  125. package/EntitySelector/components/ClearIndicator/ClearIndicator.test.js +0 -27
  126. package/EntitySelector/components/EntityOption/EntityOption.test.d.ts +0 -1
  127. package/EntitySelector/components/EntityOption/EntityOption.test.js +0 -79
  128. package/EntitySelector/components/Group/Group.test.d.ts +0 -1
  129. package/EntitySelector/components/Group/Group.test.js +0 -65
  130. package/EntitySelector/components/SingleValue/SingleValue.test.d.ts +0 -1
  131. package/EntitySelector/components/SingleValue/SingleValue.test.js +0 -78
  132. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.d.ts +0 -1
  133. package/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.js +0 -76
  134. package/cjs/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.d.ts +0 -1
  135. package/cjs/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.js +0 -106
  136. package/cjs/AttributesFiltersBuilder/components/RowActions/RowActions.test.d.ts +0 -1
  137. package/cjs/AttributesFiltersBuilder/components/RowActions/RowActions.test.js +0 -111
  138. package/cjs/BasicTable/IntegrationBasicTable.test.d.ts +0 -1
  139. package/cjs/BasicTable/IntegrationBasicTable.test.js +0 -208
  140. package/cjs/DependentLookupEditor/IntegrationDependentLookupEditor.test.d.ts +0 -1
  141. package/cjs/DependentLookupEditor/IntegrationDependentLookupEditor.test.js +0 -142
  142. package/cjs/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.d.ts +0 -1
  143. package/cjs/DropDownMenuButton/components/DefaultMenuItemRenderer/DefaultMenuItemRenderer.spec.js +0 -37
  144. package/cjs/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.d.ts +0 -1
  145. package/cjs/EditModeAttributesFactory/components/EditModeAttribute/EditModeAttribute.test.js +0 -111
  146. package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.d.ts +0 -1
  147. package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.test.js +0 -343
  148. package/cjs/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.d.ts +0 -1
  149. package/cjs/EditModeAttributesPager/components/AttributeRenderer/IntegrationAttributeRenderer.test.js +0 -230
  150. package/cjs/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.d.ts +0 -1
  151. package/cjs/EditModeAttributesPager/components/ImageLineRenderer/ImageLineRenderer.test.js +0 -52
  152. package/cjs/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.d.ts +0 -1
  153. package/cjs/EditModeAttributesPager/components/SpecialRenderer/SpecialRenderer.test.js +0 -209
  154. package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.d.ts +0 -1
  155. package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +0 -251
  156. package/cjs/EditModeAttributesView/metadata.test-data.d.ts +0 -4
  157. package/cjs/EditModeAttributesView/metadata.test-data.js +0 -123
  158. package/cjs/EntityCreator/entityType.test-data.d.ts +0 -52
  159. package/cjs/EntityCreator/entityType.test-data.js +0 -191
  160. package/cjs/EntitySelector/components/ClearIndicator/ClearIndicator.test.d.ts +0 -1
  161. package/cjs/EntitySelector/components/ClearIndicator/ClearIndicator.test.js +0 -32
  162. package/cjs/EntitySelector/components/EntityOption/EntityOption.test.d.ts +0 -1
  163. package/cjs/EntitySelector/components/EntityOption/EntityOption.test.js +0 -84
  164. package/cjs/EntitySelector/components/Group/Group.test.d.ts +0 -1
  165. package/cjs/EntitySelector/components/Group/Group.test.js +0 -70
  166. package/cjs/EntitySelector/components/SingleValue/SingleValue.test.d.ts +0 -1
  167. package/cjs/EntitySelector/components/SingleValue/SingleValue.test.js +0 -83
  168. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.d.ts +0 -1
  169. package/cjs/FilterValueEditor/components/RangeDataTypeValueEditor/RangeDataTypeValueEditor.test.js +0 -81
  170. package/cjs/contexts/CollaborationContext/CollaborationContextProvider.test.d.ts +0 -1
  171. package/cjs/contexts/CollaborationContext/CollaborationContextProvider.test.js +0 -104
  172. package/contexts/CollaborationContext/CollaborationContextProvider.test.d.ts +0 -1
  173. package/contexts/CollaborationContext/CollaborationContextProvider.test.js +0 -99
  174. /package/{AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.test.d.ts → EditModeAttributesFactory/EditModeAttributesFactory.test.d.ts} +0 -0
  175. /package/{AttributesFiltersBuilder/components/RowActions/RowActions.test.d.ts → cjs/EditModeAttributesFactory/EditModeAttributesFactory.test.d.ts} +0 -0
@@ -1,16 +1,6 @@
1
- import { filterNewValues } from './helpers';
2
1
  import { generateNewRelationUri } from '@reltio/mdm-sdk';
3
- var values = [
4
- {
5
- uri: generateNewRelationUri()
6
- },
7
- {
8
- uri: 'ui/kl/io/89'
9
- },
10
- {
11
- uri: 'relations/yuyi/attributes/uiouoi'
12
- }
13
- ];
2
+ import { filterNewValues } from './helpers';
3
+ var values = [{ uri: generateNewRelationUri() }, { uri: 'ui/kl/io/89' }, { uri: 'relations/yuyi/attributes/uiouoi' }];
14
4
  describe('Attribute pager utils', function () {
15
5
  describe('filterNewValues', function () {
16
6
  it('should return only new attribute', function () {
@@ -45,211 +45,317 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
45
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
46
  }
47
47
  };
48
+ var _a;
48
49
  import React from 'react';
49
- import { shallow } from 'enzyme';
50
- import { render, screen } from '@testing-library/react';
51
50
  import userEvent from '@testing-library/user-event';
52
- import { PinnedAttributesContext } from '../contexts/PinnedAttributesContext';
53
- import { useMdmAction, useMdmMetadata, useMdmModifiedEntity, useMdmUserRoles } from '../contexts/MdmModuleContext';
54
- import { EditModeAttributesView } from './EditModeAttributesView';
51
+ import { render, screen, act, within } from '@testing-library/react';
52
+ import { assocPath } from 'ramda';
53
+ import { ErrorType, Mode, uploadImage } from '@reltio/mdm-sdk';
54
+ import { MdmModuleProvider } from '../contexts/MdmModuleContext';
55
+ import { ScrollToElementProvider } from '../contexts/ScrollToElementContext';
55
56
  import { HiddenAttributesContext } from '../contexts/HiddenAttributesContext';
56
- jest.mock('../contexts/MdmModuleContext', function () { return (__assign(__assign({}, jest.requireActual('../contexts/MdmModuleContext')), { useMdmAction: jest.fn(), useMdmMetadata: jest.fn(), useMdmUserRoles: jest.fn(), useMdmModifiedEntity: jest.fn(), useMdmDependentLookupEditorState: jest.fn() })); });
57
- var metadata = {
58
- entityTypes: []
57
+ import { EditModeAttributesView } from './EditModeAttributesView';
58
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { uploadImage: jest.fn() })); });
59
+ var defaultEntity = {
60
+ uri: 'entities/1E4APrQW',
61
+ type: 'configuration/entityTypes/HCP'
59
62
  };
60
- var pinnedAttributes = [
61
- {
62
- roles: ['ROLE_ADMIN'],
63
- attributes: [
64
- 'configuration/entityTypes/HCA/attributes/SubTypeCode',
65
- 'configuration/entityTypes/HCA/attributes/Department'
66
- ]
67
- }
68
- ];
69
- var entity = { uri: 'entities/123' };
70
- var setUp = function (props) { return shallow(React.createElement(EditModeAttributesView, __assign({ entity: entity }, props))); };
71
- describe('EditModeAttributesView', function () {
72
- describe('PinnedAttributesContext', function () {
73
- beforeEach(function () {
74
- useMdmMetadata.mockReturnValue(metadata);
75
- useMdmUserRoles.mockReturnValue([]);
76
- useMdmModifiedEntity.mockReturnValue(null);
77
- useMdmAction.mockReturnValue(jest.fn());
78
- });
79
- afterEach(function () {
80
- jest.clearAllMocks();
81
- });
82
- it('should render PinnedAttributesContext.Provider with passing pinnedAttributes for this user', function () {
83
- useMdmUserRoles.mockReturnValue(['ROLE_ADMIN']);
84
- var component = setUp({ pinnedAttributes: pinnedAttributes });
85
- expect(component.find(PinnedAttributesContext.Provider)).toHaveLength(1);
86
- expect(component.find(PinnedAttributesContext.Provider).prop('value')).toEqual(pinnedAttributes[0].attributes);
87
- });
88
- it('should render PinnedAttributesContext.Provider with passing pinnedAttributes as empty array for user without roles', function () {
89
- var component = setUp({ pinnedAttributes: pinnedAttributes });
90
- expect(component.find(PinnedAttributesContext.Provider)).toHaveLength(1);
91
- expect(component.find(PinnedAttributesContext.Provider).prop('value')).toEqual([]);
92
- });
93
- it('should render PinnedAttributesContext.Provider with passing pinnedAttributes as empty array if no pinnedAttributes', function () {
94
- var component = setUp({});
95
- expect(component.find(PinnedAttributesContext.Provider)).toHaveLength(1);
96
- expect(component.find(PinnedAttributesContext.Provider).prop('value')).toEqual([]);
97
- });
98
- });
99
- describe('rule based attributes', function () {
100
- var metadata = {
101
- entityTypes: [
63
+ var defaultModifiedEntities = (_a = {}, _a[defaultEntity.uri] = defaultEntity, _a);
64
+ var defaultMetadata = {
65
+ uri: 'configuration',
66
+ entityTypes: [
67
+ {
68
+ uri: 'configuration/entityTypes/HCP',
69
+ attributes: [
102
70
  {
103
- uri: 'configuration/entityTypes/HCP',
71
+ uri: 'configuration/entityTypes/HCP/attributes/FirstLevelNested',
72
+ name: 'FirstLevelNested',
73
+ type: 'Nested',
104
74
  attributes: [
105
75
  {
106
- name: 'Category1',
76
+ label: 'FirstLevelNestedSub1_HCP',
77
+ name: 'FirstLevelNestedSub1',
78
+ uri: 'configuration/entityTypes/HCP/attributes/FirstLevelNested/attributes/FirstLevelNestedSub1',
107
79
  type: 'String',
108
- uri: 'configuration/entityTypes/HCP/attributes/Category1'
80
+ required: true
109
81
  },
110
82
  {
111
- name: 'Category2',
112
- type: 'String',
113
- uri: 'configuration/entityTypes/HCP/attributes/Category2'
114
- },
115
- {
116
- name: 'Category3',
117
- type: 'String',
118
- uri: 'configuration/entityTypes/HCP/attributes/Category3'
119
- },
120
- {
121
- name: 'Category4',
122
- type: 'String',
123
- uri: 'configuration/entityTypes/HCP/attributes/Category4'
124
- },
125
- {
126
- name: 'Nested1',
127
- label: 'Nested1',
128
- type: 'Nested',
129
- uri: 'configuration/entityTypes/HCP/attributes/Nested1',
130
- attributes: [
131
- {
132
- name: 'NestedCategory1',
133
- type: 'String',
134
- uri: 'configuration/entityTypes/HCP/attributes/Nested1/attributes/NestedCategory1'
135
- },
136
- {
137
- name: 'NestedCategory2',
138
- type: 'String',
139
- uri: 'configuration/entityTypes/HCP/attributes/Nested1/attributes/NestedCategory2'
140
- }
141
- ]
83
+ label: 'Int',
84
+ name: 'Int',
85
+ uri: 'configuration/entityTypes/HCP/attributes/FirstLevelNested/attributes/Int',
86
+ type: 'Int'
142
87
  }
143
88
  ]
89
+ },
90
+ {
91
+ label: 'First Name',
92
+ name: 'FirstName',
93
+ type: 'String',
94
+ uri: 'configuration/entityTypes/HCP/attributes/FirstName'
95
+ },
96
+ {
97
+ label: 'Middle Name',
98
+ name: 'MiddleName',
99
+ type: 'String',
100
+ uri: 'configuration/entityTypes/HCP/attributes/MiddleName'
101
+ },
102
+ {
103
+ label: 'Last Name',
104
+ name: 'LastName',
105
+ type: 'String',
106
+ uri: 'configuration/entityTypes/HCP/attributes/LastName'
107
+ },
108
+ {
109
+ label: 'Image Gallery',
110
+ name: 'ImageGallery',
111
+ required: true,
112
+ type: 'Image',
113
+ uri: 'configuration/entityTypes/HCP/attributes/ImageGallery'
144
114
  }
145
115
  ]
116
+ }
117
+ ]
118
+ };
119
+ var defaultMdmValues = {
120
+ modifiedEntities: defaultModifiedEntities,
121
+ metadata: defaultMetadata,
122
+ dependentLookups: { editors: {}, structure: {}, initedTypeUris: [] },
123
+ profileErrors: [],
124
+ user: { roles: [] }
125
+ };
126
+ var mdmActions = {
127
+ addAttributes: jest.fn(),
128
+ modifyAttribute: jest.fn(),
129
+ removeAttribute: jest.fn(),
130
+ errorDeactivated: jest.fn()
131
+ };
132
+ var defaultProps = { entity: defaultEntity, mode: Mode.Editing };
133
+ describe('Edit mode attributes view tests', function () {
134
+ var scrollSpy = jest.fn();
135
+ window.HTMLElement.prototype.scrollIntoView = scrollSpy;
136
+ var setUp = function (_a) {
137
+ var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c, _d = _b.mdmValues, mdmValues = _d === void 0 ? defaultMdmValues : _d, _e = _b.hiddenAttributesContextValue, hiddenAttributesContextValue = _e === void 0 ? {} : _e, _f = _b.userOptions, userOptions = _f === void 0 ? {} : _f;
138
+ var user = userEvent.setup(userOptions);
139
+ var Providers = function (_a) {
140
+ var children = _a.children;
141
+ return (React.createElement(MdmModuleProvider, { values: mdmValues, actions: mdmActions },
142
+ React.createElement(HiddenAttributesContext.Provider, { value: hiddenAttributesContextValue },
143
+ React.createElement(ScrollToElementProvider, null, children))));
146
144
  };
147
- var setUp = function (props, hiddenAttributes) {
148
- var user = userEvent.setup();
149
- var Providers = function (_a) {
150
- var children = _a.children;
151
- return (React.createElement(HiddenAttributesContext.Provider, { value: hiddenAttributes }, children));
152
- };
153
- return __assign(__assign({}, render(React.createElement(EditModeAttributesView, __assign({}, props)), { wrapper: Providers })), { user: user });
154
- };
155
- beforeAll(function () {
156
- useMdmUserRoles.mockReturnValue([]);
157
- useMdmAction.mockReturnValue(jest.fn());
158
- useMdmMetadata.mockReturnValue(metadata);
145
+ return __assign({ user: user }, render(React.createElement(EditModeAttributesView, __assign({}, props)), { wrapper: Providers }));
146
+ };
147
+ beforeAll(function () {
148
+ jest.useFakeTimers();
149
+ });
150
+ afterEach(function () {
151
+ jest.runOnlyPendingTimers();
152
+ });
153
+ it('should highlight last added attribute', function () { return __awaiter(void 0, void 0, void 0, function () {
154
+ var metadata, mdmValues, user, moreAttributesButton, popover, attributes;
155
+ return __generator(this, function (_a) {
156
+ switch (_a.label) {
157
+ case 0:
158
+ metadata = assocPath(['entityTypes', 0, 'attributes', 0, 'required'], true, defaultMetadata);
159
+ mdmValues = __assign(__assign({}, defaultMdmValues), { metadata: metadata });
160
+ user = setUp({ mdmValues: mdmValues, userOptions: { delay: null } }).user;
161
+ moreAttributesButton = screen.getAllByRole('button', { name: 'More attributes' })[0];
162
+ return [4 /*yield*/, user.click(moreAttributesButton)];
163
+ case 1:
164
+ _a.sent();
165
+ popover = screen.getByRole('presentation');
166
+ return [4 /*yield*/, user.click(within(popover).getByText('FirstLevelNested'))];
167
+ case 2:
168
+ _a.sent();
169
+ return [4 /*yield*/, user.click(popover.firstChild)];
170
+ case 3:
171
+ _a.sent(); // click on backdrop
172
+ act(function () {
173
+ jest.runOnlyPendingTimers();
174
+ });
175
+ attributes = screen.getAllByTestId('reltio-edit-attribute');
176
+ expect(attributes[0]).toHaveClass('highlighted');
177
+ expect(scrollSpy).toHaveBeenCalledTimes(1);
178
+ act(function () {
179
+ jest.runOnlyPendingTimers();
180
+ });
181
+ expect(attributes[0]).not.toHaveClass('highlighted');
182
+ return [2 /*return*/];
183
+ }
159
184
  });
185
+ }); });
186
+ describe('image attribute behaviour', function () {
187
+ var profileErrors = [
188
+ {
189
+ parentUri: 'entities/1E4APrQW',
190
+ uri: '',
191
+ attributeTypeUri: 'configuration/entityTypes/HCP/attributes/ImageGallery',
192
+ message: 'Attribute is required',
193
+ type: ErrorType.missed
194
+ }
195
+ ];
196
+ it('should render required and missed image attribute in edit mode correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
197
+ return __generator(this, function (_a) {
198
+ setUp({ mdmValues: __assign(__assign({}, defaultMdmValues), { profileErrors: profileErrors }) });
199
+ expect(screen.getByText('*')).toBeInTheDocument();
200
+ expect(screen.getByText('Attribute is required')).toBeInTheDocument();
201
+ return [2 /*return*/];
202
+ });
203
+ }); });
204
+ it('should deactivate error for required and missed image attribute after image was added', function () { return __awaiter(void 0, void 0, void 0, function () {
205
+ var resolveUploadImage, user, file;
206
+ return __generator(this, function (_a) {
207
+ switch (_a.label) {
208
+ case 0:
209
+ uploadImage.mockImplementation(function () {
210
+ return new Promise(function (resolve) {
211
+ resolveUploadImage = resolve;
212
+ });
213
+ });
214
+ user = setUp({
215
+ mdmValues: __assign(__assign({}, defaultMdmValues), { profileErrors: profileErrors }),
216
+ userOptions: { delay: null, applyAccept: false }
217
+ }).user;
218
+ return [4 /*yield*/, user.click(screen.getByTestId('reltio-upload-image-button'))];
219
+ case 1:
220
+ _a.sent();
221
+ file = new File(['test file content'], 'test.png', { type: 'image/png' });
222
+ return [4 /*yield*/, user.upload(screen.getByTestId('upload-image-button'), file)];
223
+ case 2:
224
+ _a.sent();
225
+ return [4 /*yield*/, screen.findByTestId('reltio-linear-load-indicator')];
226
+ case 3:
227
+ _a.sent();
228
+ return [4 /*yield*/, act(function () { return __awaiter(void 0, void 0, void 0, function () {
229
+ return __generator(this, function (_a) {
230
+ switch (_a.label) {
231
+ case 0: return [4 /*yield*/, resolveUploadImage('Image')];
232
+ case 1:
233
+ _a.sent();
234
+ return [2 /*return*/];
235
+ }
236
+ });
237
+ }); })];
238
+ case 4:
239
+ _a.sent();
240
+ expect(screen.queryByTestId('reltio-linear-load-indicator')).not.toBeInTheDocument();
241
+ expect(mdmActions.errorDeactivated).toHaveBeenCalledWith('configuration/entityTypes/HCP/attributes/ImageGallery--entities/1E4APrQW');
242
+ return [2 /*return*/];
243
+ }
244
+ });
245
+ }); });
246
+ });
247
+ describe('pinned attributes', function () {
248
+ var pinnedAttributes = [
249
+ {
250
+ roles: ['ROLE_ADMIN'],
251
+ attributes: [
252
+ 'configuration/entityTypes/HCP/attributes/LastName',
253
+ 'configuration/entityTypes/HCP/attributes/FirstName'
254
+ ]
255
+ }
256
+ ];
257
+ it('should render pinned attributes correctly with passing pinnedAttributes for this user', function () {
258
+ var mdmValues = __assign(__assign({}, defaultMdmValues), { user: { roles: ['ROLE_ADMIN'] } });
259
+ var props = __assign(__assign({}, defaultProps), { pinnedAttributes: pinnedAttributes });
260
+ setUp({ props: props, mdmValues: mdmValues });
261
+ var labels = screen.getAllByTestId('reltio-attribute-label');
262
+ expect(labels).toHaveLength(3);
263
+ expect(labels[0]).toHaveTextContent('First Name');
264
+ expect(labels[1]).toHaveTextContent('Last Name');
265
+ expect(labels[2]).toHaveTextContent('Image Gallery*');
266
+ });
267
+ it('should not render pinned attributes with passing pinnedAttributes as empty array for user without roles', function () {
268
+ var props = __assign(__assign({}, defaultProps), { pinnedAttributes: pinnedAttributes });
269
+ setUp({ props: props });
270
+ var labels = screen.getAllByTestId('reltio-attribute-label');
271
+ expect(labels).toHaveLength(1);
272
+ expect(labels[0]).toHaveTextContent('Image Gallery*');
273
+ });
274
+ it('should not render pinned attributes with passing pinnedAttributes as empty array if no pinnedAttributes', function () {
275
+ setUp();
276
+ var labels = screen.getAllByTestId('reltio-attribute-label');
277
+ expect(labels).toHaveLength(1);
278
+ expect(labels[0]).toHaveTextContent('Image Gallery*');
279
+ });
280
+ });
281
+ describe('rule based attributes', function () {
160
282
  it('should hide attributes if there are no rules allow to show the attribute', function () {
161
- var entity = {
162
- type: 'configuration/entityTypes/HCP',
163
- uri: 'entities/uri_e'
283
+ var _a;
284
+ var defaultEntity = {
285
+ uri: 'entities/1E4APrQW',
286
+ type: 'configuration/entityTypes/HCP'
164
287
  };
165
- useMdmModifiedEntity.mockReturnValue({
166
- type: 'configuration/entityTypes/HCP',
167
- uri: 'entities/uri_e',
168
- attributes: {
169
- Category1: [
288
+ var modifiedEntities = __assign(__assign({}, defaultModifiedEntities), (_a = {}, _a[defaultEntity.uri] = __assign(__assign({}, defaultEntity), { attributes: {
289
+ FirstName: [
170
290
  {
171
- uri: 'entities/uri_e/attributes/uri1',
172
- value: 'category1_value1'
291
+ uri: 'entities/1E4APrQW/attributes/FirstName/uri1',
292
+ value: 'first name value'
173
293
  }
174
294
  ],
175
- Category2: [
295
+ MiddleName: [
176
296
  {
177
- uri: 'entities/uri_e/attributes/uri2',
178
- value: 'category2_value1'
297
+ uri: 'entities/1E4APrQW/attributes/MiddleName/uri2',
298
+ value: 'middle name value'
179
299
  }
180
300
  ],
181
- Category3: [
301
+ LastName: [
182
302
  {
183
- uri: 'entities/uri_e/attributes/uri3',
184
- value: 'category3_value1'
185
- }
186
- ],
187
- Category4: [
188
- {
189
- uri: 'entities/uri_e/attributes/uri4',
190
- value: 'category4_value1'
303
+ uri: 'entities/1E4APrQW/attributes/LastName/uri3',
304
+ value: 'last name value'
191
305
  }
192
306
  ]
193
- }
194
- });
195
- var hiddenAttributes = {
196
- 'entities/uri_e': [
197
- 'configuration/entityTypes/HCP/attributes/Category2',
198
- 'configuration/entityTypes/HCP/attributes/Category3',
199
- 'configuration/entityTypes/HCP/attributes/Category4'
307
+ } }), _a));
308
+ var mdmValues = __assign(__assign({}, defaultMdmValues), { modifiedEntities: modifiedEntities });
309
+ var hiddenAttributesContextValue = {
310
+ 'entities/1E4APrQW': [
311
+ 'configuration/entityTypes/HCP/attributes/FirstName',
312
+ 'configuration/entityTypes/HCP/attributes/LastName'
200
313
  ]
201
314
  };
202
- setUp({ entity: entity }, hiddenAttributes);
203
- expect(screen.getByText('category1_value1')).toBeInTheDocument();
204
- expect(screen.queryByText('category2_value1')).not.toBeInTheDocument();
205
- expect(screen.queryByText('category3_value1')).not.toBeInTheDocument();
206
- expect(screen.queryByText('category4_value1')).not.toBeInTheDocument();
315
+ setUp({ mdmValues: mdmValues, hiddenAttributesContextValue: hiddenAttributesContextValue });
316
+ screen.getByText('Middle Name');
317
+ expect(screen.queryByText('First Name')).not.toBeInTheDocument();
318
+ expect(screen.queryByText('Last Name')).not.toBeInTheDocument();
207
319
  });
208
320
  it('should hide nested attributes if there are no rules allow to show the attribute', function () { return __awaiter(void 0, void 0, void 0, function () {
209
- var entity, hiddenAttributes, user;
210
- return __generator(this, function (_a) {
211
- switch (_a.label) {
321
+ var modifiedEntities, mdmValues, hiddenAttributesContextValue, user;
322
+ var _a;
323
+ return __generator(this, function (_b) {
324
+ switch (_b.label) {
212
325
  case 0:
213
- entity = {
214
- type: 'configuration/entityTypes/HCP',
215
- uri: 'entities/uri_e'
216
- };
217
- useMdmModifiedEntity.mockReturnValue({
218
- type: 'configuration/entityTypes/HCP',
219
- uri: 'entities/uri_e',
220
- attributes: {
221
- Nested1: [
326
+ modifiedEntities = __assign(__assign({}, defaultModifiedEntities), (_a = {}, _a[defaultEntity.uri] = __assign(__assign({}, defaultEntity), { attributes: {
327
+ FirstLevelNested: [
222
328
  {
223
- uri: 'entities/uri_e/attributes/nesteduri1',
329
+ uri: 'entities/1E4APrQW/attributes/uri1',
224
330
  value: {
225
- NestedCategory1: [
331
+ FirstLevelNestedSub1: [
226
332
  {
227
333
  ov: true,
228
- uri: 'entities/uri_e/attributes/nesteduri1/attributes/nestedcaturi1',
229
- value: 'nested_category1_value1'
334
+ uri: 'entities/1E4APrQW/attributes/uri1/attributes/nesteduri1',
335
+ value: 'first level nested sub value'
230
336
  }
231
337
  ],
232
- NestedCategory2: [
338
+ Int: [
233
339
  {
234
340
  ov: true,
235
- uri: 'entities/uri_e/attributes/nesteduri1/attributes/nestedcaturi2',
236
- value: 'nested_category2_value1'
341
+ uri: 'entities/1E4APrQW/attributes/uri1/attributes/nesteduri2',
342
+ value: '3456'
237
343
  }
238
344
  ]
239
345
  }
240
346
  }
241
347
  ]
242
- }
243
- });
244
- hiddenAttributes = {
245
- 'entities/uri_e': ['configuration/entityTypes/HCP/attributes/Nested1/attributes/NestedCategory2']
348
+ } }), _a));
349
+ mdmValues = __assign(__assign({}, defaultMdmValues), { modifiedEntities: modifiedEntities });
350
+ hiddenAttributesContextValue = {
351
+ 'entities/1E4APrQW': ['configuration/entityTypes/HCP/attributes/FirstLevelNested/attributes/Int']
246
352
  };
247
- user = setUp({ entity: entity }, hiddenAttributes).user;
353
+ user = setUp({ mdmValues: mdmValues, hiddenAttributesContextValue: hiddenAttributesContextValue, userOptions: { delay: null } }).user;
248
354
  return [4 /*yield*/, user.click(screen.getByTestId('arrow-expand-button'))];
249
355
  case 1:
250
- _a.sent();
251
- expect(screen.getByText('nested_category1_value1')).toBeInTheDocument();
252
- expect(screen.queryByText('nested_category2_value1')).not.toBeInTheDocument();
356
+ _b.sent();
357
+ screen.getByText('FirstLevelNestedSub1_HCP');
358
+ expect(screen.queryByText('Int')).not.toBeInTheDocument();
253
359
  return [2 /*return*/];
254
360
  }
255
361
  });
@@ -78,7 +78,7 @@ var EditModeComplexAttribute = function (_a) {
78
78
  React.createElement(ArrowExpandButton, { onClick: function () { return setExpanded(function (value) { return !value; }); }, expanded: expanded, className: styles.expandButton, disabled: deleted }),
79
79
  React.createElement(ErrorWrapper, { errorMessage: errorMessage, classes: { helperText: styles.errorWrapperHelperText } },
80
80
  React.createElement("div", { className: classnames(styles.label, (_b = {}, _b[styles.deleted] = deleted, _b)), "data-reltio-id": "reltio-attribute-complex-label" }, label))),
81
- React.createElement("div", { className: styles.actions },
81
+ React.createElement("div", { "data-reltio-id": "reltio-complex-attribute-actions", className: styles.actions },
82
82
  edited && (React.createElement(Typography, { variant: "caption", className: styles.editedLabel },
83
83
  "(",
84
84
  i18n.text('edited'),