@dhis2/analytics 28.0.4 → 28.0.5

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 (81) hide show
  1. package/build/cjs/__demo__/OpenFileDialog.stories.js +19 -1
  2. package/build/cjs/components/DimensionsPanel/List/DimensionList.js +3 -1
  3. package/build/cjs/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +48 -41
  4. package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
  5. package/build/cjs/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +36 -33
  6. package/build/cjs/components/FileMenu/__tests__/DeleteDialog.spec.js +24 -27
  7. package/build/cjs/components/FileMenu/__tests__/FileMenu.spec.js +51 -31
  8. package/build/cjs/components/FileMenu/__tests__/GetLinkDialog.spec.js +28 -31
  9. package/build/cjs/components/FileMenu/__tests__/RenameDialog.spec.js +17 -11
  10. package/build/cjs/components/FileMenu/__tests__/SaveAsDialog.spec.js +44 -37
  11. package/build/cjs/components/Filter/__tests__/Filter.spec.js +29 -34
  12. package/build/cjs/components/OpenFileDialog/CreatedByFilter.js +9 -1
  13. package/build/cjs/components/OpenFileDialog/OpenFileDialog.js +14 -34
  14. package/build/cjs/components/OpenFileDialog/VisTypeFilter.js +39 -1
  15. package/build/cjs/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +51 -0
  16. package/build/cjs/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +78 -44
  17. package/build/cjs/components/PeriodDimension/FixedPeriodFilter.js +1 -0
  18. package/build/cjs/components/PeriodDimension/RelativePeriodFilter.js +3 -2
  19. package/build/cjs/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +14 -21
  20. package/build/cjs/components/PeriodDimension/__tests__/PeriodDimension.spec.js +27 -23
  21. package/build/cjs/components/RichText/Editor/__tests__/Editor.spec.js +6 -7
  22. package/build/cjs/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
  23. package/build/cjs/components/RichText/Parser/__tests__/Parser.spec.js +22 -23
  24. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +52 -42
  25. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +8 -8
  26. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +23 -18
  27. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +23 -17
  28. package/build/cjs/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
  29. package/build/cjs/components/Toolbar/InterpretationsAndDetailsToggler.js +3 -1
  30. package/build/cjs/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +19 -18
  31. package/build/cjs/components/Toolbar/__tests__/Toolbar.spec.js +8 -8
  32. package/build/cjs/components/Toolbar/__tests__/ToolbarSidebar.spec.js +14 -11
  33. package/build/cjs/components/Toolbar/__tests__/UpdateButton.spec.js +16 -14
  34. package/build/cjs/components/TranslationDialog/TranslationModal/TranslationModal.js +2 -1
  35. package/build/cjs/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +25 -16
  36. package/build/es/__demo__/OpenFileDialog.stories.js +17 -0
  37. package/build/es/components/DimensionsPanel/List/DimensionList.js +3 -1
  38. package/build/es/components/DimensionsPanel/List/__tests__/DimensionItem.spec.js +47 -40
  39. package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +110 -114
  40. package/build/es/components/DimensionsPanel/__tests__/DimensionsPanel.spec.js +35 -32
  41. package/build/es/components/FileMenu/__tests__/DeleteDialog.spec.js +23 -26
  42. package/build/es/components/FileMenu/__tests__/FileMenu.spec.js +52 -32
  43. package/build/es/components/FileMenu/__tests__/GetLinkDialog.spec.js +27 -30
  44. package/build/es/components/FileMenu/__tests__/RenameDialog.spec.js +18 -12
  45. package/build/es/components/FileMenu/__tests__/SaveAsDialog.spec.js +43 -36
  46. package/build/es/components/Filter/__tests__/Filter.spec.js +28 -33
  47. package/build/es/components/OpenFileDialog/CreatedByFilter.js +7 -0
  48. package/build/es/components/OpenFileDialog/OpenFileDialog.js +14 -35
  49. package/build/es/components/OpenFileDialog/VisTypeFilter.js +38 -1
  50. package/build/es/components/OpenFileDialog/__tests__/OpenFileDialog.spec.js +49 -0
  51. package/build/es/components/OrgUnitDimension/__tests__/OrgUnitDimension.spec.js +77 -43
  52. package/build/es/components/PeriodDimension/FixedPeriodFilter.js +1 -0
  53. package/build/es/components/PeriodDimension/RelativePeriodFilter.js +3 -2
  54. package/build/es/components/PeriodDimension/__tests__/FixedPeriodSingleSelect.spec.js +13 -20
  55. package/build/es/components/PeriodDimension/__tests__/PeriodDimension.spec.js +26 -22
  56. package/build/es/components/RichText/Editor/__tests__/Editor.spec.js +7 -8
  57. package/build/es/components/RichText/Parser/__tests__/MdParser.spec.js +1 -1
  58. package/build/es/components/RichText/Parser/__tests__/Parser.spec.js +21 -22
  59. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuBar.spec.js +53 -43
  60. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuDropdown.spec.js +7 -7
  61. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuList.spec.js +23 -18
  62. package/build/es/components/Toolbar/HoverMenuBar/__tests__/HoverMenuListItem.spec.js +21 -15
  63. package/build/es/components/Toolbar/HoverMenuBar/__tests__/__snapshots__/HoverMenuList.spec.js.snap +63 -0
  64. package/build/es/components/Toolbar/InterpretationsAndDetailsToggler.js +3 -1
  65. package/build/es/components/Toolbar/__tests__/InterpretationsAndDetailsToggler.spec.js +18 -17
  66. package/build/es/components/Toolbar/__tests__/Toolbar.spec.js +7 -7
  67. package/build/es/components/Toolbar/__tests__/ToolbarSidebar.spec.js +13 -10
  68. package/build/es/components/Toolbar/__tests__/UpdateButton.spec.js +15 -13
  69. package/build/es/components/TranslationDialog/TranslationModal/TranslationModal.js +2 -1
  70. package/build/es/components/TranslationDialog/TranslationModal/__tests__/TranslationModal.spec.js +24 -15
  71. package/package.json +2 -4
  72. package/build/cjs/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
  73. package/build/cjs/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -29
  74. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -92
  75. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -16
  76. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
  77. package/build/es/components/OrgUnitDimension/__tests__/__snapshots__/OrgUnitDimension.spec.js.snap +0 -89
  78. package/build/es/components/PeriodDimension/__tests__/PeriodSelector.spec.js +0 -26
  79. package/build/es/components/PeriodDimension/__tests__/__snapshots__/FixedPeriodSingleSelect.spec.js.snap +0 -92
  80. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +0 -16
  81. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +0 -89
@@ -2,6 +2,7 @@
2
2
 
3
3
  var _appRuntime = require("@dhis2/app-runtime");
4
4
  var _react = require("@testing-library/react");
5
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
6
  require("@testing-library/jest-dom");
6
7
  var _react2 = _interopRequireDefault(require("react"));
7
8
  var _index = require("../../Toolbar/index.js");
@@ -16,7 +17,7 @@ jest.mock('../../TranslationDialog/TranslationModal/useTranslationsResults.js',
16
17
  fetching: true
17
18
  })
18
19
  }));
19
- describe('The FileMenu component ', () => {
20
+ describe('FileMenu component ', () => {
20
21
  const onDelete = jest.fn();
21
22
  const onError = jest.fn();
22
23
  const onNew = jest.fn();
@@ -74,8 +75,16 @@ describe('The FileMenu component ', () => {
74
75
  },
75
76
  visualizations: {
76
77
  pager: {
77
- page: 1
78
- }
78
+ page: 1,
79
+ pageSize: 50
80
+ },
81
+ visualizations: [{
82
+ id: 'vis1',
83
+ displayName: 'Visualization 1',
84
+ type: 'VISUALIZATION',
85
+ created: '2025-07-23T15:04:16.864',
86
+ lastUpdated: '2025-07-23T15:04:16.864'
87
+ }]
79
88
  }
80
89
  };
81
90
  return (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_appRuntime.CustomDataProvider, {
@@ -83,7 +92,8 @@ describe('The FileMenu component ', () => {
83
92
  }, /*#__PURE__*/_react2.default.createElement(_index.HoverMenuBar, null, /*#__PURE__*/_react2.default.createElement(_FileMenu.FileMenu, props))));
84
93
  };
85
94
  const openDropdown = async () => {
86
- _react.fireEvent.click(_react.screen.getByTestId('dhis2-analytics-hovermenudropdown'));
95
+ const user = _userEvent.default.setup();
96
+ await user.click(_react.screen.getByTestId('dhis2-analytics-hovermenudropdown'));
87
97
  expect(await _react.screen.findByTestId('file-menu-container')).toBeVisible();
88
98
  };
89
99
  const MENU_ITEMS = {
@@ -135,20 +145,20 @@ describe('The FileMenu component ', () => {
135
145
  }
136
146
  }
137
147
  };
138
- it('renders a button', () => {
148
+ test('renders a button', () => {
139
149
  renderFileMenu();
140
150
  expect(_react.screen.getAllByTestId('dhis2-analytics-hovermenudropdown')).toHaveLength(1);
141
151
  const button = _react.screen.getByTestId('dhis2-analytics-hovermenudropdown');
142
152
  expect(button).toBeVisible();
143
153
  expect(button).toHaveTextContent('File');
144
154
  });
145
- it('opens when clicking the button', async () => {
155
+ test('opens when clicking the button', async () => {
146
156
  renderFileMenu();
147
157
  expect(_react.screen.queryByTestId('file-menu-container')).not.toBeInTheDocument();
148
158
  await openDropdown();
149
159
  expect(await _react.screen.findByTestId('file-menu-container')).toBeVisible();
150
160
  });
151
- it('renders some enabled buttons regardless of the access settings', async () => {
161
+ test('renders some enabled buttons regardless of the access settings', async () => {
152
162
  renderFileMenu();
153
163
  await openDropdown();
154
164
  assertMenuItemsDisabledState([{
@@ -159,7 +169,7 @@ describe('The FileMenu component ', () => {
159
169
  disabled: false
160
170
  }]);
161
171
  });
162
- it('renders some disabled buttons when no fileObject is present', async () => {
172
+ test('renders some disabled buttons when no fileObject is present', async () => {
163
173
  renderFileMenu();
164
174
  await openDropdown();
165
175
  assertMenuItemsDisabledState([{
@@ -182,7 +192,7 @@ describe('The FileMenu component ', () => {
182
192
  disabled: true
183
193
  }]);
184
194
  });
185
- it('renders some enabled buttons when update access is granted', async () => {
195
+ test('renders some enabled buttons when update access is granted', async () => {
186
196
  const customProps = {
187
197
  fileObject: {
188
198
  id: 'test',
@@ -206,7 +216,7 @@ describe('The FileMenu component ', () => {
206
216
  disabled: false
207
217
  }]);
208
218
  });
209
- it('renders enabled Delete button when delete access is granted', async () => {
219
+ test('renders enabled Delete button when delete access is granted', async () => {
210
220
  const customProps = {
211
221
  fileObject: {
212
222
  id: 'test',
@@ -224,7 +234,7 @@ describe('The FileMenu component ', () => {
224
234
  disabled: false
225
235
  }]);
226
236
  });
227
- it('renders enabled Share button when manage access is granted', async () => {
237
+ test('renders enabled Share button when manage access is granted', async () => {
228
238
  const customProps = {
229
239
  fileObject: {
230
240
  id: 'test',
@@ -242,50 +252,56 @@ describe('The FileMenu component ', () => {
242
252
  disabled: false
243
253
  }]);
244
254
  });
245
- it('renders the OpenFileDialog component when the Open button is clicked', async () => {
255
+ test('renders the OpenFileDialog component when the Open button is clicked', async () => {
256
+ const user = _userEvent.default.setup();
246
257
  renderFileMenu();
247
258
  await openDropdown();
248
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.OPEN.testId));
259
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.OPEN.testId));
249
260
  expect(await _react.screen.findByText('Open a visualization', {
250
261
  selector: 'h1'
251
262
  })).toBeVisible();
252
263
  });
253
- it('renders the RenameDialog when the Rename button is clicked', async () => {
264
+ test('renders the RenameDialog when the Rename button is clicked', async () => {
265
+ const user = _userEvent.default.setup();
254
266
  renderFileMenu(fullAccessProps);
255
267
  await openDropdown();
256
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.RENAME.testId));
268
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.RENAME.testId));
257
269
  expect(await _react.screen.findByText('Rename visualization', {
258
270
  selector: 'h1'
259
271
  })).toBeVisible();
260
272
  });
261
- it('renders the TranslationDialog when the Translate button is clicked', async () => {
273
+ test('renders the TranslationDialog when the Translate button is clicked', async () => {
274
+ const user = _userEvent.default.setup();
262
275
  renderFileMenu(fullAccessProps);
263
276
  await openDropdown();
264
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.TRANSLATE.testId));
277
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.TRANSLATE.testId));
265
278
  expect(await _react.screen.findByText('Translate', {
266
279
  exact: false,
267
280
  selector: 'h1'
268
281
  })).toBeVisible();
269
282
  });
270
- it('renders the SharingDialog when the Share button is clicked', async () => {
283
+ test('renders the SharingDialog when the Share button is clicked', async () => {
284
+ const user = _userEvent.default.setup();
271
285
  renderFileMenu(fullAccessProps);
272
286
  await openDropdown();
273
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.SHARE.testId));
287
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.SHARE.testId));
274
288
  expect(await _react.screen.findByText('Sharing and access', {
275
289
  selector: 'h1'
276
290
  })).toBeVisible();
277
291
  });
278
- it('renders the GetLinkDialog when the Get link button is clicked', async () => {
292
+ test('renders the GetLinkDialog when the Get link button is clicked', async () => {
293
+ const user = _userEvent.default.setup();
279
294
  const url = 'http://localhost/dhis-web-data-visualizer/#/test';
280
295
  renderFileMenu(fullAccessProps);
281
296
  await openDropdown();
282
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.GET_LINK.testId));
297
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.GET_LINK.testId));
283
298
  expect(await _react.screen.findByTestId('dhis2-uicore-modal')).toBeVisible();
284
299
  expect(_react.screen.getByRole('link', {
285
300
  name: url
286
301
  })).toHaveAttribute('href', url);
287
302
  });
288
- it('renders the DeleteDialog when the Delete button is clicked', async () => {
303
+ test('renders the DeleteDialog when the Delete button is clicked', async () => {
304
+ const user = _userEvent.default.setup();
289
305
  const customProps = {
290
306
  fileObject: {
291
307
  id: 'delete-test',
@@ -298,20 +314,22 @@ describe('The FileMenu component ', () => {
298
314
  };
299
315
  renderFileMenu(customProps);
300
316
  await openDropdown();
301
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.DELETE.testId));
317
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.DELETE.testId));
302
318
  expect(await _react.screen.findByText('Delete visualization', {
303
319
  selector: 'h1'
304
320
  })).toBeVisible();
305
321
  });
306
- it('renders the SaveAsDialog when the Save as… button is clicked', async () => {
322
+ test('renders the SaveAsDialog when the Save as… button is clicked', async () => {
323
+ const user = _userEvent.default.setup();
307
324
  renderFileMenu(fullAccessProps);
308
325
  await openDropdown();
309
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.SAVE_AS.testId));
326
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.SAVE_AS.testId));
310
327
  expect(await _react.screen.findByText('Save visualization as', {
311
328
  selector: 'h1'
312
329
  })).toBeVisible();
313
330
  });
314
- it('renders the SaveAsDialog when the Save… button is clicked but no fileObject is present', async () => {
331
+ test('renders the SaveAsDialog when the Save… button is clicked but no fileObject is present', async () => {
332
+ const user = _userEvent.default.setup();
315
333
  const customProps = {
316
334
  fileObject: {
317
335
  // NOTE: no `id` field
@@ -322,22 +340,24 @@ describe('The FileMenu component ', () => {
322
340
  };
323
341
  renderFileMenu(customProps);
324
342
  await openDropdown();
325
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.SAVE.testId));
343
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.SAVE.testId));
326
344
  expect(await _react.screen.findByText('Save visualization as', {
327
345
  selector: 'h1'
328
346
  })).toBeVisible();
329
347
  });
330
- it('calls the onSave callback when the Save button is clicked and a fileObject is present', async () => {
348
+ test('calls the onSave callback when the Save button is clicked and a fileObject is present', async () => {
349
+ const user = _userEvent.default.setup();
331
350
  renderFileMenu(fullAccessProps);
332
351
  await openDropdown();
333
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.SAVE.testId));
352
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.SAVE.testId));
334
353
  expect(_react.screen.queryByText('Open a visualization')).not.toBeVisible();
335
354
  expect(onSave).toHaveBeenCalledTimes(1);
336
355
  });
337
- it('calls the onNew callback when the New button is clicked', async () => {
356
+ test('calls the onNew callback when the New button is clicked', async () => {
357
+ const user = _userEvent.default.setup();
338
358
  renderFileMenu();
339
359
  await openDropdown();
340
- _react.fireEvent.click(_react.screen.getByTestId(MENU_ITEMS.NEW.testId));
360
+ await user.click(_react.screen.getByTestId(MENU_ITEMS.NEW.testId));
341
361
  expect(_react.screen.queryByText('Open a visualization')).not.toBeVisible();
342
362
  expect(onNew).toHaveBeenCalledTimes(1);
343
363
  });
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
- var _ui = require("@dhis2/ui");
4
- var _enzyme = require("enzyme");
5
- var _react = _interopRequireDefault(require("react"));
3
+ var _react = require("@testing-library/react");
4
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
+ var _react2 = _interopRequireDefault(require("react"));
6
6
  var _GetLinkDialog = require("../GetLinkDialog.js");
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
8
  const testBaseUrl = 'http://host.tld/test/';
@@ -45,23 +45,27 @@ const tests = [{
45
45
  id: 'map-id-2',
46
46
  expected: 'http://localhost/dhis-web-maps/#/map-id-2'
47
47
  }];
48
- describe('The FileMenu - GetLinkDialog component', () => {
49
- let shallowGetLinkDialog;
48
+ describe('FileMenu - GetLinkDialog component', () => {
50
49
  const onClose = jest.fn();
51
- const getGetLinkDialogComponent = props => {
52
- if (!shallowGetLinkDialog) {
53
- shallowGetLinkDialog = (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_GetLinkDialog.GetLinkDialog, props));
54
- }
55
- return shallowGetLinkDialog;
50
+ const props = {
51
+ type: tests[0].type,
52
+ id: tests[0].id,
53
+ onClose
56
54
  };
57
- beforeEach(() => {
58
- shallowGetLinkDialog = undefined;
55
+ test('renders a Modal component', () => {
56
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_GetLinkDialog.GetLinkDialog, props));
57
+ const modalComponent = _react.screen.getByTestId('dhis2-uicore-modal');
58
+ expect(modalComponent).toBeInTheDocument();
59
+ expect(_react.screen.getByLabelText('Close modal dialog')).toBeInTheDocument();
59
60
  });
60
- it('renders a Modal component', () => {
61
- expect(getGetLinkDialogComponent({
62
- type: tests[0].type,
63
- id: tests[0].id
64
- }).find(_ui.Modal)).toHaveLength(1);
61
+ test('calls the onClose callback when the Close button is clicked', async () => {
62
+ const user = _userEvent.default.setup();
63
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_GetLinkDialog.GetLinkDialog, props));
64
+ const closeButton = _react.screen.getByRole('button', {
65
+ name: 'Close'
66
+ });
67
+ await user.click(closeButton);
68
+ expect(onClose).toHaveBeenCalledTimes(1);
65
69
  });
66
70
  test.each(tests)('renders a <a> tag containing the correct app path and id', ({
67
71
  apiVersion,
@@ -74,19 +78,12 @@ describe('The FileMenu - GetLinkDialog component', () => {
74
78
  apiVersion: apiVersion || 42,
75
79
  baseUrl
76
80
  });
77
- const href = getGetLinkDialogComponent({
78
- type,
79
- id,
80
- onClose
81
- }).find('a').prop('href');
82
- expect(href).toMatch(expected);
83
- });
84
- it('calls the onClose callback when the Close button is clicked', () => {
85
- getGetLinkDialogComponent({
86
- type: tests[0].type,
87
- id: tests[0].id,
88
- onClose
89
- }).find(_ui.Button).at(1).simulate('click');
90
- expect(onClose).toHaveBeenCalled();
81
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_GetLinkDialog.GetLinkDialog, {
82
+ onClose: onClose,
83
+ type: type,
84
+ id: id
85
+ }));
86
+ const anchorElement = _react.screen.getByRole('link');
87
+ expect(anchorElement.href).toMatch(expected);
91
88
  });
92
89
  });
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
- require("@testing-library/jest-dom");
4
3
  var _react = require("@testing-library/react");
4
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
5
  var _react2 = _interopRequireDefault(require("react"));
6
6
  var _RenameDialog = require("../RenameDialog.js");
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
8
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
9
- describe('The FileMenu - RenameDialog component', () => {
9
+ describe('FileMenu - RenameDialog component', () => {
10
10
  const onClose = jest.fn();
11
11
  const onRename = jest.fn();
12
12
  const props = {
@@ -21,18 +21,18 @@ describe('The FileMenu - RenameDialog component', () => {
21
21
  jest.resetAllMocks();
22
22
  jest.clearAllMocks();
23
23
  });
24
- it('renders a Modal component with the correct heading', () => {
24
+ test('renders a Modal component with the correct heading', () => {
25
25
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, props));
26
26
  expect(_react.screen.getAllByTestId('file-menu-rename-modal')).toHaveLength(1);
27
27
  expect(_react.screen.getByRole('heading')).toHaveTextContent('Rename visualization');
28
28
  });
29
- it('renders a InputField for name', () => {
29
+ test('renders a InputField for name', () => {
30
30
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, props));
31
31
  expect(_react.screen.getByTestId('file-menu-rename-modal-name')).toBeInTheDocument();
32
32
  expect(_react.screen.getByText('Name')).toBeInTheDocument();
33
33
  expect(_react.screen.getByText('Name')).toBeVisible();
34
34
  });
35
- it('renders a InputField for name with prefilled value if name is in object prop', () => {
35
+ test('renders a InputField for name with prefilled value if name is in object prop', () => {
36
36
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, _extends({}, props, {
37
37
  object: {
38
38
  ...props.object,
@@ -44,7 +44,7 @@ describe('The FileMenu - RenameDialog component', () => {
44
44
  expect(inputElement).toBeInTheDocument();
45
45
  expect(inputElement).toHaveValue('Vis test');
46
46
  });
47
- it('renders a TextAreaField for description', () => {
47
+ test('renders a TextAreaField for description', () => {
48
48
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, props));
49
49
 
50
50
  // Locate the label by its text
@@ -55,7 +55,7 @@ describe('The FileMenu - RenameDialog component', () => {
55
55
  expect(descriptionField).toBeInTheDocument();
56
56
  expect(descriptionField).toBeVisible();
57
57
  });
58
- it('renders a TextAreaField for description with prefilled value if description is in object prop', () => {
58
+ test('renders a TextAreaField for description with prefilled value if description is in object prop', () => {
59
59
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, _extends({}, props, {
60
60
  object: {
61
61
  ...props.object,
@@ -71,15 +71,21 @@ describe('The FileMenu - RenameDialog component', () => {
71
71
  expect(descriptionField).toBeInTheDocument();
72
72
  expect(descriptionField).toHaveValue('Long explanation of the visualization');
73
73
  });
74
- it('calls the onClose callback when the Cancel button is clicked', async () => {
74
+ test('calls the onClose callback when the Cancel button is clicked', async () => {
75
+ const user = _userEvent.default.setup();
75
76
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, props));
76
- await _react.fireEvent.click(_react.screen.getByTestId('file-menu-rename-modal-cancel'));
77
+ await user.click(_react.screen.getByRole('button', {
78
+ name: 'Cancel'
79
+ }));
77
80
  expect(onClose).toHaveBeenCalled();
78
81
  expect(onRename).not.toHaveBeenCalled();
79
82
  });
80
- it('calls the onRename callback when the Rename button is clicked', async () => {
83
+ test('calls the onRename callback when the Rename button is clicked', async () => {
84
+ const user = _userEvent.default.setup();
81
85
  (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_RenameDialog.RenameDialog, props));
82
- await _react.fireEvent.click(_react.screen.getByTestId('file-menu-rename-modal-rename'));
86
+ await user.click(_react.screen.getByRole('button', {
87
+ name: 'Rename'
88
+ }));
83
89
  expect(onRename).toHaveBeenCalled();
84
90
  expect(onClose).toHaveBeenCalled();
85
91
  });
@@ -1,56 +1,63 @@
1
1
  "use strict";
2
2
 
3
- var _ui = require("@dhis2/ui");
4
- var _enzyme = require("enzyme");
5
- var _react = _interopRequireDefault(require("react"));
3
+ var _react = require("@testing-library/react");
4
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
+ var _react2 = _interopRequireDefault(require("react"));
6
6
  var _SaveAsDialog = require("../SaveAsDialog.js");
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- describe('The FileMenu - SaveAsDialog component', () => {
9
- let shallowSaveAsDialog;
10
- let props;
8
+ describe('FileMenu - SaveAsDialog component', () => {
11
9
  const onClose = jest.fn();
12
10
  const onSaveAs = jest.fn();
13
- const getSaveAsDialogComponent = props => {
14
- if (!shallowSaveAsDialog) {
15
- shallowSaveAsDialog = (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_SaveAsDialog.SaveAsDialog, props));
16
- }
17
- return shallowSaveAsDialog;
11
+ const props = {
12
+ type: 'visualization',
13
+ object: {
14
+ name: 'Save as name test',
15
+ description: 'Save as description test'
16
+ },
17
+ onClose,
18
+ onSaveAs
18
19
  };
19
- beforeEach(() => {
20
- shallowSaveAsDialog = undefined;
21
- props = {
22
- type: 'visualization',
23
- object: {
24
- name: 'Save as name test',
25
- description: 'Save as description test'
26
- },
27
- onClose,
28
- onSaveAs
29
- };
20
+ test('renders a Modal component', () => {
21
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
22
+ expect(_react.screen.getByTestId('file-menu-saveas-modal')).toBeInTheDocument();
30
23
  });
31
- it('renders a Modal component', () => {
32
- expect(getSaveAsDialogComponent(props).find(_ui.Modal)).toHaveLength(1);
24
+ test('renders a ModalTitle containing the type prop', () => {
25
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
26
+ expect(_react.screen.getByRole('heading')).toHaveTextContent(`Save ${props.type} as`);
33
27
  });
34
- it('renders a ModalTitle containing the type prop', () => {
35
- expect(getSaveAsDialogComponent(props).find(_ui.ModalTitle).childAt(0).text()).toEqual(`Save ${props.type} as`);
28
+ test('renders a InputField for name with prefilled value from the object prop', () => {
29
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
30
+ expect(_react.screen.getByTestId('file-menu-saveas-modal-name')).toBeInTheDocument();
31
+ expect(_react.screen.getByText('Name')).toBeInTheDocument();
32
+ expect(_react.screen.getByText('Name')).toBeVisible();
33
+ expect(_react.screen.getByDisplayValue('Save as name test (copy)')).toBeInTheDocument();
36
34
  });
37
- it('renders a InputField for name with prefilled value from the object prop', () => {
38
- const nameInputField = getSaveAsDialogComponent(props).findWhere(n => n.prop('label') === 'Name');
39
- expect(nameInputField.prop('value')).toEqual('Save as name test (copy)');
35
+ test('renders a TextAreaField for description with prefilled value from the object prop', () => {
36
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
37
+ expect(_react.screen.getByTestId('file-menu-saveas-modal-description')).toBeInTheDocument();
38
+ expect(_react.screen.getByText('Description')).toBeInTheDocument();
39
+ expect(_react.screen.getByText('Description')).toBeVisible();
40
+ expect(_react.screen.getByDisplayValue(props.object.description)).toBeInTheDocument();
40
41
  });
41
- it('renders a TextAreaField for description with prefilled value from the object prop', () => {
42
- const descriptionInputField = getSaveAsDialogComponent(props).findWhere(n => n.prop('label') === 'Description');
43
- expect(descriptionInputField.prop('value')).toEqual(props.object.description);
44
- });
45
- it('calls the onSaveAs callback when the Save button is clicked', () => {
46
- getSaveAsDialogComponent(props).find(_ui.Button).at(1).simulate('click');
42
+ test('calls the onSaveAs callback when the Save button is clicked', async () => {
43
+ const user = _userEvent.default.setup();
44
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
45
+ const saveButton = _react.screen.getByRole('button', {
46
+ name: 'Save'
47
+ });
48
+ await user.click(saveButton);
47
49
  expect(onSaveAs).toHaveBeenCalledWith({
48
50
  name: 'Save as name test (copy)',
49
51
  description: props.object.description
50
52
  });
51
53
  });
52
- it('calls the onClose callback when the Cancel button is clicked', () => {
53
- getSaveAsDialogComponent(props).find(_ui.Button).first().simulate('click');
54
+ test('calls the onClose callback when the Cancel button is clicked', async () => {
55
+ const user = _userEvent.default.setup();
56
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_SaveAsDialog.SaveAsDialog, props));
57
+ const cancelButton = _react.screen.getByRole('button', {
58
+ name: 'Cancel'
59
+ });
60
+ await user.click(cancelButton);
54
61
  expect(onClose).toHaveBeenCalled();
55
62
  });
56
63
  });
@@ -1,39 +1,34 @@
1
1
  "use strict";
2
2
 
3
- var _ui = require("@dhis2/ui");
4
- var _enzyme = require("enzyme");
5
- var _react = _interopRequireDefault(require("react"));
3
+ var _react = require("@testing-library/react");
4
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
5
+ var _react2 = _interopRequireDefault(require("react"));
6
6
  var _Filter = _interopRequireDefault(require("../Filter.js"));
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- describe('The Filter component ', () => {
9
- let shallowFilter;
10
- let props;
11
- const filterComp = () => {
12
- if (!shallowFilter) {
13
- shallowFilter = (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_Filter.default, props));
14
- }
15
- return shallowFilter;
16
- };
17
- beforeEach(() => {
18
- props = {
19
- placeholder: 'testplaceholder',
20
- text: '',
21
- onChange: jest.fn(),
22
- onClear: jest.fn()
23
- };
24
- shallowFilter = undefined;
25
- });
26
- it('renders a InputField component', () => {
27
- expect(filterComp().find(_ui.InputField).length).toEqual(1);
28
- });
29
- it('should call prop onClear if onChange receives text string with length < 1 (Ctrl-A + BackSpace)', () => {
30
- props.text = 'anotherTestString';
31
- const filter = filterComp().find(_ui.InputField);
32
- const mockEvent = {
33
- value: '',
34
- preventDefault: jest.fn()
35
- };
36
- filter.props().onChange(mockEvent);
37
- expect(props.onClear).toHaveBeenCalledTimes(1);
38
- });
8
+ const props = {
9
+ placeholder: 'testplaceholder',
10
+ text: '',
11
+ onChange: jest.fn(),
12
+ onClear: jest.fn()
13
+ };
14
+ test('Filter renders an InputField component ', () => {
15
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_Filter.default, props));
16
+ const inputField = _react.screen.getByTestId('dhis2-uiwidgets-inputfield');
17
+ expect(inputField).toBeInTheDocument();
18
+ });
19
+ test('Filter renders an input field with the given placeholder', () => {
20
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_Filter.default, props));
21
+ const inputField = _react.screen.getByPlaceholderText(props.placeholder);
22
+ expect(inputField).toBeInTheDocument();
23
+ });
24
+ test('Filter should call prop onClear if onChange receives text string with length < 1 (Ctrl-A + BackSpace)', async () => {
25
+ const user = _userEvent.default.setup();
26
+ props.text = 'anotherTestString';
27
+ (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_Filter.default, props));
28
+ const inputField = _react.screen.getByPlaceholderText(props.placeholder);
29
+
30
+ // focus on the input field in order to interact with it
31
+ await user.click(inputField);
32
+ await user.keyboard('{Control>}A{/Control}{Backspace}');
33
+ expect(props.onClear).toHaveBeenCalledTimes(1);
39
34
  });
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.CreatedByFilter = exports.CREATED_BY_CURRENT_USER = exports.CREATED_BY_ALL_BUT_CURRENT_USER = exports.CREATED_BY_ALL = void 0;
6
+ exports.formatUserFilter = exports.default = exports.CreatedByFilter = exports.CREATED_BY_CURRENT_USER = exports.CREATED_BY_ALL_BUT_CURRENT_USER = exports.CREATED_BY_ALL = void 0;
7
7
  var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
8
8
  var _ui = require("@dhis2/ui");
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -14,6 +14,14 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
14
14
  const CREATED_BY_ALL = exports.CREATED_BY_ALL = 'all';
15
15
  const CREATED_BY_ALL_BUT_CURRENT_USER = exports.CREATED_BY_ALL_BUT_CURRENT_USER = 'allButCurrentUser';
16
16
  const CREATED_BY_CURRENT_USER = exports.CREATED_BY_CURRENT_USER = 'currentUser';
17
+ const formatUserFilter = (createdBy, userId) => {
18
+ if (createdBy === CREATED_BY_ALL_BUT_CURRENT_USER) {
19
+ return `user.id:!eq:${userId}`;
20
+ } else if (createdBy === CREATED_BY_CURRENT_USER) {
21
+ return `user.id:eq:${userId}`;
22
+ }
23
+ };
24
+ exports.formatUserFilter = formatUserFilter;
17
25
  const CreatedByFilter = ({
18
26
  selected,
19
27
  onChange