@reltio/components 1.4.2026 → 1.4.2028

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 (67) hide show
  1. package/RCTree/styles.js +4 -1
  2. package/cjs/RCTree/styles.js +4 -1
  3. package/cjs/features/crosswalks/CrosswalkRow/DndCrosswalkRow.test.js +0 -1
  4. package/cjs/features/graph/SigmaGraphContainer/SigmaGraphContainer.test.js +5 -14
  5. package/cjs/features/graph/SigmaGraphResizer/SigmaGraphResizer.test.js +11 -9
  6. package/cjs/features/graph/ZoomSlider/ZoomSlider.js +2 -2
  7. package/cjs/features/graph/ZoomSlider/ZoomSlider.test.js +85 -37
  8. package/cjs/features/history/DateRangeSelector/DateRangeSelector.specs.js +188 -117
  9. package/cjs/features/history/HistoryFilterButton/HistoryFilterButton.js +1 -1
  10. package/cjs/features/history/HistoryGraph/components/HistoryCircle/HistoryCircle.specs.js +38 -41
  11. package/cjs/features/history/HistoryGraph/components/HistoryLink/HistoryLink.specs.js +17 -16
  12. package/cjs/features/history/HistoryHeader/HistoryHeader.spec.js +21 -31
  13. package/cjs/features/history/HistoryPanelEmptyState/HistoryPanelEmptyState.specs.js +4 -9
  14. package/cjs/features/history/HistoryRow/HistoryRow.js +1 -1
  15. package/cjs/features/history/HistoryRow/HistoryRow.specs.js +74 -34
  16. package/cjs/features/history/HistoryTree/HistoryTree.js +1 -1
  17. package/cjs/features/history/HistoryView/HistoryView.specs.js +77 -43
  18. package/cjs/features/workflow/AddWorkflowButton/AddWorkflowButton.spec.js +83 -34
  19. package/cjs/features/workflow/AttributesChanges/AttributesChanges.js +1 -1
  20. package/cjs/features/workflow/AttributesChanges/components/ChangeView/ChangeView.js +1 -1
  21. package/cjs/features/workflow/AttributesChanges/components/ShowMoreLink/ShowMoreLink.spec.js +81 -24
  22. package/cjs/features/workflow/DueDateField/DueDateField.spec.js +51 -102
  23. package/cjs/features/workflow/PrioritySelector/PrioritySelector.spec.js +62 -133
  24. package/cjs/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +438 -124
  25. package/cjs/features/workflow/hooks/useChangeRequest.specs.js +17 -27
  26. package/cjs/features/workflow/hooks/useWorkflowColor.specs.js +23 -47
  27. package/features/crosswalks/CrosswalkRow/DndCrosswalkRow.test.js +0 -1
  28. package/features/graph/SigmaGraphContainer/SigmaGraphContainer.test.js +5 -14
  29. package/features/graph/SigmaGraphResizer/SigmaGraphResizer.test.js +11 -9
  30. package/features/graph/ZoomSlider/ZoomSlider.js +2 -2
  31. package/features/graph/ZoomSlider/ZoomSlider.test.js +85 -37
  32. package/features/history/DateRangeSelector/DateRangeSelector.specs.js +188 -117
  33. package/features/history/HistoryFilterButton/HistoryFilterButton.js +1 -1
  34. package/features/history/HistoryGraph/components/HistoryCircle/HistoryCircle.specs.js +38 -41
  35. package/features/history/HistoryGraph/components/HistoryLink/HistoryLink.specs.js +17 -16
  36. package/features/history/HistoryHeader/HistoryHeader.spec.js +21 -31
  37. package/features/history/HistoryPanelEmptyState/HistoryPanelEmptyState.specs.js +4 -9
  38. package/features/history/HistoryRow/HistoryRow.js +1 -1
  39. package/features/history/HistoryRow/HistoryRow.specs.js +74 -34
  40. package/features/history/HistoryTree/HistoryTree.js +1 -1
  41. package/features/history/HistoryView/HistoryView.specs.js +77 -43
  42. package/features/workflow/AddWorkflowButton/AddWorkflowButton.spec.js +83 -34
  43. package/features/workflow/AttributesChanges/AttributesChanges.js +1 -1
  44. package/features/workflow/AttributesChanges/components/ChangeView/ChangeView.js +1 -1
  45. package/features/workflow/AttributesChanges/components/ShowMoreLink/ShowMoreLink.spec.js +81 -24
  46. package/features/workflow/DueDateField/DueDateField.spec.js +51 -102
  47. package/features/workflow/PrioritySelector/PrioritySelector.spec.js +62 -133
  48. package/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +439 -125
  49. package/features/workflow/hooks/useChangeRequest.specs.js +17 -24
  50. package/features/workflow/hooks/useWorkflowColor.specs.js +23 -44
  51. package/package.json +1 -1
  52. package/cjs/features/workflow/AttributesChanges/AttributesChanges.spec.d.ts +0 -1
  53. package/cjs/features/workflow/AttributesChanges/AttributesChanges.spec.js +0 -249
  54. package/cjs/features/workflow/AttributesChanges/components/ChangeView/ChangeView.spec.d.ts +0 -1
  55. package/cjs/features/workflow/AttributesChanges/components/ChangeView/ChangeView.spec.js +0 -44
  56. package/cjs/features/workflow/AttributesChanges/components/DCRChangesList/DCRChangesList.spec.d.ts +0 -1
  57. package/cjs/features/workflow/AttributesChanges/components/DCRChangesList/DCRChangesList.spec.js +0 -38
  58. package/cjs/features/workflow/AttributesChanges/components/DiffRenderer/DiffRenderer.spec.d.ts +0 -1
  59. package/cjs/features/workflow/AttributesChanges/components/DiffRenderer/DiffRenderer.spec.js +0 -218
  60. package/features/workflow/AttributesChanges/AttributesChanges.spec.d.ts +0 -1
  61. package/features/workflow/AttributesChanges/AttributesChanges.spec.js +0 -244
  62. package/features/workflow/AttributesChanges/components/ChangeView/ChangeView.spec.d.ts +0 -1
  63. package/features/workflow/AttributesChanges/components/ChangeView/ChangeView.spec.js +0 -39
  64. package/features/workflow/AttributesChanges/components/DCRChangesList/DCRChangesList.spec.d.ts +0 -1
  65. package/features/workflow/AttributesChanges/components/DCRChangesList/DCRChangesList.spec.js +0 -33
  66. package/features/workflow/AttributesChanges/components/DiffRenderer/DiffRenderer.spec.d.ts +0 -1
  67. package/features/workflow/AttributesChanges/components/DiffRenderer/DiffRenderer.spec.js +0 -213
@@ -23,7 +23,7 @@ var HistoryRow = function (_a) {
23
23
  _b)), onClick: onClick },
24
24
  react_1.default.createElement("div", { className: styles.rowHeader },
25
25
  react_1.default.createElement("div", { className: styles.badge }),
26
- react_1.default.createElement(Typography_1.default, { className: (0, classnames_1.default)(styles.title, { bold: isCurrent }) }, isCurrent ? ui_i18n_1.default.text('Current view') : (0, activity_log_1.getActivityLabel)(type)),
26
+ react_1.default.createElement(Typography_1.default, { "data-reltio-id": "history-row-header", className: (0, classnames_1.default)(styles.title, { bold: isCurrent }) }, isCurrent ? ui_i18n_1.default.text('Current view') : (0, activity_log_1.getActivityLabel)(type)),
27
27
  !isCurrent && react_1.default.createElement(Typography_1.default, { className: styles.date }, ui_i18n_1.default.date(timestamp, 'L LT'))),
28
28
  matchGroups && (react_1.default.createElement(Typography_1.default, { className: styles.title },
29
29
  ui_i18n_1.default.text('Match rule:'),
@@ -10,13 +10,50 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ 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);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
13
49
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
51
  };
16
52
  Object.defineProperty(exports, "__esModule", { value: true });
17
53
  var react_1 = __importDefault(require("react"));
18
54
  var ui_i18n_1 = __importDefault(require("ui-i18n"));
19
- var enzyme_1 = require("enzyme");
55
+ var react_2 = require("@testing-library/react");
56
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
20
57
  var types_1 = require("../types");
21
58
  var activity_log_1 = require("../../activity-log");
22
59
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
@@ -30,7 +67,7 @@ describe('HistoryRow tests', function () {
30
67
  timestamp: 1622451175422
31
68
  };
32
69
  var onClick = jest.fn();
33
- var props = {
70
+ var defaultProps = {
34
71
  change: change,
35
72
  isCurrent: false,
36
73
  isSelected: false,
@@ -39,44 +76,47 @@ describe('HistoryRow tests', function () {
39
76
  beforeAll(function () {
40
77
  jest.clearAllMocks();
41
78
  });
79
+ var setUp = function (props) {
80
+ if (props === void 0) { props = defaultProps; }
81
+ var user = user_event_1.default.setup();
82
+ return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props)))), { user: user });
83
+ };
42
84
  it('should render correctly', function () {
43
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props)));
44
- expect(mdm_sdk_1.getContributorColor).toHaveBeenCalledWith(props.change.uri);
45
- expect(wrapper.find('.historyRow').length).toBe(1);
46
- var header = wrapper.find('.rowHeader');
47
- expect(header.length).toBe(1);
48
- expect(header.find('.badge').length).toBe(1);
49
- var headerTitle = header.find('.title');
50
- expect(headerTitle.text()).toBe((0, activity_log_1.getActivityLabel)(props.change.type));
51
- expect(headerTitle.hasClass('bold')).toBe(false);
52
- expect(header.find('.date').text()).toBe(ui_i18n_1.default.date(props.change.timestamp, 'L LT'));
53
- expect(wrapper.find('.historyRow > .title').length).toBe(0);
54
- expect(wrapper.find('.user').text()).toBe(props.change.user);
55
- expect(wrapper.hasClass('selected')).toBeFalsy();
85
+ setUp();
86
+ expect(mdm_sdk_1.getContributorColor).toHaveBeenCalledWith(defaultProps.change.uri);
87
+ expect(react_2.screen.getByText((0, activity_log_1.getActivityLabel)(defaultProps.change.type))).toBeInTheDocument();
88
+ expect(react_2.screen.getByText(ui_i18n_1.default.date(defaultProps.change.timestamp, 'L LT'))).toBeInTheDocument();
89
+ expect(react_2.screen.getByText(defaultProps.change.user)).toBeInTheDocument();
90
+ expect(react_2.screen.queryByText('Current view')).not.toBeInTheDocument();
91
+ expect(react_2.screen.getByTestId('history-row')).not.toHaveClass('selected');
92
+ expect(react_2.screen.getByTestId('history-row-header')).not.toHaveClass('bold');
56
93
  });
57
94
  it('should render correct current row if isCurrent === true', function () {
58
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props, { isCurrent: true })));
59
- var header = wrapper.find('.rowHeader');
60
- expect(header.length).toBe(1);
61
- expect(header.find('.badge').length).toBe(1);
62
- var headerTitle = header.find('.title');
63
- expect(headerTitle.text()).toBe('Current view');
64
- expect(headerTitle.hasClass('bold')).toBe(true);
65
- expect(header.find('.date').length).toBe(0);
95
+ setUp(__assign(__assign({}, defaultProps), { isCurrent: true }));
96
+ expect(react_2.screen.getByText('Current view')).toBeInTheDocument();
97
+ expect(react_2.screen.getByTestId('history-row-header')).toHaveClass('bold');
98
+ expect(react_2.screen.queryByText(ui_i18n_1.default.date(defaultProps.change.timestamp, 'L LT'))).not.toBeInTheDocument();
66
99
  });
67
100
  it('should show match rules if change.matchGroups is not empty', function () {
68
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props, { change: __assign(__assign({}, change), { matchGroups: ['first', 'second'] }) })));
69
- var matchRules = wrapper.find('.historyRow > .title');
70
- expect(matchRules.length).toBe(1);
71
- expect(matchRules.text()).toBe('Match rule: first, second');
101
+ setUp(__assign(__assign({}, defaultProps), { change: __assign(__assign({}, change), { matchGroups: ['first', 'second'] }) }));
102
+ expect(react_2.screen.getByText('Match rule: first, second')).toBeInTheDocument();
72
103
  });
73
104
  it('should render correctly if isSelected === true', function () {
74
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props, { isSelected: true })));
75
- expect(wrapper.hasClass('selected')).toBeTruthy();
76
- });
77
- it('should call props.onClick when click on the row', function () {
78
- var wrapper = (0, enzyme_1.shallow)(react_1.default.createElement(HistoryRow_1.HistoryRow, __assign({}, props)));
79
- wrapper.simulate('click');
80
- expect(onClick).toHaveBeenCalled();
105
+ setUp(__assign(__assign({}, defaultProps), { isSelected: true }));
106
+ expect(react_2.screen.getByTestId('history-row')).toHaveClass('selected');
81
107
  });
108
+ it('should call props.onClick when click on the row', function () { return __awaiter(void 0, void 0, void 0, function () {
109
+ var user;
110
+ return __generator(this, function (_a) {
111
+ switch (_a.label) {
112
+ case 0:
113
+ user = setUp().user;
114
+ return [4 /*yield*/, user.click(react_2.screen.getByTestId('history-row'))];
115
+ case 1:
116
+ _a.sent();
117
+ expect(onClick).toHaveBeenCalled();
118
+ return [2 /*return*/];
119
+ }
120
+ });
121
+ }); });
82
122
  });
@@ -126,7 +126,7 @@ var HistoryTree = function (_a) {
126
126
  setSelectedIndex(index);
127
127
  }
128
128
  };
129
- return (react_1.default.createElement("div", { className: styles.historyTree },
129
+ return (react_1.default.createElement("div", { className: styles.historyTree, "data-reltio-id": "history-tree" },
130
130
  isLoading && react_1.default.createElement(LinearLoadIndicator_1.LinearLoadIndicator, null),
131
131
  react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.graph, (_b = {}, _b[styles.shadow] = isScrollable, _b)), onScroll: handleGraphScroll, ref: graphRef },
132
132
  react_1.default.createElement(HistoryGraph_1.HistoryGraph, { onHistoryCircleMouseOver: handleHistoryCircleMouseOver, graphData: graphData }),
@@ -33,23 +33,51 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
33
  __setModuleDefault(result, mod);
34
34
  return result;
35
35
  };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ 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);
47
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ 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;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
36
72
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
73
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
74
  };
39
75
  Object.defineProperty(exports, "__esModule", { value: true });
40
76
  var react_1 = __importDefault(require("react"));
41
- var enzyme_1 = require("enzyme");
42
- var test_utils_1 = require("react-dom/test-utils");
77
+ var react_2 = require("@testing-library/react");
78
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
43
79
  var useHistoryTreeHook = __importStar(require("../hooks/useHistoryTree"));
44
- var ContributorsPanel_1 = require("../ContributorsPanel");
45
- var HistoryTree_1 = require("../HistoryTree");
46
80
  var HistoryView_1 = __importDefault(require("./HistoryView"));
47
- jest.mock('../HistoryTree', function () { return ({
48
- HistoryTree: function () { return null; }
49
- }); });
50
- jest.mock('../ContributorsPanel', function () { return ({
51
- ContributorsPanel: function () { return null; }
52
- }); });
53
81
  describe('HistoryView tests', function () {
54
82
  var historyWithTotal = {
55
83
  total: 2,
@@ -66,7 +94,7 @@ describe('HistoryView tests', function () {
66
94
  }
67
95
  ]
68
96
  };
69
- var props = {
97
+ var defaultProps = {
70
98
  isLoading: false,
71
99
  canLoadMore: false,
72
100
  onLoadMore: jest.fn(),
@@ -88,38 +116,44 @@ describe('HistoryView tests', function () {
88
116
  var useHistoryTreeMock = jest
89
117
  .spyOn(useHistoryTreeHook, 'useHistoryTree')
90
118
  .mockReturnValue({ historyData: historyData, findPreviousChange: findPreviousChange });
91
- it('should render correct default state', function () {
92
- var wrapper = (0, enzyme_1.mount)(react_1.default.createElement(HistoryView_1.default, __assign({}, props)));
93
- expect(useHistoryTreeMock).toHaveBeenCalledWith({
94
- entityUri: props.entityUri,
95
- historyChanges: props.historyWithTotal.changes,
96
- selectedUris: props.contributorsUris
97
- });
98
- expect(wrapper.find(ContributorsPanel_1.ContributorsPanel).length).toBe(1);
99
- expect(wrapper.find(ContributorsPanel_1.ContributorsPanel).props()).toMatchObject({
100
- values: props.contributorsUris,
101
- selectedValues: props.contributorsUris,
102
- entityUri: props.entityUri
103
- });
104
- expect(wrapper.find(HistoryTree_1.HistoryTree).length).toBe(1);
105
- expect(wrapper.find(HistoryTree_1.HistoryTree).props()).toMatchObject({
106
- historyData: historyData,
107
- isLoading: props.isLoading,
108
- onLoadMore: props.onLoadMore,
109
- canLoadMore: props.canLoadMore,
110
- entityUri: props.entityUri,
111
- historyEvent: props.historyEvent,
112
- findPreviousChange: findPreviousChange
119
+ var setUp = function (props) {
120
+ if (props === void 0) { props = defaultProps; }
121
+ var user = user_event_1.default.setup();
122
+ return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(HistoryView_1.default, __assign({}, props)))), { user: user });
123
+ };
124
+ it('should render correct default state', function () { return __awaiter(void 0, void 0, void 0, function () {
125
+ var contributorItems;
126
+ return __generator(this, function (_a) {
127
+ setUp();
128
+ expect(useHistoryTreeMock).toHaveBeenCalledWith({
129
+ entityUri: defaultProps.entityUri,
130
+ historyChanges: defaultProps.historyWithTotal.changes,
131
+ selectedUris: defaultProps.contributorsUris
132
+ });
133
+ contributorItems = react_2.screen.getAllByTestId('reltio-contributor-item');
134
+ expect(contributorItems).toHaveLength(4);
135
+ expect(contributorItems[0]).toHaveAttribute('data-reltio-contributor', 'entities/uri0000');
136
+ expect(contributorItems[1]).toHaveAttribute('data-reltio-contributor', 'entities/uri1111');
137
+ expect(contributorItems[2]).toHaveAttribute('data-reltio-contributor', 'entities/uri2222');
138
+ expect(contributorItems[3]).toHaveAttribute('data-reltio-contributor', 'entities/uri3333');
139
+ expect(react_2.screen.getByTestId('history-tree')).toBeInTheDocument();
140
+ expect(react_2.screen.getByTestId('reltio-history-graph')).toBeInTheDocument();
141
+ return [2 /*return*/];
113
142
  });
114
- });
115
- it('should render ContributorsPanel with new selectedValues when call ContributorsPanel onSelectValues prop', function () {
116
- var wrapper = (0, enzyme_1.mount)(react_1.default.createElement(HistoryView_1.default, __assign({}, props)));
117
- expect(wrapper.find(ContributorsPanel_1.ContributorsPanel).prop('selectedValues').sort()).toEqual(props.contributorsUris.sort());
118
- var newSelectedValues = ['entities/uri2222', 'entities/uri3333'];
119
- (0, test_utils_1.act)(function () {
120
- wrapper.find(ContributorsPanel_1.ContributorsPanel).prop('onSelectValues')(newSelectedValues);
143
+ }); });
144
+ it('should render ContributorsPanel with new selectedValues when call ContributorsPanel onSelectValues prop', function () { return __awaiter(void 0, void 0, void 0, function () {
145
+ var user, contributorItems;
146
+ return __generator(this, function (_a) {
147
+ switch (_a.label) {
148
+ case 0:
149
+ user = setUp().user;
150
+ contributorItems = react_2.screen.getAllByTestId('reltio-contributor-item');
151
+ return [4 /*yield*/, user.click(contributorItems[2])];
152
+ case 1:
153
+ _a.sent();
154
+ expect(contributorItems[2]).toHaveClass('inactive');
155
+ return [2 /*return*/];
156
+ }
121
157
  });
122
- wrapper.update();
123
- expect(wrapper.find(ContributorsPanel_1.ContributorsPanel).prop('selectedValues').sort()).toEqual(newSelectedValues.sort());
124
- });
158
+ }); });
125
159
  });
@@ -10,18 +10,57 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ 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);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
13
49
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
51
  };
16
52
  Object.defineProperty(exports, "__esModule", { value: true });
17
53
  var react_1 = __importDefault(require("react"));
18
- var enzyme_1 = require("enzyme");
19
- var test_utils_1 = require("react-dom/test-utils");
20
- var Button_1 = __importDefault(require("@mui/material/Button"));
54
+ var react_2 = require("@testing-library/react");
55
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
21
56
  var AddWorkflowButton_1 = require("./AddWorkflowButton");
22
- var AddWorkflowDialog_1 = require("../AddWorkflowDialog");
23
57
  var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
24
- jest.mock('../AddWorkflowDialog', function () { return ({ AddWorkflowDialog: function () { return null; } }); });
58
+ jest.mock('../hooks/useWorkflowDefinitions', function () { return ({
59
+ useWorkflowDefinitions: jest.fn().mockReturnValue({ definitions: [] })
60
+ }); });
61
+ jest.mock('../hooks/useWorkflowProcessInstance', function () { return ({
62
+ useWorkflowProcessInstance: jest.fn().mockReturnValue({})
63
+ }); });
25
64
  var defaultPermissions = {
26
65
  'workflow:config.definition': {
27
66
  READ: ['alenat']
@@ -43,8 +82,12 @@ var defaultMdmValues = {
43
82
  };
44
83
  var setUp = function (mdmValues) {
45
84
  if (mdmValues === void 0) { mdmValues = defaultMdmValues; }
46
- return (0, enzyme_1.mount)(react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues },
47
- react_1.default.createElement(AddWorkflowButton_1.AddWorkflowButton, null)));
85
+ var user = user_event_1.default.setup();
86
+ var Providers = function (_a) {
87
+ var children = _a.children;
88
+ return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues }, children));
89
+ };
90
+ return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(AddWorkflowButton_1.AddWorkflowButton, null), { wrapper: Providers })), { user: user });
48
91
  };
49
92
  describe('AddWorkflowButton tests', function () {
50
93
  it('should not render button if "workflow:data.process" permission is missing', function () {
@@ -54,8 +97,8 @@ describe('AddWorkflowButton tests', function () {
54
97
  }
55
98
  } }) });
56
99
  var mdmValues = __assign(__assign({}, defaultMdmValues), { user: user });
57
- var component = setUp(mdmValues);
58
- expect(component.isEmptyRender()).toBeTruthy();
100
+ setUp(mdmValues);
101
+ expect(react_2.screen.queryByText('Add')).not.toBeInTheDocument();
59
102
  });
60
103
  it('should not render button if "workflow:config.definition" permission is missing', function () {
61
104
  var user = __assign(__assign({}, defaultUser), { userPermissions: __assign(__assign({}, defaultUser.userPermissions), { permissions: {
@@ -64,36 +107,42 @@ describe('AddWorkflowButton tests', function () {
64
107
  }
65
108
  } }) });
66
109
  var mdmValues = __assign(__assign({}, defaultMdmValues), { user: user });
67
- var component = setUp(mdmValues);
68
- expect(component.isEmptyRender()).toBeTruthy();
110
+ setUp(mdmValues);
111
+ expect(react_2.screen.queryByText('Add')).not.toBeInTheDocument();
69
112
  });
70
113
  it('should render main parts correctly if all permissions exists', function () {
71
- var component = setUp();
72
- expect(component.find(Button_1.default)).toHaveLength(1);
73
- expect(component.find(AddWorkflowDialog_1.AddWorkflowDialog)).toHaveLength(1);
114
+ setUp();
115
+ expect(react_2.screen.getByText('Add')).toBeInTheDocument();
74
116
  });
75
- it('handleOpen handler should work correctly', function () {
76
- var component = setUp();
77
- expect(component.find(AddWorkflowDialog_1.AddWorkflowDialog).prop('anchorEl')).toBe(null);
78
- (0, test_utils_1.act)(function () {
79
- var onClick = component.find('.button').at(0).prop('onClick');
80
- if (onClick) {
81
- onClick({ currentTarget: 'currentTarget' });
117
+ it('handleOpen handler should work correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
118
+ var user;
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ user = setUp().user;
123
+ return [4 /*yield*/, user.click(react_2.screen.getByText('Add'))];
124
+ case 1:
125
+ _a.sent();
126
+ expect(react_2.screen.getByText('Add new workflow')).toBeInTheDocument();
127
+ return [2 /*return*/];
82
128
  }
83
129
  });
84
- component.update();
85
- expect(component.find(AddWorkflowDialog_1.AddWorkflowDialog).prop('anchorEl')).toBe('currentTarget');
86
- });
87
- it('handleClose handler should work correctly', function () {
88
- var component = setUp();
89
- (0, test_utils_1.act)(function () {
90
- var onClick = component.find('.button').at(0).prop('onClick');
91
- if (onClick) {
92
- onClick({ currentTarget: 'currentTarget' });
130
+ }); });
131
+ it('handleClose handler should work correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
132
+ var user;
133
+ return __generator(this, function (_a) {
134
+ switch (_a.label) {
135
+ case 0:
136
+ user = setUp().user;
137
+ return [4 /*yield*/, user.click(react_2.screen.getByText('Add'))];
138
+ case 1:
139
+ _a.sent();
140
+ return [4 /*yield*/, user.click(react_2.screen.getByText('Cancel'))];
141
+ case 2:
142
+ _a.sent();
143
+ expect(react_2.screen.queryByText('Add new workflow')).not.toBeInTheDocument();
144
+ return [2 /*return*/];
93
145
  }
94
- component.find(AddWorkflowDialog_1.AddWorkflowDialog).prop('onClose')();
95
146
  });
96
- component.update();
97
- expect(component.find(AddWorkflowDialog_1.AddWorkflowDialog).prop('anchorEl')).toBe(null);
98
- });
147
+ }); });
99
148
  });
@@ -55,7 +55,7 @@ var AttributesChanges = function (_a) {
55
55
  var entityUri = (0, ramda_1.ifElse)((0, ramda_1.any)(dcr_1.isCreateEntityOperation), (0, ramda_1.always)((0, dcr_1.getEntityUriForChangeRequest)(dcrUri, entityInfo.uri)), (0, ramda_1.always)((0, mdm_sdk_1.getEntityUriForLink)(entityInfo)))((0, ramda_1.propOr)([], entityInfo.uri, changes));
56
56
  var screen = (0, ramda_1.ifElse)((0, ramda_1.any)(dcr_1.isCreateEntityOperation), (0, ramda_1.always)('dcrReview'), (0, ramda_1.always)('profile'))((0, ramda_1.propOr)([], entityInfo.uri, changes));
57
57
  return (react_1.default.createElement(AttributesChangesContext_1.AttributesChangesContext.Provider, { value: objectsInfo },
58
- react_1.default.createElement("div", { className: styles.container },
58
+ react_1.default.createElement("div", { className: styles.container, "data-reltio-id": "changes-container" },
59
59
  react_1.default.createElement(EntityUriLink_1.EntityUriLink, { className: styles.uri, value: entityUri, screen: screen },
60
60
  react_1.default.createElement("div", { className: styles.label }, (0, mdm_sdk_1.getLabel)(entityInfo.label))),
61
61
  react_1.default.createElement(DCRChangesList_1.DCRChangesList, { changes: itemsToShow }),
@@ -22,7 +22,7 @@ var ChangeView = function (_a) {
22
22
  !(0, ramda_1.isNil)(value) && (react_1.default.createElement("span", { className: styles.difference },
23
23
  value,
24
24
  newValue && oldValue && (react_1.default.createElement(react_1.default.Fragment, null,
25
- react_1.default.createElement(ArrowRightAlt_1.default, { className: styles.arrow }),
25
+ react_1.default.createElement(ArrowRightAlt_1.default, { "data-reltio-id": "arrow-right", className: styles.arrow }),
26
26
  newValue)))),
27
27
  operation && (react_1.default.createElement(Chip_1.default, { variant: "outlined", label: (0, common_1.getOperationLabel)(operation), className: (0, classnames_1.default)(styles.chip, operation) }))));
28
28
  };
@@ -1,38 +1,95 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ 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);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
2
49
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
51
  };
5
52
  Object.defineProperty(exports, "__esModule", { value: true });
6
53
  var react_1 = __importDefault(require("react"));
7
- var enzyme_1 = require("enzyme");
8
- var test_utils_1 = require("react-dom/test-utils");
9
- var Link_1 = __importDefault(require("@mui/material/Link"));
54
+ var react_2 = require("@testing-library/react");
55
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
10
56
  var ShowMoreLink_1 = require("./ShowMoreLink");
11
57
  describe('ShowMoreLink tests', function () {
58
+ afterEach(function () {
59
+ jest.clearAllMocks();
60
+ });
61
+ var onClick = jest.fn();
62
+ var defaultProps = {
63
+ onClick: onClick,
64
+ suggestionsCount: 10,
65
+ isExpanded: false
66
+ };
67
+ var setUp = function (props) {
68
+ if (props === void 0) { props = defaultProps; }
69
+ var user = user_event_1.default.setup();
70
+ return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(ShowMoreLink_1.ShowMoreLink, __assign({}, props)))), { user: user });
71
+ };
12
72
  it('should render main parts in collapsed mode', function () {
13
- var onClick = jest.fn();
14
- var count = 10;
15
- var isExpanded = false;
16
- var component = (0, enzyme_1.shallow)(react_1.default.createElement(ShowMoreLink_1.ShowMoreLink, { onClick: onClick, suggestionsCount: count, isExpanded: isExpanded }));
17
- expect(component.find(Link_1.default)).toHaveLength(1);
18
- expect(component.find('.linkLabel').text()).toBe("View ".concat(count, " more suggestions"));
73
+ setUp();
74
+ expect(react_2.screen.getByText("View ".concat(defaultProps.suggestionsCount, " more suggestions"))).toBeInTheDocument();
19
75
  });
20
76
  it('should render main parts in expanded mode', function () {
21
- var onClick = jest.fn();
22
- var count = 10;
23
- var isExpanded = true;
24
- var component = (0, enzyme_1.shallow)(react_1.default.createElement(ShowMoreLink_1.ShowMoreLink, { onClick: onClick, suggestionsCount: count, isExpanded: isExpanded }));
25
- expect(component.find(Link_1.default)).toHaveLength(1);
26
- expect(component.find('.linkLabel').text()).toBe('View less suggestions');
77
+ setUp(__assign(__assign({}, defaultProps), { isExpanded: true }));
78
+ expect(react_2.screen.queryByText("View ".concat(defaultProps.suggestionsCount, " more suggestions"))).not.toBeInTheDocument();
79
+ expect(react_2.screen.getByText('View less suggestions')).toBeInTheDocument();
27
80
  });
28
- it('should call onClick after click', function () {
29
- var onClick = jest.fn();
30
- var count = 10;
31
- var isExpanded = true;
32
- var component = (0, enzyme_1.shallow)(react_1.default.createElement(ShowMoreLink_1.ShowMoreLink, { onClick: onClick, suggestionsCount: count, isExpanded: isExpanded }));
33
- (0, test_utils_1.act)(function () {
34
- component.find(Link_1.default).simulate('click');
81
+ it('should call onClick after click', function () { return __awaiter(void 0, void 0, void 0, function () {
82
+ var user;
83
+ return __generator(this, function (_a) {
84
+ switch (_a.label) {
85
+ case 0:
86
+ user = setUp(__assign(__assign({}, defaultProps), { isExpanded: true })).user;
87
+ return [4 /*yield*/, user.click(react_2.screen.getByRole('button'))];
88
+ case 1:
89
+ _a.sent();
90
+ expect(onClick).toHaveBeenCalled();
91
+ return [2 /*return*/];
92
+ }
35
93
  });
36
- expect(onClick).toHaveBeenCalled();
37
- });
94
+ }); });
38
95
  });