import React from 'react'; import Dropdown, { DropdownProps } from 'components/common/Dropdown/Dropdown'; import DropdownItem from 'components/common/Dropdown/DropdownItem'; import DropdownDivider from 'components/common/Dropdown/DropdownDivider'; import userEvent from '@testing-library/user-event'; import { render } from 'lib/testHelpers'; import { screen } from '@testing-library/react'; const dummyLable = 'My Test Label'; const dummyChildren = ( <> Child 1 Child 2 Child 3 ); describe('Dropdown', () => { const setupWrapper = ( props: Partial = {}, children: React.ReactNode = undefined ) => ( {children} ); it('renders Dropdown with initial props', () => { const wrapper = render(setupWrapper()).baseElement; expect(wrapper.querySelector('.dropdown')).toBeTruthy(); expect(wrapper.querySelector('.dropdown.is-active')).toBeFalsy(); expect(wrapper.querySelector('.dropdown.is-right')).toBeFalsy(); expect(wrapper.querySelector('.dropdown.is-up')).toBeFalsy(); expect(wrapper.querySelector('.dropdown-content')).toBeTruthy(); expect(wrapper.querySelector('.dropdown-content')).toHaveTextContent(''); }); it('renders custom children', () => { const wrapper = render(setupWrapper({}, dummyChildren)).baseElement; expect(wrapper.querySelector('.dropdown-content')).toBeTruthy(); expect(wrapper.querySelectorAll('.dropdown-item').length).toEqual(3); expect(wrapper.querySelectorAll('.dropdown-divider').length).toEqual(1); }); it('renders dropdown with a right-aligned menu', () => { const wrapper = render(setupWrapper({ right: true })).baseElement; expect(wrapper.querySelector('.dropdown.is-right')).toBeTruthy(); }); it('renders dropdown with a popup menu', () => { const wrapper = render(setupWrapper({ up: true })).baseElement; expect(wrapper.querySelector('.dropdown.is-up')).toBeTruthy(); }); it('handles click', () => { const wrapper = render(setupWrapper()).baseElement; const button = screen.getByText('My Test Label'); expect(button).toBeInTheDocument(); expect(wrapper.querySelector('.dropdown.is-active')).toBeFalsy(); userEvent.click(button); expect(wrapper.querySelector('.dropdown.is-active')).toBeTruthy(); }); it('matches snapshot', () => { const { baseElement } = render( setupWrapper( { right: true, up: true, }, dummyChildren ) ); expect(baseElement).toMatchSnapshot(); }); });