import * as React from 'react'; import { isConformant, handlesAccessibility } from 'test/specs/commonTests'; import { mountWithProvider } from 'test/utils'; import { List } from 'src/components/List/List'; import { implementsCollectionShorthandProp } from '../../commonTests/implementsCollectionShorthandProp'; import { ListItem, ListItemProps } from 'src/components/List/ListItem'; const listImplementsCollectionShorthandProp = implementsCollectionShorthandProp(List); describe('List', () => { isConformant(List, { constructorName: 'List', }); handlesAccessibility(List, { defaultRootRole: 'list' }); listImplementsCollectionShorthandProp('items', ListItem, { mapsValueToProp: 'content' }); const getItems = (onClick?: Function): (ListItemProps & { key: string })[] => [ { key: 'irving', content: 'Irving', onClick } as any, { key: 'skyler', content: 'Skyler' }, { key: 'dante', content: 'Dante' }, ]; describe('items', () => { it('renders children', () => { const listItems = mountWithProvider().find('ListItem'); expect(listItems.length).toBe(3); expect(listItems.first().props().content).toBe('Irving'); expect(listItems.last().props().content).toBe('Dante'); }); it('calls onClick handler for item', () => { const onClick = jest.fn(); const listItems = mountWithProvider().find('ListItem'); listItems .first() .find('li') .first() .simulate('click'); expect(onClick).toHaveBeenCalled(); }); }); describe('selectedIndex', () => { it('should not be set by default', () => { const wrapper = mountWithProvider(); expect(wrapper.find('li').filterWhere(item => Boolean(item.prop('aria-selected')))).toHaveLength(0); }); it('can be set a default value', () => { const wrapper = mountWithProvider(); expect( wrapper .find('li') .at(0) .prop('aria-selected'), ).toBe(true); }); it('should be set when item is clicked', () => { const wrapper = mountWithProvider(); expect( wrapper .find('li') .at(0) .prop('aria-selected'), ).toBe(true); wrapper .find('li') .at(1) .simulate('click'); expect( wrapper .find('li') .at(0) .prop('aria-selected'), ).toBe(false); expect( wrapper .find('li') .at(1) .prop('aria-selected'), ).toBe(true); }); it('calls onClick handler for item if `selectable`', () => { const onClick = jest.fn(); const onSelectedIndexChange = jest.fn(); const listItems = mountWithProvider( , ).find('ListItem'); listItems .first() .find('li') .first() .simulate('click'); expect(onClick).toHaveBeenCalled(); expect(onClick).toHaveBeenCalledWith( expect.objectContaining({ type: 'click' }), expect.objectContaining({ index: 0 }), ); expect(onSelectedIndexChange).toHaveBeenCalled(); expect(onSelectedIndexChange).toHaveBeenCalledWith( expect.objectContaining({ type: 'click' }), expect.objectContaining({ selectedIndex: 0 }), ); }); }); });