@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
@@ -1,102 +1,112 @@
1
- import '@testing-library/jest-dom';
2
- import { render, fireEvent, screen } from '@testing-library/react';
3
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
4
3
  import React from 'react';
5
4
  import { HoverMenuBar, HoverMenuDropdown, HoverMenuList, HoverMenuListItem } from '../index.js';
6
5
  describe('<HoverMenuBar/>', () => {
7
- it('renders children', () => {
6
+ test('renders children', () => {
8
7
  const childNode = 'text node';
9
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuBar, null, childNode));
10
- expect(wrapper.containsMatchingElement(childNode)).toBe(true);
8
+ render(/*#__PURE__*/React.createElement(HoverMenuBar, null, childNode));
9
+ expect(screen.getByText(childNode)).toBeInTheDocument();
11
10
  });
12
- it('accepts a `dataTest` prop', () => {
11
+ test('accepts a `dataTest` prop', () => {
13
12
  const dataTest = 'test';
14
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuBar, {
13
+ render(/*#__PURE__*/React.createElement(HoverMenuBar, {
15
14
  dataTest: dataTest
16
15
  }, "children"));
17
- expect(wrapper.find('div').prop('data-test')).toBe(dataTest);
16
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
18
17
  });
19
18
  describe('mouse interactions', () => {
20
- it('does not open on hover before a dropdown anchor is clicked', async () => {
19
+ test('does not open on hover before a dropdown anchor is clicked', async () => {
20
+ const user = userEvent.setup();
21
21
  createFullMenuBarWrapper();
22
- fireEvent.mouseOver(screen.getByText('Menu A'));
22
+ await user.hover(screen.getByText('Menu A'));
23
23
  await expectMenuItemsInDocument([['Menu item A.1', false], ['Menu item A.2', false], ['Menu item A.3', false]]);
24
24
  });
25
- it('does not open when a disabled dropdown anchor is clicked', async () => {
25
+ test('does not open when a disabled dropdown anchor is clicked', async () => {
26
+ const user = userEvent.setup();
26
27
  createFullMenuBarWrapper();
27
- fireEvent.click(screen.getByText('Menu C'));
28
+ await user.click(screen.getByText('Menu C'));
28
29
  await expectMenuItemsInDocument([['Menu item A.1', false], ['Menu item A.2', false], ['Menu item A.3', false]]);
29
30
  });
30
- it('opens menu list when clicked', async () => {
31
+ test('opens menu list when clicked', async () => {
32
+ const user = userEvent.setup();
31
33
  createFullMenuBarWrapper();
32
- fireEvent.click(screen.getByText('Menu A'));
34
+ await user.click(screen.getByText('Menu A'));
33
35
  await expectMenuItemsInDocument([['Menu item A.1', true], ['Menu item B.1', false], ['Menu item C.1', false]]);
34
36
  });
35
- it('responds to hover once open', async () => {
37
+ test('responds to hover once open', async () => {
38
+ const user = userEvent.setup();
36
39
  createFullMenuBarWrapper();
37
- fireEvent.click(screen.getByText('Menu A'));
38
- fireEvent.mouseOver(screen.getByText('Menu B'));
40
+ await user.click(screen.getByText('Menu A'));
41
+ await user.hover(screen.getByText('Menu B'));
39
42
  await expectMenuItemsInDocument([['Menu item A.1', false], ['Menu item B.1', true], ['Menu item C.1', false]]);
40
43
  });
41
- it('does not open disabled dropdown on hover in hover mode', async () => {
44
+ test('does not open disabled dropdown on hover in hover mode', async () => {
45
+ const user = userEvent.setup();
42
46
  createFullMenuBarWrapper();
43
- fireEvent.click(screen.getByText('Menu B'));
44
- fireEvent.mouseOver(screen.getByText('Menu C'));
47
+ await user.click(screen.getByText('Menu B'));
48
+ await user.hover(screen.getByText('Menu C'));
45
49
  await expectMenuItemsInDocument([['Menu item B.1', true], ['Menu item C.1', false]]);
46
50
  });
47
- it('opens submenus when in hover mode', async () => {
51
+ test('opens submenus when in hover mode', async () => {
52
+ const user = userEvent.setup();
48
53
  createFullMenuBarWrapper();
49
- fireEvent.click(screen.getByText('Menu B'));
50
- fireEvent.mouseOver(screen.getByText('Menu item B.1'));
54
+ await user.click(screen.getByText('Menu B'));
55
+ await user.hover(screen.getByText('Menu item B.1'));
51
56
  await expectMenuItemsInDocument([['Menu item B.1.1', true], ['Menu item B.1.2', true], ['Menu item B.1.3', true], ['Menu item B.2.1', false], ['Menu item B.2.2', false], ['Menu item B.2.3', false]]);
52
- fireEvent.mouseOver(screen.getByText('Menu item B.2'));
57
+ await user.hover(screen.getByText('Menu item B.2'));
53
58
  await expectMenuItemsInDocument([['Menu item B.1.1', false], ['Menu item B.1.2', false], ['Menu item B.1.3', false], ['Menu item B.2.1', true], ['Menu item B.2.2', true], ['Menu item B.2.3', true]]);
54
59
  });
55
- it('does not open disabled submenus when in hover mode', async () => {
60
+ test('does not open disabled submenus when in hover mode', async () => {
61
+ const user = userEvent.setup();
56
62
  createFullMenuBarWrapper();
57
- fireEvent.click(screen.getByText('Menu B'));
58
- fireEvent.mouseOver(screen.getByText('Menu item B.2'));
63
+ await user.click(screen.getByText('Menu B'));
64
+ await user.hover(screen.getByText('Menu item B.2'));
59
65
  await expectMenuItemsInDocument([['Menu item B.2.1', true], ['Menu item B.2.2', true], ['Menu item B.2.3', true], ['Menu item B.3.1', false], ['Menu item B.3.2', false], ['Menu item B.3.3', false]]);
60
- fireEvent.mouseOver(screen.getByText('Menu item B.3'));
66
+ await user.hover(screen.getByText('Menu item B.3'));
61
67
  await expectMenuItemsInDocument([['Menu item B.2.1', true], ['Menu item B.2.2', true], ['Menu item B.2.3', true], ['Menu item B.3.1', false], ['Menu item B.3.2', false], ['Menu item B.3.3', false]]);
62
68
  });
63
- it('closes when clicking on then document', async () => {
69
+ test('closes when clicking on then document', async () => {
70
+ const user = userEvent.setup();
64
71
  createFullMenuBarWrapper();
65
- fireEvent.click(screen.getByText('Menu A'));
72
+ await user.click(screen.getByText('Menu A'));
66
73
  await expectMenuItemsInDocument([['Menu item A.1', true]]);
67
- fireEvent.click(document);
74
+ await user.click(document.body);
68
75
  await expectMenuItemsInDocument([['Menu item A.1', false]]);
69
76
  });
70
- it('stays open when clicking a open submenu anchor', async () => {
77
+ test('stays open when clicking a open submenu anchor', async () => {
78
+ const user = userEvent.setup();
71
79
  createFullMenuBarWrapper();
72
- fireEvent.click(screen.getByText('Menu B'));
80
+ await user.click(screen.getByText('Menu B'));
73
81
  await expectMenuItemsInDocument([['Menu item B.1', true]]);
74
- fireEvent.mouseOver(screen.getByText('Menu item B.1'));
82
+ await user.hover(screen.getByText('Menu item B.1'));
75
83
  await expectMenuItemsInDocument([['Menu item B.1', true], ['Menu item B.1.1', true], ['Menu item B.1.2', true], ['Menu item B.1.3', true]]);
76
- fireEvent.click(screen.getByText('Menu item B.1'));
84
+ await user.click(screen.getByText('Menu item B.1'));
77
85
  await expectMenuItemsInDocument([['Menu item B.1', true], ['Menu item B.1.1', true], ['Menu item B.1.2', true], ['Menu item B.1.3', true]]);
78
86
  });
79
- it('calls the onClick of the menu item and closes when clicking a menu item', async () => {
87
+ test('calls the onClick of the menu item and closes when clicking a menu item', async () => {
88
+ const user = userEvent.setup();
80
89
  const menuItemOnClickSpy = jest.fn();
81
90
  createFullMenuBarWrapper({
82
91
  menuItemOnClickSpy
83
92
  });
84
- fireEvent.click(screen.getByText('Menu A'));
93
+ await user.click(screen.getByText('Menu A'));
85
94
  await expectMenuItemsInDocument([['Menu item A.1', true]]);
86
- fireEvent.click(screen.getByText('Menu item A.1'));
95
+ await user.click(screen.getByText('Menu item A.1'));
87
96
  expect(menuItemOnClickSpy).toHaveBeenCalledTimes(1);
88
97
  await expectMenuItemsInDocument([['Menu item A.1', false]]);
89
98
  });
90
- it('calls the onClick of the menu item and closes when clicking a submenu item', async () => {
99
+ test('calls the onClick of the menu item and closes when clicking a submenu item', async () => {
100
+ const user = userEvent.setup();
91
101
  const subMenuItemOnClickSpy = jest.fn();
92
102
  createFullMenuBarWrapper({
93
103
  subMenuItemOnClickSpy
94
104
  });
95
- fireEvent.click(screen.getByText('Menu B'));
105
+ await user.click(screen.getByText('Menu B'));
96
106
  await expectMenuItemsInDocument([['Menu item B.1', true]]);
97
- fireEvent.mouseOver(screen.getByText('Menu item B.1'));
107
+ await user.hover(screen.getByText('Menu item B.1'));
98
108
  await expectMenuItemsInDocument([['Menu item B.1.1', true]]);
99
- fireEvent.click(screen.getByText('Menu item B.1.1'));
109
+ await user.click(screen.getByText('Menu item B.1.1'));
100
110
  expect(subMenuItemOnClickSpy).toHaveBeenCalledTimes(1);
101
111
  await expectMenuItemsInDocument([['Menu item B.1', false], ['Menu item B.1.1', false], ['Menu item B.1.1', false]]);
102
112
  });
@@ -1,4 +1,4 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
2
  import React from 'react';
3
3
  import { HoverMenuDropdown } from '../index.js';
4
4
  describe('<HoverMenuDropdown/>', () => {
@@ -6,20 +6,20 @@ describe('<HoverMenuDropdown/>', () => {
6
6
  * in the mouse interaction tests for the HoverMenuBar.
7
7
  * Only the `dataTest` prop needs to be verified here. */
8
8
 
9
- it('accepts a `dataTest` prop', () => {
9
+ test('accepts a `dataTest` prop', () => {
10
10
  const dataTest = 'test';
11
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuDropdown, {
11
+ render(/*#__PURE__*/React.createElement(HoverMenuDropdown, {
12
12
  label: "test dropdown",
13
13
  dataTest: dataTest
14
14
  }, "children"));
15
- expect(wrapper.find('button').prop('data-test')).toBe(dataTest);
15
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
16
16
  });
17
- it('accepts a `className` prop', () => {
17
+ test('accepts a `className` prop', () => {
18
18
  const className = 'test';
19
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuDropdown, {
19
+ render(/*#__PURE__*/React.createElement(HoverMenuDropdown, {
20
20
  label: "test dropdown",
21
21
  className: className
22
22
  }, "children"));
23
- expect(wrapper.find('button')).toHaveClassName(className);
23
+ expect(screen.getByRole('button')).toHaveClass(className);
24
24
  });
25
25
  });
@@ -1,29 +1,28 @@
1
- import '@testing-library/jest-dom';
2
1
  import { render, screen } from '@testing-library/react';
3
- import { shallow } from 'enzyme';
4
2
  import React from 'react';
5
3
  import { HoverMenuList, HoverMenuListItem } from '../index.js';
6
4
  describe('<HoverMenuList/>', () => {
7
5
  const dataTest = 'test';
8
6
  const childNode = 'children';
9
- it('renders children', () => {
10
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuList, null, childNode));
11
- expect(wrapper.containsMatchingElement(childNode)).toBe(true);
7
+ test('renders children', () => {
8
+ render(/*#__PURE__*/React.createElement(HoverMenuList, null, childNode));
9
+ expect(screen.getByText(childNode)).toBeInTheDocument();
12
10
  });
13
- it('accept a `className` prop', () => {
11
+ test('accept a `className` prop', () => {
14
12
  const className = 'className';
15
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuList, {
13
+ render(/*#__PURE__*/React.createElement(HoverMenuList, {
14
+ dataTest: dataTest,
16
15
  className: className
17
16
  }, childNode));
18
- expect(wrapper.find('ul')).toHaveClassName(className);
17
+ expect(screen.getByTestId(dataTest)).toHaveClass(className);
19
18
  });
20
- it('accepts a `dataTest` prop', () => {
21
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuList, {
19
+ test('accepts a `dataTest` prop', () => {
20
+ render(/*#__PURE__*/React.createElement(HoverMenuList, {
22
21
  dataTest: dataTest
23
22
  }, childNode));
24
- expect(wrapper.find('ul').prop('data-test')).toBe(dataTest);
23
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
25
24
  });
26
- it('accept a `dense` prop', () => {
25
+ test('accept a `dense` prop', () => {
27
26
  render(/*#__PURE__*/React.createElement(HoverMenuList, {
28
27
  dense: true
29
28
  }, /*#__PURE__*/React.createElement(HoverMenuListItem, {
@@ -34,18 +33,24 @@ describe('<HoverMenuList/>', () => {
34
33
  expect(screen.getByText('item 1').closest('li')).toHaveClass('dense');
35
34
  expect(screen.getByText('item 2').closest('li')).toHaveClass('dense');
36
35
  });
37
- it('accept a `maxHeight` prop', () => {
36
+ test('accept a `maxHeight` prop', () => {
38
37
  const maxHeight = '100000px';
39
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuList, {
38
+ const {
39
+ container
40
+ } = render(/*#__PURE__*/React.createElement(HoverMenuList, {
41
+ dataTest: dataTest,
40
42
  maxHeight: maxHeight
41
43
  }, childNode));
42
- expect(wrapper.find('style').text()).toContain(`max-height: ${maxHeight}`);
44
+ expect(container).toMatchSnapshot();
43
45
  });
44
- it('accept a `maxWidth` prop', () => {
46
+ test('accept a `maxWidth` prop', () => {
45
47
  const maxWidth = '100000px';
46
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuList, {
48
+ const {
49
+ container
50
+ } = render(/*#__PURE__*/React.createElement(HoverMenuList, {
51
+ dataTest: dataTest,
47
52
  maxWidth: maxWidth
48
53
  }, childNode));
49
- expect(wrapper.find('style').text()).toContain(`max-width: ${maxWidth}`);
54
+ expect(container).toMatchSnapshot();
50
55
  });
51
56
  });
@@ -1,4 +1,4 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
2
  import React from 'react';
3
3
  import { HoverMenuListItem } from '../index.js';
4
4
  describe('<HoverMenuListItem/>', () => {
@@ -7,36 +7,42 @@ describe('<HoverMenuListItem/>', () => {
7
7
  * Only the `className`, `dataTest`, `destructive` and
8
8
  * `icon` prop need to be verified here. */
9
9
 
10
- it('accepts a `className` prop', () => {
10
+ test('accepts a `className` prop', () => {
11
11
  const className = 'className';
12
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuListItem, {
12
+ render(/*#__PURE__*/React.createElement(HoverMenuListItem, {
13
13
  className: className
14
14
  }));
15
- expect(wrapper.find('li')).toHaveClassName(className);
15
+ expect(screen.getByTestId('dhis2-uicore-hovermenulistitem')).toHaveClass(className);
16
16
  });
17
- it('accepts a `dataTest` prop', () => {
17
+ test('accepts a `dataTest` prop', () => {
18
18
  const dataTest = 'test';
19
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuListItem, {
19
+ render(/*#__PURE__*/React.createElement(HoverMenuListItem, {
20
20
  dataTest: dataTest
21
21
  }));
22
- expect(wrapper.find('li').prop('data-test')).toBe(dataTest);
22
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
23
23
  });
24
- it('accepts a `destructive` prop', () => {
25
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuListItem, {
24
+ test('accepts a `destructive` prop', () => {
25
+ const dataTest = 'test';
26
+ render(/*#__PURE__*/React.createElement(HoverMenuListItem, {
27
+ dataTest: dataTest,
26
28
  destructive: true
27
29
  }));
28
- expect(wrapper.find('li')).toHaveClassName('destructive');
30
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
29
31
  });
30
- it('accepts an `icon` prop', () => {
32
+ test('accepts an `icon` prop', () => {
33
+ const dataTest = 'test';
31
34
  const iconText = 'I am an icon';
32
35
  const icon = /*#__PURE__*/React.createElement("span", {
33
36
  id: "testicon"
34
37
  }, iconText);
35
- const wrapper = shallow(/*#__PURE__*/React.createElement(HoverMenuListItem, {
38
+ render(/*#__PURE__*/React.createElement(HoverMenuListItem, {
39
+ dataTest: dataTest,
36
40
  icon: icon
37
41
  }));
38
- expect(wrapper.find('span.icon')).toExist();
39
- expect(wrapper.find('span#testicon')).toExist();
40
- expect(wrapper.find('span#testicon').text()).toBe(iconText);
42
+ const iconWrapperEl = screen.getByTestId(dataTest).firstChild;
43
+ expect(iconWrapperEl).toBeInTheDocument();
44
+ expect(iconWrapperEl).toHaveClass('icon');
45
+ const iconEl = iconWrapperEl.closest('span');
46
+ expect(iconEl).toHaveTextContent(iconText);
41
47
  });
42
48
  });
@@ -0,0 +1,63 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<HoverMenuList/> accept a \`maxHeight\` prop 1`] = `
4
+ <div>
5
+ <ul
6
+ data-test="test"
7
+ >
8
+ children
9
+ <style>
10
+
11
+ ul {
12
+ position: relative;
13
+ margin: 0;
14
+ padding: 0;
15
+ user-select: none;
16
+ background: #ffffff;
17
+ border: 1px solid #f3f5f7;
18
+ border-radius: 3px;
19
+ box-shadow: 0px 10px 15px -3px rgba(33,41,52,0.1), 0px 4px 6px -2px rgba(33,41,52,0.05);
20
+ display: inline-block;
21
+ min-width: 128px;
22
+ max-width: 380px;
23
+ max-height: 100000px;
24
+ padding: 4px 0;
25
+ overflow: auto;
26
+ list-style: none;
27
+ }
28
+
29
+ </style>
30
+ </ul>
31
+ </div>
32
+ `;
33
+
34
+ exports[`<HoverMenuList/> accept a \`maxWidth\` prop 1`] = `
35
+ <div>
36
+ <ul
37
+ data-test="test"
38
+ >
39
+ children
40
+ <style>
41
+
42
+ ul {
43
+ position: relative;
44
+ margin: 0;
45
+ padding: 0;
46
+ user-select: none;
47
+ background: #ffffff;
48
+ border: 1px solid #f3f5f7;
49
+ border-radius: 3px;
50
+ box-shadow: 0px 10px 15px -3px rgba(33,41,52,0.1), 0px 4px 6px -2px rgba(33,41,52,0.05);
51
+ display: inline-block;
52
+ min-width: 128px;
53
+ max-width: 100000px;
54
+ max-height: auto;
55
+ padding: 4px 0;
56
+ overflow: auto;
57
+ list-style: none;
58
+ }
59
+
60
+ </style>
61
+ </ul>
62
+ </div>
63
+ `;
@@ -14,7 +14,9 @@ export const InterpretationsAndDetailsToggler = ({
14
14
  disabled: disabled,
15
15
  "data-test": dataTest,
16
16
  className: "jsx-1238484262 " + `jsx-${menuButtonStyles.__hash}`
17
- }, isShowing ? /*#__PURE__*/React.createElement(IconChevronRight24, null) : /*#__PURE__*/React.createElement(IconChevronLeft24, null), i18n.t('Interpretations and details'), /*#__PURE__*/React.createElement(_JSXStyle, {
17
+ }, isShowing ? /*#__PURE__*/React.createElement(IconChevronRight24, {
18
+ dataTest: `${dataTest}-showing`
19
+ }) : /*#__PURE__*/React.createElement(IconChevronLeft24, null), i18n.t('Interpretations and details'), /*#__PURE__*/React.createElement(_JSXStyle, {
18
20
  id: menuButtonStyles.__hash
19
21
  }, menuButtonStyles), /*#__PURE__*/React.createElement(_JSXStyle, {
20
22
  id: "1238484262"
@@ -1,42 +1,43 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
2
3
  import React from 'react';
3
4
  import { InterpretationsAndDetailsToggler } from '../index.js';
4
5
  describe('<InterpretationsAndDetailsToggler/>', () => {
5
6
  const noop = () => {};
6
- it('accepts an `onClick` prop', () => {
7
+ test('accepts an `onClick` prop', async () => {
8
+ const user = userEvent.setup();
7
9
  const onClick = jest.fn();
8
- const wrapper = shallow(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
10
+ render(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
9
11
  onClick: onClick
10
12
  }));
11
- wrapper.simulate('click');
13
+ await user.click(screen.getByRole('button'));
12
14
  expect(onClick).toHaveBeenCalledTimes(1);
13
15
  });
14
- it('accepts a `dataTest` prop', () => {
16
+ test('accepts a `dataTest` prop', () => {
15
17
  const dataTest = 'test';
16
- const wrapper = shallow(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
18
+ render(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
17
19
  onClick: noop,
18
20
  dataTest: dataTest
19
21
  }));
20
- expect(wrapper.prop('data-test')).toBe(dataTest);
22
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
21
23
  });
22
- it('accepts a `disabled` prop', () => {
23
- const wrapper = shallow(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
24
+ test('accepts a `disabled` prop', () => {
25
+ render(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
24
26
  disabled: true,
25
27
  onClick: noop
26
28
  }));
27
- expect(wrapper.find('button').prop('disabled')).toEqual(true);
29
+ expect(screen.getByRole('button')).toBeDisabled();
28
30
  });
29
- it('accepts an `isShowing` prop', () => {
30
- const wrapper = shallow(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
31
+ test('accepts an `isShowing` prop', () => {
32
+ const showingDataTest = 'dhis2-analytics-interpretationsanddetailstoggler-showing';
33
+ render(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
31
34
  onClick: noop
32
35
  }));
33
- const wrapperWithIsShowing = shallow(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
36
+ expect(screen.queryByTestId(showingDataTest)).not.toBeInTheDocument();
37
+ render(/*#__PURE__*/React.createElement(InterpretationsAndDetailsToggler, {
34
38
  isShowing: true,
35
39
  onClick: noop
36
40
  }));
37
- expect(wrapper.find('SvgChevronRight24')).toHaveLength(0);
38
- expect(wrapper.find('SvgChevronLeft24')).toHaveLength(1);
39
- expect(wrapperWithIsShowing.find('SvgChevronRight24')).toHaveLength(1);
40
- expect(wrapperWithIsShowing.find('SvgChevronLeft24')).toHaveLength(0);
41
+ expect(screen.getByTestId(showingDataTest)).toBeInTheDocument();
41
42
  });
42
43
  });
@@ -1,17 +1,17 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
2
  import React from 'react';
3
3
  import { Toolbar } from '../index.js';
4
4
  describe('<Toolbar/>', () => {
5
- it('renders children', () => {
5
+ test('renders children', () => {
6
6
  const childNode = 'text node';
7
- const wrapper = shallow(/*#__PURE__*/React.createElement(Toolbar, null, childNode));
8
- expect(wrapper.containsMatchingElement(childNode)).toBe(true);
7
+ render(/*#__PURE__*/React.createElement(Toolbar, null, childNode));
8
+ expect(screen.getByText(childNode)).toBeInTheDocument();
9
9
  });
10
- it('accepts a `dataTest` prop', () => {
10
+ test('accepts a `dataTest` prop', () => {
11
11
  const dataTest = 'test';
12
- const wrapper = shallow(/*#__PURE__*/React.createElement(Toolbar, {
12
+ render(/*#__PURE__*/React.createElement(Toolbar, {
13
13
  dataTest: dataTest
14
14
  }));
15
- expect(wrapper.prop('data-test')).toBe(dataTest);
15
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
16
16
  });
17
17
  });
@@ -1,23 +1,26 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
2
  import React from 'react';
3
3
  import { ToolbarSidebar } from '../index.js';
4
4
  describe('<ToolbarSidebar/>', () => {
5
- it('renders children', () => {
5
+ test('renders children', () => {
6
6
  const childNode = 'text node';
7
- const wrapper = shallow(/*#__PURE__*/React.createElement(ToolbarSidebar, null, childNode));
8
- expect(wrapper.containsMatchingElement(childNode)).toBe(true);
7
+ render(/*#__PURE__*/React.createElement(ToolbarSidebar, null, childNode));
8
+ expect(screen.getByText(childNode)).toBeInTheDocument();
9
9
  });
10
- it('accepts a `dataTest` prop', () => {
10
+ test('accepts a `dataTest` prop', () => {
11
11
  const dataTest = 'test';
12
- const wrapper = shallow(/*#__PURE__*/React.createElement(ToolbarSidebar, {
12
+ render(/*#__PURE__*/React.createElement(ToolbarSidebar, {
13
13
  dataTest: dataTest
14
14
  }));
15
- expect(wrapper.prop('data-test')).toBe(dataTest);
15
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
16
16
  });
17
- it('accepts a `isHidden` prop', () => {
18
- const wrapper = shallow(/*#__PURE__*/React.createElement(ToolbarSidebar, {
17
+ test('accepts a `isHidden` prop', () => {
18
+ const {
19
+ container
20
+ } = render(/*#__PURE__*/React.createElement(ToolbarSidebar, {
19
21
  isHidden: true
20
22
  }));
21
- expect(wrapper.find('div').hasClass('isHidden')).toEqual(true);
23
+ const divEl = container.querySelector('div');
24
+ expect(divEl).toHaveClass('isHidden');
22
25
  });
23
26
  });
@@ -1,36 +1,38 @@
1
- import { shallow } from 'enzyme';
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
2
3
  import React from 'react';
3
4
  import { UpdateButton } from '../index.js';
4
5
  describe('<UpdateButton/>', () => {
5
6
  const noop = () => {};
6
- it('accepts an `onClick` prop', () => {
7
+ test('accepts an `onClick` prop', async () => {
8
+ const user = userEvent.setup();
7
9
  const onClick = jest.fn();
8
- const wrapper = shallow(/*#__PURE__*/React.createElement(UpdateButton, {
10
+ render(/*#__PURE__*/React.createElement(UpdateButton, {
9
11
  onClick: onClick
10
12
  }));
11
- wrapper.simulate('click');
13
+ await user.click(screen.getByRole('button'));
12
14
  expect(onClick).toHaveBeenCalledTimes(1);
13
15
  });
14
- it('accepts a `dataTest` prop', () => {
16
+ test('accepts a `dataTest` prop', () => {
15
17
  const dataTest = 'test';
16
- const wrapper = shallow(/*#__PURE__*/React.createElement(UpdateButton, {
18
+ render(/*#__PURE__*/React.createElement(UpdateButton, {
17
19
  onClick: noop,
18
20
  dataTest: dataTest
19
21
  }));
20
- expect(wrapper.prop('data-test')).toBe(dataTest);
22
+ expect(screen.getByTestId(dataTest)).toBeInTheDocument();
21
23
  });
22
- it('accepts a `disabled` prop', () => {
23
- const wrapper = shallow(/*#__PURE__*/React.createElement(UpdateButton, {
24
+ test('accepts a `disabled` prop', () => {
25
+ render(/*#__PURE__*/React.createElement(UpdateButton, {
24
26
  disabled: true,
25
27
  onClick: noop
26
28
  }));
27
- expect(wrapper.find('button').prop('disabled')).toEqual(true);
29
+ expect(screen.getByRole('button')).toBeDisabled();
28
30
  });
29
- it('accepts an `loading` prop', () => {
30
- const wrapper = shallow(/*#__PURE__*/React.createElement(UpdateButton, {
31
+ test('accepts an `loading` prop', () => {
32
+ render(/*#__PURE__*/React.createElement(UpdateButton, {
31
33
  onClick: noop,
32
34
  loading: true
33
35
  }));
34
- expect(wrapper.find('CircularLoader')).toHaveLength(1);
36
+ expect(screen.getByTestId('dhis2-uicore-circularloader')).toBeInTheDocument();
35
37
  });
36
38
  });
@@ -29,7 +29,8 @@ export const TranslationModal = ({
29
29
  return /*#__PURE__*/React.createElement(Modal, {
30
30
  large: true,
31
31
  position: "middle",
32
- onClose: onClose
32
+ onClose: onClose,
33
+ dataTest: "dhis2-analytics-translation-modal"
33
34
  }, /*#__PURE__*/React.createElement(ModalTitle, null, i18n.t('Translate: {{objectName}}', {
34
35
  objectName: objectToTranslate.name || 'TEXT',
35
36
  // XXX