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
};