patch test for refining expand row consumer

This commit is contained in:
AllenFang 2018-08-18 17:50:58 +08:00
parent 21e7c3a53a
commit 4b790e4bec
5 changed files with 239 additions and 20 deletions

View File

@ -9,6 +9,7 @@ import RowAggregator from '../src/row-aggregator';
import Const from '../src/const';
import RowSection from '../src/row-section';
import SelectionContext from '../src/contexts/selection-context';
import ExpansionContext from '../src/contexts/row-expand-context';
import mockBodyResolvedProps from './test-helpers/mock/body-resolved-props';
describe('Body', () => {
@ -284,7 +285,7 @@ describe('Body', () => {
});
});
describe('when selectRow.mode is ROW_SELECT_DISABLED (row was un-selectable)', () => {
describe('when selectRow.mode is ROW_SELECT_DISABLED or expandRow.renderer is undefined', () => {
beforeEach(() => {
wrapper = shallow(
<Body
@ -296,8 +297,8 @@ describe('Body', () => {
);
});
it('prop selectRowEnabled on Row Component should be undefined', () => {
expect(wrapper.find(Row).get(0).props.selectRowEnabled).not.toBeDefined();
it('shouldn\'t render RowAggregator component', () => {
expect(wrapper.find(RowAggregator)).toHaveLength(0);
});
});
@ -318,8 +319,38 @@ describe('Body', () => {
);
});
it('prop selectRowEnabled on RowAggregator Component should be defined', () => {
expect(wrapper.find(RowAggregator).get(0).props.selectRowEnabled).toBeTruthy();
it('should render RowAggregator component correctly', () => {
const rowAggregator = wrapper.find(RowAggregator);
expect(rowAggregator.get(0).props.selectRow.mode)
.not.toEqual(Const.ROW_SELECT_DISABLED);
expect(rowAggregator.get(0).props.selected).toBeDefined();
expect(rowAggregator.get(0).props.selectable).toBeDefined();
});
});
describe('when expandRow.renderer is defined correctly', () => {
const expandRow = { renderer: jest.fn() };
beforeEach(() => {
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<Body
{ ...mockBodyResolvedProps }
data={ data }
columns={ columns }
keyField={ keyField }
expandRow={ expandRow }
/>
</ExpansionContext.Provider>
);
});
it('should render RowAggregator component correctly', () => {
const rowAggregator = wrapper.find(RowAggregator);
expect(rowAggregator.get(0).props.expandRow.renderer).toEqual(expandRow.renderer);
expect(rowAggregator.get(0).props.expanded).toBeDefined();
expect(rowAggregator.get(0).props.expandable).toBeDefined();
});
});
});

View File

@ -4,7 +4,9 @@ import { shallow, mount } from 'enzyme';
import HeaderCell from '../src/header-cell';
import SelectionHeaderCell from '../src/row-selection/selection-header-cell';
import ExpandHeaderCell from '../src/row-expand/expand-header-cell';
import SelectionContext from '../src/contexts/selection-context';
import ExpansionContext from '../src/contexts/row-expand-context';
import Header from '../src/header';
import Const from '../src/const';
import mockHeaderResolvedProps from './test-helpers/mock/header-resolved-props';
@ -177,6 +179,7 @@ describe('Header', () => {
selectRow={ selectRow }
>
<Header
{ ...mockHeaderResolvedProps }
columns={ columns }
selectRow={ selectRow }
/>
@ -198,6 +201,7 @@ describe('Header', () => {
selectRow={ selectRow }
>
<Header
{ ...mockHeaderResolvedProps }
columns={ columns }
selectRow={ selectRow }
/>
@ -211,4 +215,44 @@ describe('Header', () => {
});
});
});
describe('expandRow', () => {
describe('when expandRow.showExpandColumn is false', () => {
beforeEach(() => {
wrapper = shallow(
<Header
{ ...mockHeaderResolvedProps }
columns={ columns }
/>
);
});
it('should not render <ExpandHeaderCell />', () => {
expect(wrapper.find(ExpandHeaderCell).length).toBe(0);
});
});
describe('when expandRow.showExpandColumn is true', () => {
beforeEach(() => {
const expandRow = { renderer: jest.fn(), expanded: [], showExpandColumn: true };
wrapper = mount(
<ExpansionContext.Provider
data={ data }
keyField={ keyField }
expandRow={ expandRow }
>
<Header
{ ...mockHeaderResolvedProps }
columns={ columns }
expandRow={ expandRow }
/>
</ExpansionContext.Provider>
);
});
it('should render <ExpandHeaderCell /> correctly', () => {
expect(wrapper.find(ExpandHeaderCell).length).toBe(1);
});
});
});
});

View File

@ -1,8 +1,12 @@
import 'jsdom-global/register';
import React from 'react';
import { mount } from 'enzyme';
import mockBodyResolvedProps from './test-helpers/mock/body-resolved-props';
import SelectionContext from '../src/contexts/selection-context';
import ExpansionContext from '../src/contexts/row-expand-context';
import bindSelection from '../src/row-selection/row-binder';
import bindExpansion from '../src/row-expand/row-binder';
import ExpandCell from '../src/row-expand/expand-cell';
import SelectionCell from '../src/row-selection/selection-cell';
import RowAggregator from '../src/row-aggregator';
import Row from '../src/row';
@ -11,6 +15,7 @@ describe('Row Aggregator', () => {
let wrapper;
let rowAggregator;
const RowAggregatorWithSelection = bindSelection(RowAggregator);
const RowAggregatorWithExpansion = bindExpansion(RowAggregator);
const data = [{
id: 1,
@ -37,16 +42,17 @@ describe('Row Aggregator', () => {
row,
columns,
keyField,
rowIndex
rowIndex,
...mockBodyResolvedProps
});
describe('when props.selectRow is defeind', () => {
describe('when selectRow is enable', () => {
describe('if props.selectRow.hideSelectColumn is false', () => {
beforeEach(() => {
const selectRow = { mode: 'radio' };
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } />
<RowAggregatorWithSelection { ...getBaseProps() } />
</SelectionContext.Provider>
);
});
@ -69,7 +75,7 @@ describe('Row Aggregator', () => {
const selectRow = { mode: 'radio', hideSelectColumn: true };
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } />
<RowAggregatorWithSelection { ...getBaseProps() } />
</SelectionContext.Provider>
);
});
@ -90,7 +96,7 @@ describe('Row Aggregator', () => {
const selectRow = { mode: 'radio', clickToSelect: true };
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } />
<RowAggregatorWithSelection { ...getBaseProps() } />
</SelectionContext.Provider>
);
});
@ -108,6 +114,51 @@ describe('Row Aggregator', () => {
});
});
describe('when expandRow is enable', () => {
describe('if props.expandRow.showExpandColumn is false', () => {
beforeEach(() => {
const expandRow = { renderer: jest.fn() };
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<RowAggregatorWithExpansion { ...getBaseProps() } />
</ExpansionContext.Provider>
);
});
it('should render RowAggregator correctly', () => {
rowAggregator = wrapper.find(RowAggregator);
expect(rowAggregator).toHaveLength(1);
});
it('should not render expansion column', () => {
const expandCell = wrapper.find(ExpandCell);
expect(expandCell).toHaveLength(0);
});
});
describe('if props.expandRow.showExpandColumn is true', () => {
beforeEach(() => {
const expandRow = { renderer: jest.fn(), showExpandColumn: true };
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<RowAggregatorWithExpansion { ...getBaseProps() } />
</ExpansionContext.Provider>
);
});
it('should render RowAggregator correctly', () => {
rowAggregator = wrapper.find(RowAggregator);
expect(rowAggregator).toHaveLength(1);
});
it('should render expansion column correctly', () => {
const expandCell = wrapper.find(ExpandCell);
expect(expandCell).toHaveLength(1);
expect(expandCell.props().expanded).toEqual(rowAggregator.props().expanded);
});
});
});
describe('createClickEventHandler', () => {
describe('if props.attrs.onClick is defined', () => {
const attrs = { onClick: jest.fn() };
@ -116,34 +167,111 @@ describe('Row Aggregator', () => {
const selectRow = { mode: 'radio' };
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } attrs={ attrs } />
<RowAggregatorWithSelection { ...getBaseProps() } attrs={ attrs } />
</SelectionContext.Provider>
);
wrapper.find('tr').simulate('click');
});
it('should add onClick prop to Row Component', () => {
it('should call attrs.onClick correctly', () => {
expect(attrs.onClick).toHaveBeenCalledTimes(1);
});
});
describe('if props.selectRow.clickToSelect is defined', () => {
describe('if props.selectRow.clickToSelect is true', () => {
const selectRow = { mode: 'radio', clickToSelect: true };
beforeEach(() => {
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } />
<RowAggregatorWithSelection { ...getBaseProps() } />
</SelectionContext.Provider>
);
wrapper.find(RowAggregator).props().selectRow.onRowSelect = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should add onClick prop to Row Component', () => {
it('should call selectRow.onRowSelect correctly', () => {
expect(wrapper.find(RowAggregator).props().selectRow.onRowSelect).toHaveBeenCalledTimes(1);
});
});
describe('if props.selectRow.clickToSelect is true', () => {
describe('but selectable props is false', () => {
const selectRow = { mode: 'radio', clickToSelect: true, nonSelectable: [row[keyField]] };
beforeEach(() => {
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } />
</SelectionContext.Provider>
);
wrapper.find(RowAggregator).props().selectRow.onRowSelect = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should call selectRow.onRowSelect correctly', () => {
expect(wrapper.find(RowAggregator).props().selectRow.onRowSelect)
.toHaveBeenCalledTimes(0);
});
});
});
describe('if props.expandRow.renderer is defined', () => {
describe('but expandable props is false', () => {
const expandRow = { renderer: jest.fn(), nonExpandable: [row[keyField]] };
beforeEach(() => {
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<RowAggregatorWithExpansion { ...getBaseProps() } />
</ExpansionContext.Provider>
);
wrapper.find(RowAggregator).props().expandRow.onRowExpand = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should call expandRow.onRowExpand correctly', () => {
expect(wrapper.find(RowAggregator).props().expandRow.onRowExpand)
.toHaveBeenCalledTimes(0);
});
});
});
describe('if props.expandRow.renderer is defined', () => {
const expandRow = { renderer: jest.fn() };
beforeEach(() => {
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<RowAggregatorWithExpansion { ...getBaseProps() } />
</ExpansionContext.Provider>
);
wrapper.find(RowAggregator).props().expandRow.onRowExpand = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should call expandRow.onRowExpand correctly', () => {
expect(wrapper.find(RowAggregator).props().expandRow.onRowExpand).toHaveBeenCalledTimes(1);
});
});
describe('if props.attrs.onClick and props.expandRow.renderer both are defined', () => {
const attrs = { onClick: jest.fn() };
const expandRow = { renderer: jest.fn() };
beforeEach(() => {
wrapper = mount(
<ExpansionContext.Provider data={ data } keyField={ keyField } expandRow={ expandRow }>
<RowAggregatorWithExpansion { ...getBaseProps() } attrs={ attrs } />
</ExpansionContext.Provider>
);
wrapper.find(RowAggregator).props().expandRow.onRowExpand = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should call attrs.onClick and expandRow.onRowExpand correctly', () => {
expect(attrs.onClick).toHaveBeenCalledTimes(1);
expect(wrapper.find(RowAggregator).props().expandRow.onRowExpand).toHaveBeenCalledTimes(1);
});
});
describe('if props.attrs.onClick and props.selectRow.clickToSelect both are defined', () => {
const attrs = { onClick: jest.fn() };
const selectRow = { mode: 'radio', clickToSelect: true };
@ -151,14 +279,14 @@ describe('Row Aggregator', () => {
beforeEach(() => {
wrapper = mount(
<SelectionContext.Provider data={ data } keyField={ keyField } selectRow={ selectRow }>
<RowAggregatorWithSelection { ...getBaseProps() } cellEdit={ {} } attrs={ attrs } />
<RowAggregatorWithSelection { ...getBaseProps() } attrs={ attrs } />
</SelectionContext.Provider>
);
wrapper.find(RowAggregator).props().selectRow.onRowSelect = jest.fn();
wrapper.find('tr').simulate('click');
});
it('should add onClick prop to Row Component', () => {
it('should call attrs.onClick and selectRow.onRowSelect correctly', () => {
expect(attrs.onClick).toHaveBeenCalledTimes(1);
expect(wrapper.find(RowAggregator).props().selectRow.onRowSelect).toHaveBeenCalledTimes(1);
});

View File

@ -3,7 +3,14 @@ import Const from '../../../src/const';
const { ROW_SELECT_DISABLED, UNABLE_TO_CELL_EDIT } = Const;
export const rowSelectionResolvedProps = {
mode: ROW_SELECT_DISABLED
mode: ROW_SELECT_DISABLED,
selected: [],
hideSelectColumn: true
};
export const expandRowResolvedProps = {
renderer: undefined,
expanded: []
};
export const cellEditResolvedProps = {
@ -12,5 +19,6 @@ export const cellEditResolvedProps = {
export default {
cellEdit: cellEditResolvedProps,
expandRow: expandRowResolvedProps,
selectRow: rowSelectionResolvedProps
};

View File

@ -3,9 +3,17 @@ import Const from '../../../src/const';
const { ROW_SELECT_DISABLED } = Const;
export const rowSelectionResolvedProps = {
mode: ROW_SELECT_DISABLED
mode: ROW_SELECT_DISABLED,
selected: [],
hideSelectColumn: true
};
export const expandRowResolvedProps = {
renderer: undefined,
expanded: []
};
export default {
selectRow: rowSelectionResolvedProps
selectRow: rowSelectionResolvedProps,
expandRow: expandRowResolvedProps
};