From 79a81e87a5a0db9101134bad5dca950e6f5fe0c3 Mon Sep 17 00:00:00 2001 From: chunming Date: Sun, 5 Nov 2017 03:37:30 -0600 Subject: [PATCH] Bugfix/row selection (#131) * bugfix for missing radio button when single selection * [test] correct and group the test for row selection * re-order for better position --- packages/react-bootstrap-table2/src/header.js | 4 +- packages/react-bootstrap-table2/src/row.js | 2 +- .../test/header.test.js | 99 ++++--- .../react-bootstrap-table2/test/row.test.js | 268 +++++++++++------- 4 files changed, 220 insertions(+), 153 deletions(-) diff --git a/packages/react-bootstrap-table2/src/header.js b/packages/react-bootstrap-table2/src/header.js index 9c89ac8..e301eb0 100644 --- a/packages/react-bootstrap-table2/src/header.js +++ b/packages/react-bootstrap-table2/src/header.js @@ -7,7 +7,7 @@ import HeaderCell from './header-cell'; import SelectionHeaderCell from './row-selection/selection-header-cell'; const Header = (props) => { - const { ROW_SELECT_MULTIPLE } = Const; + const { ROW_SELECT_DISABLED } = Const; const { columns, @@ -21,7 +21,7 @@ const Header = (props) => { { - (selectRow.mode === ROW_SELECT_MULTIPLE && !selectRow.hideSelectColumn) + (selectRow.mode !== ROW_SELECT_DISABLED && !selectRow.hideSelectColumn) ? : null } { diff --git a/packages/react-bootstrap-table2/src/row.js b/packages/react-bootstrap-table2/src/row.js index a39d965..b1dea9c 100644 --- a/packages/react-bootstrap-table2/src/row.js +++ b/packages/react-bootstrap-table2/src/row.js @@ -88,7 +88,7 @@ class Row extends Component { return ( { - (selectRow.mode === Const.ROW_SELECT_MULTIPLE && !hideSelectColumn) + (selectRow.mode !== Const.ROW_SELECT_DISABLED && !hideSelectColumn) ? ( { }); }); - describe('when the selectRow.mode is radio(single selection)', () => { - beforeEach(() => { - const selectRow = { mode: 'radio' }; - wrapper = shallow( -
- ); - }); - - it('should not render ', () => { - expect(wrapper.find(SelectionHeaderCell).length).toBe(0); - }); - - describe('when selectRow.hideSelectColumn is true', () => { + describe('selectRow', () => { + describe('when selectRow.mode is ROW_SELECT_DISABLED (row is not able to select)', () => { beforeEach(() => { - const selectRow = { mode: 'radio', hideSelectColumn: true }; + wrapper = shallow( +
+ ); + }); + + it('should not render ', () => { + expect(wrapper.find(SelectionHeaderCell).length).toBe(0); + }); + }); + + describe('when selectRow.mode is radio (single selection)', () => { + beforeEach(() => { + const selectRow = { mode: 'radio' }; wrapper = shallow(
{ ); }); - it('should rendering header with selection column', () => { - expect(wrapper.find(SelectionHeaderCell).length).toBe(0); + it('should render ', () => { + expect(wrapper.find(SelectionHeaderCell).length).toBe(1); + }); + + describe('when selectRow.hideSelectColumn is true', () => { + beforeEach(() => { + const selectRow = { mode: 'radio', hideSelectColumn: true }; + wrapper = shallow( +
+ ); + }); + + it('should not render ', () => { + expect(wrapper.find(SelectionHeaderCell).length).toBe(0); + }); }); }); - }); - describe('when the selectRow.mode is checkbox(multiple selection)', () => { - beforeEach(() => { - const selectRow = { mode: 'checkbox' }; - wrapper = shallow( -
- ); - }); - - it('should render ', () => { - expect(wrapper.find(SelectionHeaderCell).length).toBe(1); - }); - - describe('when selectRow.hideSelectColumn is true', () => { + describe('when selectRow.mode is checkbox (multiple selection)', () => { beforeEach(() => { - const selectRow = { mode: 'checkbox', hideSelectColumn: true }; + const selectRow = { mode: 'checkbox' }; wrapper = shallow(
{ ); }); - it('should rendering header with selection column', () => { - expect(wrapper.find(SelectionHeaderCell).length).toBe(0); + it('should render ', () => { + expect(wrapper.find(SelectionHeaderCell).length).toBe(1); + }); + + describe('when selectRow.hideSelectColumn is true', () => { + beforeEach(() => { + const selectRow = { mode: 'checkbox', hideSelectColumn: true }; + wrapper = shallow( +
+ ); + }); + + it('should not render ', () => { + expect(wrapper.find(SelectionHeaderCell).length).toBe(0); + }); }); }); }); diff --git a/packages/react-bootstrap-table2/test/row.test.js b/packages/react-bootstrap-table2/test/row.test.js index de8f5c5..11ccdd6 100644 --- a/packages/react-bootstrap-table2/test/row.test.js +++ b/packages/react-bootstrap-table2/test/row.test.js @@ -463,50 +463,11 @@ describe('Row', () => { }); }); - describe('when selectRow.mode is ROW_SELECT_DISABLED (row was un-selectable)', () => { - beforeEach(() => { - wrapper = shallow( - - ); - }); - it('should not render SelectionCell component', () => { - expect(wrapper.find(SelectionCell).length).toBe(0); - }); - }); - - describe('when selectRow.mode is checkbox or radio (row was selectable)', () => { + describe('selectRow', () => { let selectRow; - beforeEach(() => { - selectRow = { mode: 'checkbox' }; - wrapper = shallow( - ); - }); - it('should rendering SelectionCell component correctly', () => { - expect(wrapper.find(SelectionCell).length).toBe(1); - }); - - it('should render SelectionCell component with correct props', () => { - expect(wrapper.find(SelectionCell).props().selected).toBeTruthy(); - expect(wrapper.find(SelectionCell).props().disabled).toBeFalsy(); - expect(wrapper.find(SelectionCell).props().mode).toEqual(selectRow.mode); - }); - - describe('if selectable prop is false', () => { + describe('when selectRow.mode is ROW_SELECT_DISABLED (row is not able to select)', () => { beforeEach(() => { wrapper = shallow( { rowIndex={ rowIndex } columns={ defaultColumns } row={ row } - keyField={ keyField } - selectRow={ selectRow } - selectable={ false } - />); + /> + ); }); - it('should render SelectionCell component with correct disable prop correctly', () => { - expect(wrapper.find(SelectionCell).length).toBe(1); - expect(wrapper.find(SelectionCell).prop('disabled')).toBeTruthy(); - }); - }); - - describe('if selectable prop is true', () => { - beforeEach(() => { - wrapper = shallow( - ); - }); - - it('should render SelectionCell component with correct disable prop correctly', () => { - expect(wrapper.find(SelectionCell).length).toBe(1); - expect(wrapper.find(SelectionCell).prop('disabled')).toBeFalsy(); - }); - }); - - describe('if selectRow.clickToSelect is true', () => { - beforeEach(() => { - selectRow.clickToSelect = true; - wrapper = shallow( - ); - }); - - it('should render Row component successfully with onClick event', () => { - expect(wrapper.length).toBe(1); - expect(wrapper.find('tr').prop('onClick')).toBeDefined(); - }); - }); - - describe('if selectRow.hideSelectColumn is true', () => { - beforeEach(() => { - selectRow.hideSelectColumn = true; - wrapper = shallow( - ); - }); - - it('should render Row component without selection column', () => { - expect(wrapper.length).toBe(1); + it('should not render ', () => { expect(wrapper.find(SelectionCell).length).toBe(0); }); }); + + describe('when selectRow.mode was defined (single or multiple selection)', () => { + describe('if selectRow.mode is radio (single selection)', () => { + beforeEach(() => { + selectRow = { mode: 'radio' }; + wrapper = shallow( + ); + }); + + it('should render ', () => { + expect(wrapper.find(SelectionCell).length).toBe(1); + }); + + it('should render with correct props', () => { + expect(wrapper.find(SelectionCell).props().selected).toBeTruthy(); + expect(wrapper.find(SelectionCell).props().disabled).toBeFalsy(); + expect(wrapper.find(SelectionCell).props().mode).toEqual(selectRow.mode); + }); + + describe('when selectRow.hideSelectColumn is true', () => { + beforeEach(() => { + selectRow = { mode: 'radio', hideSelectColumn: true }; + wrapper = shallow( + ); + }); + + it('should not render ', () => { + expect(wrapper.find(SelectionCell).length).toBe(0); + }); + }); + }); + + describe('if selectRow.mode is checkbox (multiple selection)', () => { + beforeEach(() => { + selectRow = { mode: 'checkbox' }; + wrapper = shallow( + ); + }); + + it('should render ', () => { + expect(wrapper.find(SelectionCell).length).toBe(1); + }); + + it('should render with correct props', () => { + expect(wrapper.find(SelectionCell).props().selected).toBeTruthy(); + expect(wrapper.find(SelectionCell).props().disabled).toBeFalsy(); + expect(wrapper.find(SelectionCell).props().mode).toEqual(selectRow.mode); + }); + + describe('when selectRow.hideSelectColumn is true', () => { + beforeEach(() => { + selectRow = { mode: 'checkbox', hideSelectColumn: true }; + wrapper = shallow( + ); + }); + + it('should not render ', () => { + expect(wrapper.find(SelectionCell).length).toBe(0); + }); + }); + }); + + describe('if selectable prop is false', () => { + beforeEach(() => { + selectRow = { mode: 'checkbox' }; + wrapper = shallow( + ); + }); + + it('should render SelectionCell component with correct disable prop correctly', () => { + expect(wrapper.find(SelectionCell).length).toBe(1); + expect(wrapper.find(SelectionCell).prop('disabled')).toBeTruthy(); + }); + }); + + describe('if selectable prop is true', () => { + beforeEach(() => { + selectRow = { mode: 'checkbox' }; + wrapper = shallow( + ); + }); + + it('should render SelectionCell component with correct disable prop correctly', () => { + expect(wrapper.find(SelectionCell).length).toBe(1); + expect(wrapper.find(SelectionCell).prop('disabled')).toBeFalsy(); + }); + }); + + describe('if selectRow.clickToSelect is true', () => { + beforeEach(() => { + selectRow = { mode: 'checkbox' }; + selectRow.clickToSelect = true; + wrapper = shallow( + ); + }); + + it('should render Row component successfully with onClick event', () => { + expect(wrapper.length).toBe(1); + expect(wrapper.find('tr').prop('onClick')).toBeDefined(); + }); + }); + }); }); describe('handleRowClick', () => {