import React from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Dropdown } from '../Dropdown'; import { DropdownPosition, DropdownDirection } from '../dropdownConstants'; import { InternalDropdownItem } from '../InternalDropdownItem'; import { DropdownSeparator } from '../DropdownSeparator'; import { DropdownToggle } from '../DropdownToggle'; import { KebabToggle } from '../KebabToggle'; const dropdownItems = [ Link, Action , Disabled Link , Disabled Action , , Separated Link, Separated Action ]; describe('Dropdown', () => { test('regular', () => { const { asFragment } = render( Dropdown} /> ); expect(asFragment()).toMatchSnapshot(); }); test('right aligned', () => { const { asFragment } = render( Dropdown} /> ); expect(asFragment()).toMatchSnapshot(); }); test('alignment breakpoints', () => { const { asFragment } = render( Dropdown} isOpen /> ); expect(asFragment()).toMatchSnapshot(); }); test('dropup', () => { const { asFragment } = render( Dropdown} /> ); expect(asFragment()).toMatchSnapshot(); }); test('dropup + right aligned', () => { const { asFragment } = render( Dropdown} /> ); expect(asFragment()).toMatchSnapshot(); }); test('expanded', () => { const { asFragment } = render( Dropdown} /> ); expect(asFragment()).toMatchSnapshot(); }); test('primary', () => { const { asFragment } = render( Dropdown } /> ); expect(asFragment()).toMatchSnapshot(); }); test('basic', () => { const { asFragment } = render( Dropdown}>
BASIC
); expect(asFragment()).toMatchSnapshot(); }); test('Renders in strict mode', () => { const consoleError = jest.spyOn(console, 'error'); const { asFragment } = render( Dropdown} /> ); expect(consoleError).not.toHaveBeenCalled(); expect(asFragment()).toMatchSnapshot(); }); }); describe('KebabToggle', () => { test('regular', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('right aligned', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('dropup', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('dropup + right aligned', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('expanded', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('plain', () => { const { asFragment } = render( } /> ); expect(asFragment()).toMatchSnapshot(); }); test('basic', () => { const { asFragment } = render( }>
BASIC
); expect(asFragment()).toMatchSnapshot(); }); }); describe('API', () => { test('click on item', async () => { const mockToggle = jest.fn(); const mockSelect = jest.fn(); const user = userEvent.setup(); render( Dropdown} /> ); await user.click(screen.getByText('Link')); // "Link" is the text of the first item expect(mockToggle.mock.calls).toHaveLength(0); expect(mockSelect.mock.calls).toHaveLength(1); }); test('dropdownItems and children console error ', () => { const myMock = jest.fn(); global.console = { error: myMock } as any; render( Dropdown} >
Children items
); expect(myMock).toHaveBeenCalledWith( 'Children and dropdownItems props have been provided. Only the dropdownItems prop items will be rendered' ); }); test('dropdownItems only, no console error ', () => { const myMock = jest.fn(); global.console = { error: myMock } as any; render( Dropdown} /> ); expect(myMock).not.toHaveBeenCalled(); }); test('children only, no console ', () => { const myMock = jest.fn(); global.console = { error: myMock } as any; render( Dropdown}>
Children items
); expect(myMock).not.toHaveBeenCalled(); }); });