UNPKG

@emsipl/react-data-grid-addons

Version:

A set of addons for react-data-grid

70 lines (63 loc) 2.44 kB
import React, { Component } from 'react'; import { mount } from 'enzyme'; import TestBackend from 'react-dnd-test-backend'; import { DragDropContext } from 'react-dnd'; import dropTargetRowContainer from '../DropTargetRowContainer'; import { DragTestSource } from './TestDragSources'; import { _helpers } from 'react-data-grid'; const { test: { GridPropHelpers } } = _helpers; class fakeRow extends Component { render() { return <span>fake row</span>; } } /** * Wraps a component into a DragDropContext that uses the TestBackend. */ function wrapInTestContext(DecoratedComponent) { return DragDropContext(TestBackend)(class extends React.Component { render() { return <DecoratedComponent {...this.props} />; } }); } describe('<DropTargetRowContainer />', () => { let ComponentUnderTest; let wrapper; let backend; let registry; let manager; const props = { onRowDrop: jasmine.createSpy(), idx: 1, row: { id: 5, country: 'England' }, columns: GridPropHelpers.columns, cellMetaData: GridPropHelpers.cellMetaData }; beforeEach(() => { ComponentUnderTest = wrapInTestContext(dropTargetRowContainer(fakeRow)); wrapper = mount(<ComponentUnderTest {...props} />); manager = wrapper.instance().getManager(); backend = manager.getBackend(); registry = manager.getRegistry(); }); it('renders the injected row', () => { expect(wrapper.find(fakeRow).length).toEqual(1); }); it('should call onRowDrop with correct parameters when source is dropped', () => { const rowTargetKey = Object.keys(registry.handlers).filter(k => registry.handlers[k].monitor && registry.handlers[k].monitor.targetId)[0]; const rowTargetId = registry.handlers[rowTargetKey].monitor.targetId; const draggedRowItem = { idx: 3, data: { id: 11, country: 'Ireland', county: 'Wicklow' } }; const sourceId = registry.addSource('Row', new DragTestSource(draggedRowItem)); backend.simulateBeginDrag([sourceId]); backend.simulateHover([rowTargetId]); backend.simulateDrop(); expect(props.onRowDrop).toHaveBeenCalled(); expect(props.onRowDrop.calls.count()).toEqual(1); const rowSource = props.onRowDrop.calls.first().args[0].rowSource; const rowTarget = props.onRowDrop.calls.first().args[0].rowTarget; expect(rowSource).toEqual(draggedRowItem); expect(rowTarget.idx).toEqual(1); expect(rowTarget.data).toEqual(props.row); }); });