From 4b790e4bec16367248c7400c999efe3533ea67cb Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sat, 18 Aug 2018 17:50:58 +0800 Subject: [PATCH] patch test for refining expand row consumer --- .../react-bootstrap-table2/test/body.test.js | 41 ++++- .../test/header.test.js | 44 +++++ .../test/row-aggregator.test.js | 152 ++++++++++++++++-- .../test-helpers/mock/body-resolved-props.js | 10 +- .../mock/header-resolved-props.js | 12 +- 5 files changed, 239 insertions(+), 20 deletions(-) diff --git a/packages/react-bootstrap-table2/test/body.test.js b/packages/react-bootstrap-table2/test/body.test.js index 2be26b1..ba71bda 100644 --- a/packages/react-bootstrap-table2/test/body.test.js +++ b/packages/react-bootstrap-table2/test/body.test.js @@ -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( { ); }); - 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( + + + + ); + }); + + 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(); }); }); }); diff --git a/packages/react-bootstrap-table2/test/header.test.js b/packages/react-bootstrap-table2/test/header.test.js index b278988..ecb2318 100644 --- a/packages/react-bootstrap-table2/test/header.test.js +++ b/packages/react-bootstrap-table2/test/header.test.js @@ -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 } >
@@ -198,6 +201,7 @@ describe('Header', () => { selectRow={ selectRow } >
@@ -211,4 +215,44 @@ describe('Header', () => { }); }); }); + + describe('expandRow', () => { + describe('when expandRow.showExpandColumn is false', () => { + beforeEach(() => { + wrapper = shallow( +
+ ); + }); + + it('should not render ', () => { + expect(wrapper.find(ExpandHeaderCell).length).toBe(0); + }); + }); + + describe('when expandRow.showExpandColumn is true', () => { + beforeEach(() => { + const expandRow = { renderer: jest.fn(), expanded: [], showExpandColumn: true }; + wrapper = mount( + +
+ + ); + }); + + it('should render correctly', () => { + expect(wrapper.find(ExpandHeaderCell).length).toBe(1); + }); + }); + }); }); diff --git a/packages/react-bootstrap-table2/test/row-aggregator.test.js b/packages/react-bootstrap-table2/test/row-aggregator.test.js index f46d084..a98bc95 100644 --- a/packages/react-bootstrap-table2/test/row-aggregator.test.js +++ b/packages/react-bootstrap-table2/test/row-aggregator.test.js @@ -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( - + ); }); @@ -69,7 +75,7 @@ describe('Row Aggregator', () => { const selectRow = { mode: 'radio', hideSelectColumn: true }; wrapper = mount( - + ); }); @@ -90,7 +96,7 @@ describe('Row Aggregator', () => { const selectRow = { mode: 'radio', clickToSelect: true }; wrapper = mount( - + ); }); @@ -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( + + + + ); + }); + + 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( + + + + ); + }); + + 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( - + ); 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( - + ); 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( + + + + ); + 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( + + + + ); + 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( + + + + ); + 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( + + + + ); + 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( - + ); 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); }); diff --git a/packages/react-bootstrap-table2/test/test-helpers/mock/body-resolved-props.js b/packages/react-bootstrap-table2/test/test-helpers/mock/body-resolved-props.js index 0eafb00..4d1d6eb 100644 --- a/packages/react-bootstrap-table2/test/test-helpers/mock/body-resolved-props.js +++ b/packages/react-bootstrap-table2/test/test-helpers/mock/body-resolved-props.js @@ -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 }; diff --git a/packages/react-bootstrap-table2/test/test-helpers/mock/header-resolved-props.js b/packages/react-bootstrap-table2/test/test-helpers/mock/header-resolved-props.js index bcc8a2b..1b3ca1b 100644 --- a/packages/react-bootstrap-table2/test/test-helpers/mock/header-resolved-props.js +++ b/packages/react-bootstrap-table2/test/test-helpers/mock/header-resolved-props.js @@ -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 };