diff --git a/src/utils/DropdownBtnMenu.tsx b/src/utils/DropdownBtnMenu.tsx index 03007ba8..71cd2b83 100644 --- a/src/utils/DropdownBtnMenu.tsx +++ b/src/utils/DropdownBtnMenu.tsx @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faEllipsisV as menuIcon } from '@fortawesome/free-solid-svg-icons'; import './DropdownBtnMenu.scss'; -interface DropdownBtnMenuProps { +export interface DropdownBtnMenuProps { isOpen: boolean; toggle: () => void; right?: boolean; diff --git a/test/utils/DropdownBtnMenu.test.tsx b/test/utils/DropdownBtnMenu.test.tsx new file mode 100644 index 00000000..3d07ca64 --- /dev/null +++ b/test/utils/DropdownBtnMenu.test.tsx @@ -0,0 +1,48 @@ +import { shallow, ShallowWrapper } from 'enzyme'; +import { Mock } from 'ts-mockery'; +import { ButtonDropdown, DropdownMenu, DropdownToggle } from 'reactstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faEllipsisV as menuIcon } from '@fortawesome/free-solid-svg-icons'; +import { DropdownBtnMenu, DropdownBtnMenuProps } from '../../src/utils/DropdownBtnMenu'; + +describe('', () => { + let wrapper: ShallowWrapper; + const createWrapper = (props: Partial) => { + wrapper = shallow((props)}>the children); + + return wrapper; + }; + + afterAll(() => wrapper?.unmount()); + + it('renders expected components', () => { + const wrapper = createWrapper({}); + const toggle = wrapper.find(DropdownToggle); + const icon = wrapper.find(FontAwesomeIcon); + + expect(wrapper.find(ButtonDropdown)).toHaveLength(1); + expect(toggle).toHaveLength(1); + expect(toggle.prop('size')).toEqual('sm'); + expect(toggle.prop('caret')).toEqual(true); + expect(toggle.prop('outline')).toEqual(true); + expect(toggle.prop('className')).toEqual('dropdown-btn-menu__dropdown-toggle'); + expect(icon).toHaveLength(1); + expect(icon.prop('icon')).toEqual(menuIcon); + }); + + it('renders expected children', () => { + const menu = createWrapper({}).find(DropdownMenu); + + expect(menu.prop('children')).toEqual('the children'); + }); + + it.each([ + [ undefined, true ], + [ true, true ], + [ false, false ], + ])('renders menu to right when expected', (right, expectedRight) => { + const wrapper = createWrapper({ right }); + + expect(wrapper.find(DropdownMenu).prop('right')).toEqual(expectedRight); + }); +});