diff options
author | Jeremy Davis <jeremy.davis@sonarsource.com> | 2023-02-22 16:18:48 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-03-13 20:02:44 +0000 |
commit | b33a7cd2193a47f90b22568dd0d58f404bc5f6d7 (patch) | |
tree | 6ad602cc5b4172f048a17ef33ed0267c8d96aed5 /server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx | |
parent | 8d902e9e2484b35b7a9fe6e8ed49e68ad3ff6ab5 (diff) | |
download | sonarqube-b33a7cd2193a47f90b22568dd0d58f404bc5f6d7.tar.gz sonarqube-b33a7cd2193a47f90b22568dd0d58f404bc5f6d7.zip |
SONAR-18524 New Main App bar
Diffstat (limited to 'server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx')
-rw-r--r-- | server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx b/server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx new file mode 100644 index 00000000000..350c6874e22 --- /dev/null +++ b/server/sonar-web/design-system/src/components/__tests__/DropdownMenu-test.tsx @@ -0,0 +1,100 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +import { screen } from '@testing-library/react'; +import { noop } from 'lodash'; +import { render, renderWithRouter } from '../../helpers/testUtils'; +import { + DropdownMenu, + ItemButton, + ItemCheckbox, + ItemCopy, + ItemDangerButton, + ItemDivider, + ItemHeader, + ItemLink, + ItemNavLink, + ItemRadioButton, +} from '../DropdownMenu'; +import MenuIcon from '../icons/MenuIcon'; +import Tooltip from '../Tooltip'; + +beforeEach(() => { + jest.useFakeTimers(); +}); + +afterEach(() => { + jest.runOnlyPendingTimers(); + jest.useRealTimers(); +}); + +it('should render a full menu correctly', () => { + renderDropdownMenu(); + expect(screen.getByRole('menuitem', { name: 'My header' })).toBeInTheDocument(); + expect(screen.getByRole('menuitem', { name: 'Test menu item' })).toBeInTheDocument(); + expect(screen.getByRole('menuitem', { name: 'Test disabled item' })).toHaveClass('disabled'); +}); + +it('menu items should work with tooltips', async () => { + const { user } = render( + <Tooltip overlay="test tooltip"> + <ItemButton onClick={jest.fn()}>button</ItemButton> + </Tooltip>, + {}, + { delay: null } + ); + + expect(screen.queryByRole('tooltip')).not.toBeInTheDocument(); + + await user.hover(screen.getByRole('menuitem')); + expect(screen.queryByRole('tooltip')).not.toBeInTheDocument(); + + jest.runAllTimers(); + expect(screen.getByRole('tooltip')).toBeVisible(); + + await user.unhover(screen.getByRole('menuitem')); + expect(screen.getByRole('tooltip')).toBeVisible(); + + jest.runAllTimers(); + expect(screen.queryByRole('tooltip')).not.toBeInTheDocument(); +}); + +function renderDropdownMenu() { + return renderWithRouter( + <DropdownMenu> + <ItemHeader>My header</ItemHeader> + <ItemNavLink to="/test">Test menu item</ItemNavLink> + <ItemDivider /> + <ItemLink disabled={true} to="/test-disabled"> + Test disabled item + </ItemLink> + <ItemButton icon={<MenuIcon />} onClick={noop}> + Button + </ItemButton> + <ItemDangerButton onClick={noop}>DangerButton</ItemDangerButton> + <ItemCopy copyValue="copy">Copy</ItemCopy> + <ItemCheckbox checked={true} onCheck={noop}> + Checkbox item + </ItemCheckbox> + <ItemRadioButton checked={false} onCheck={noop} value="radios"> + Radio item + </ItemRadioButton> + </DropdownMenu> + ); +} |