UNPKG

box-ui-elements-mlh

Version:
105 lines (90 loc) 3.93 kB
// @flow import React from 'react'; import { shallow } from 'enzyme'; import { DragDropContext } from 'react-beautiful-dnd'; import draggableRowRenderer from '../draggableRowRenderer'; describe('features/virtualized-table-renderers/draggableRowRenderer', () => { let wrapper; let rowRendererParams; let draggableProvided; let draggableSnapshot; const getWrapper = params => shallow(<DragDropContext>{draggableRowRenderer(params)}</DragDropContext>); const getRenderPropWrapper = (...args) => wrapper.find('Connect(Draggable)').renderProp('children')(...args); beforeEach(() => { rowRendererParams = { index: 0, key: '0-0', rowData: { name: 'name', description: 'description', }, style: { height: 52, left: 0, top: 156, }, }; draggableProvided = { draggableProps: {}, dragHandleProps: {} }; draggableSnapshot = { isDragging: false }; wrapper = getWrapper(rowRendererParams); }); test('should wrap row in Draggable and set correct props', () => { expect(wrapper.find('Connect(Draggable)').props().index).toEqual(rowRendererParams.index); expect(wrapper.find('Connect(Draggable)').props().draggableId).toEqual(rowRendererParams.key); const renderPropWrapper = getRenderPropWrapper(draggableProvided, draggableSnapshot); expect(renderPropWrapper.props().role).toBe('row'); expect(renderPropWrapper.props().style).toEqual(rowRendererParams.style); expect(renderPropWrapper.prop('aria-rowindex')).toBe(rowRendererParams.index + 1); }); test('should further wrap row in Portal and set appropriate classes when being dragged', () => { let renderPropWrapper; draggableSnapshot.isDragging = false; renderPropWrapper = getRenderPropWrapper(draggableProvided, draggableSnapshot); expect(renderPropWrapper.is('Portal')).toBe(false); expect(renderPropWrapper.hasClass('is-dragging')).toBe(false); draggableSnapshot.isDragging = true; renderPropWrapper = getRenderPropWrapper(draggableProvided, draggableSnapshot); expect(renderPropWrapper.is('Portal')).toBe(true); expect(renderPropWrapper.props().className).toBe('bdl-VirtualizedTable bdl-DraggableVirtualizedTable'); expect(renderPropWrapper.find('[role="row"]').hasClass('is-dragging')).toBe(true); }); test('should use rowData id as draggableId when available', () => { delete rowRendererParams.rowData.id; wrapper = getWrapper(rowRendererParams); expect(wrapper.find('Connect(Draggable)').props().draggableId).toEqual(rowRendererParams.key); rowRendererParams.rowData.id = 'rowDataId'; wrapper = getWrapper(rowRendererParams); expect(wrapper.find('Connect(Draggable)').props().draggableId).toEqual('rowDataId'); }); test('should extend row with Draggable props and give precedence to Draggable style', () => { draggableProvided = { draggableProps: { style: { color: 'blue', left: 10, top: 20, }, foo: 'bar', }, dragHandleProps: { bar: 'foo', }, innerRef: 'innerRef', }; const renderPropWrapper = getRenderPropWrapper(draggableProvided, draggableSnapshot); expect(renderPropWrapper.props()).toEqual({ 'aria-rowindex': 1, bar: 'foo', children: undefined, className: '', foo: 'bar', role: 'row', style: { color: 'blue', height: 52, left: 10, top: 20, }, }); }); });