import { render, testA11y, screen, fireEvent, press } from '@fuels/jest'; import { Button } from '../Button'; import { Icon } from '../Icon'; import { Dropdown } from './Dropdown'; import type { DropdownProps } from './defs'; const Content = (props: Partial) => { return ( Click here Settings Delete Edit ); }; describe('Dropdown', () => { it('a11y', async () => { await testA11y(); }); it('should open dropdown menu when click on trigger', async () => { render(); expect(() => screen.getByText('Settings')).toThrow(); const trigger = screen.getByText('Click here'); fireEvent.click(trigger); expect(screen.getByText('Settings')).toBeInTheDocument(); }); it('should close when click on menu item', async () => { render(); const trigger = screen.getByText('Click here'); fireEvent.click(trigger); const menuItem = screen.getByText('Settings'); fireEvent.click(menuItem); expect(() => screen.getByText('Settings')).toThrow(); }); it('should close when click outside', async () => { render( <> , ); const trigger = screen.getByText('Click here'); fireEvent.click(trigger); const fooBtn = screen.getByText('Foo'); fireEvent.click(fooBtn); expect(() => screen.getByText('Settings')).toThrow(); }); it('should close when press esc', async () => { render(); const trigger = screen.getByText('Click here'); fireEvent.click(trigger); await press('Escape'); expect(() => screen.getByText('Settings')).toThrow(); }); });