import _, { forEach, has, noop } from 'lodash'; import React from 'react'; import assert from 'assert'; import { shallow, mount } from 'enzyme'; import { common } from '../../util/generic-tests'; import IconSelect from './IconSelect'; const items = [ { id: 'one', isSelected: false, label: 'one', }, { id: 'two', isSelected: true, label: 'two', }, ]; describe('IconSelect', () => { common(IconSelect, { getDefaultProps: () => ({ items: [] }), } as any); it('prop children', () => { const wrapper = shallow(
); assert(wrapper.contains(
)); }); it('has a selected item', () => { const wrapper = shallow(); assert.strictEqual( wrapper .children() .at(1) .children() .at(0) .children() .at(0) .prop('isSelected'), true ); }); it('has an unselected selected item', () => { const wrapper = shallow(); assert.strictEqual( wrapper .children() .at(0) .children() .at(0) .children() .at(0) .prop('isSelected'), false ); }); describe('IconSelect Events', () => { it('should call the onClick handler when clicked', () => { const onIconSelectClick = jest.fn(); const wrapper = mount( ); wrapper.find('figure[data-id="one"]').simulate('click'); expect(onIconSelectClick).toBeCalledTimes(1); }); it('should not use onClick if disabled', () => { const onIconSelectMock = jest.fn(); const wrapper = mount( ); wrapper.find('figure[data-id="one"]').simulate('click'); expect(onIconSelectMock).not.toHaveBeenCalled(); }); }); describe('pass throughs', () => { let wrapper: any; const defaultProps = IconSelect.defaultProps; beforeEach(() => { const props = { ...defaultProps, items, kind: 'multiple' as any, onSelect: noop, isDisabled: true, style: { marginRight: 10 }, initialState: { test: true }, callbackId: 1, 'data-testid': 10, }; wrapper = shallow(); }); afterEach(() => { if (wrapper) { wrapper.unmount(); } }); it('passes through select props to the root element.', () => { const rootProps = wrapper.find('.lucid-IconSelect').props(); // 'className' is plucked from the pass through object // but still appears becuase it is also directly placed on the root element as a prop forEach(['className', 'style', 'children', 'data-testid'], (prop) => { expect(has(rootProps, prop)).toBe(true); }); }); it("omits the component props, and, in addition, 'initialState' and 'callbackId' from the root element", () => { const rootProps = wrapper.find('.lucid-IconSelect').props(); forEach( [ 'items', 'kind', 'onSelect', 'isDisabled', 'initialState', 'callbackId', ], (prop) => { expect(has(rootProps, prop)).toBe(false); } ); }); }); });