import { shallow, ShallowWrapper } from 'enzyme'; import { DropdownMenu, DropdownToggle } from 'reactstrap'; import { PropsWithChildren } from 'react'; import { DropdownBtn, DropdownBtnProps } from '../../src/utils/DropdownBtn'; describe('', () => { let wrapper: ShallowWrapper; const createWrapper = (props: PropsWithChildren) => { wrapper = shallow(); return wrapper; }; afterEach(() => wrapper?.unmount()); it.each([['foo'], ['bar'], ['baz']])('displays provided text', (text) => { const wrapper = createWrapper({ text }); const toggle = wrapper.find(DropdownToggle); expect(toggle.prop('children')).toContain(text); }); it.each([['foo'], ['bar'], ['baz']])('displays provided children', (children) => { const wrapper = createWrapper({ text: '', children }); const menu = wrapper.find(DropdownMenu); expect(menu.html()).toContain(children); }); it.each([ [undefined, 'dropdown-btn__toggle btn-block'], ['', 'dropdown-btn__toggle btn-block'], ['foo', 'dropdown-btn__toggle btn-block foo'], ['bar', 'dropdown-btn__toggle btn-block bar'], ])('includes provided classes', (className, expectedClasses) => { const wrapper = createWrapper({ text: '', className }); const toggle = wrapper.find(DropdownToggle); expect(toggle.prop('className')?.trim()).toEqual(expectedClasses); }); it.each([ [100, { minWidth: '100px' }], [250, { minWidth: '250px' }], [undefined, {}], ])('renders proper styles when minWidth is provided', (minWidth, expectedStyle) => { const wrapper = createWrapper({ text: '', minWidth }); const style = wrapper.find(DropdownMenu).prop('style'); expect(style).toEqual(expectedStyle); }); });