2019-09-08 13:36:39 +00:00
|
|
|
import React from 'react';
|
2019-11-01 09:27:07 +00:00
|
|
|
import { mount, shallow } from 'enzyme';
|
2019-09-09 13:11:10 +00:00
|
|
|
import GroupButtonsMenu from '.';
|
|
|
|
import DropDownItem from '../drop-down-item';
|
2019-09-08 13:36:39 +00:00
|
|
|
|
2020-01-30 13:21:56 +00:00
|
|
|
beforeEach(() => {
|
|
|
|
const div = document.createElement('div');
|
|
|
|
div.setAttribute('id', 'container');
|
|
|
|
document.body.appendChild(div);
|
|
|
|
});
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
const div = document.getElementById('container');
|
|
|
|
if (div) {
|
|
|
|
document.body.removeChild(div);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-11-01 09:27:07 +00:00
|
|
|
const defaultMenuItems = [
|
|
|
|
{
|
|
|
|
label: 'Select',
|
|
|
|
isDropdown: true,
|
|
|
|
isSeparator: true,
|
|
|
|
isSelect: true,
|
|
|
|
fontWeight: 'bold',
|
|
|
|
children: [
|
|
|
|
<DropDownItem key='aaa' label='aaa' />,
|
|
|
|
<DropDownItem key='bbb' label='bbb' />,
|
|
|
|
<DropDownItem key='ccc' label='ccc' />,
|
|
|
|
],
|
|
|
|
onSelect: () => { }
|
|
|
|
},
|
|
|
|
{
|
|
|
|
label: 'Menu item 1',
|
|
|
|
disabled: false,
|
|
|
|
onClick: () => { }
|
|
|
|
},
|
|
|
|
{
|
|
|
|
label: 'Menu item 2',
|
|
|
|
disabled: true,
|
|
|
|
onClick: () => { }
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
2020-01-30 13:21:56 +00:00
|
|
|
const getMenuItems = (count = 10) => new Array(count).fill(
|
|
|
|
{
|
|
|
|
label: 'test item',
|
|
|
|
disabled: false,
|
|
|
|
onClick: jest.fn()
|
|
|
|
});
|
|
|
|
|
2019-11-01 09:27:07 +00:00
|
|
|
const baseProps = {
|
|
|
|
checked: false,
|
|
|
|
menuItems: defaultMenuItems,
|
|
|
|
visible: true,
|
|
|
|
moreLabel: 'More',
|
|
|
|
closeTitle: 'Close'
|
|
|
|
}
|
|
|
|
|
2019-09-08 13:36:39 +00:00
|
|
|
describe('<GroupButtonsMenu />', () => {
|
2019-11-01 09:27:07 +00:00
|
|
|
it('renders without error', () => {
|
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
|
|
|
|
|
|
|
expect(wrapper).toExist();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('applies checked prop', () => {
|
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} checked={true} />);
|
|
|
|
|
|
|
|
expect(wrapper.prop('checked')).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('applies visible prop', () => {
|
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} visible={true} />);
|
|
|
|
|
|
|
|
expect(wrapper.prop('visible')).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('causes function closeMenu()', () => {
|
|
|
|
const onClose = jest.fn();
|
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} onClose={onClose} />);
|
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
|
|
|
instance.closeMenu(new Event('click'));
|
|
|
|
|
|
|
|
expect(wrapper.state('visible')).toBe(false);
|
|
|
|
expect(onClose).toBeCalled();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('causes function groupButtonClick()', () => {
|
|
|
|
const onClick = jest.fn();
|
|
|
|
const item = {
|
|
|
|
label: 'Menu item 1',
|
|
|
|
disabled: false,
|
2020-08-11 08:03:29 +00:00
|
|
|
onClick
|
2019-11-01 09:27:07 +00:00
|
|
|
};
|
2020-08-11 08:03:29 +00:00
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} menuItems={[item]}/>);
|
2019-11-01 09:27:07 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-08-11 08:03:29 +00:00
|
|
|
instance.groupButtonClick({
|
|
|
|
currentTarget: {
|
|
|
|
dataset: {
|
|
|
|
index: 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2019-11-01 09:27:07 +00:00
|
|
|
|
2020-08-11 08:03:29 +00:00
|
|
|
expect(wrapper.state('visible')).toBe(true);
|
2019-11-01 09:27:07 +00:00
|
|
|
expect(onClick).toBeCalled();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('causes function countMenuItems()', () => {
|
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-01-30 13:21:56 +00:00
|
|
|
instance.countMenuItems(null, 2, 1);
|
2019-11-01 09:27:07 +00:00
|
|
|
instance.countMenuItems([], 2, 1);
|
|
|
|
instance.countMenuItems([1, 2], 200, 2);
|
2020-01-30 13:21:56 +00:00
|
|
|
instance.countMenuItems([1, 2, 3, 4, 5], 10, 100);
|
|
|
|
instance.countMenuItems([1, 2, 3, 4], 1, 2);
|
2019-11-01 09:27:07 +00:00
|
|
|
|
|
|
|
expect(wrapper.state('visible')).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('causes function groupButtonClick() if disabled', () => {
|
|
|
|
const onClick = jest.fn();
|
|
|
|
const item = {
|
|
|
|
label: 'Menu item 1',
|
|
|
|
disabled: true,
|
2020-08-11 08:03:29 +00:00
|
|
|
onClick
|
2019-11-01 09:27:07 +00:00
|
|
|
};
|
2020-08-11 08:03:29 +00:00
|
|
|
const wrapper = mount(<GroupButtonsMenu {...baseProps} menuItems={[item]} />);
|
2019-11-01 09:27:07 +00:00
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-08-11 08:03:29 +00:00
|
|
|
instance.groupButtonClick({
|
|
|
|
currentTarget: {
|
|
|
|
dataset: {
|
|
|
|
index: 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2019-11-01 09:27:07 +00:00
|
|
|
|
|
|
|
expect(wrapper.state('visible')).toBe(true);
|
|
|
|
expect(onClick).toBeCalledTimes(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('componentDidUpdate() props lifecycle test', () => {
|
|
|
|
const wrapper = shallow(<GroupButtonsMenu {...baseProps} visible={false} />);
|
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
2020-01-30 13:21:56 +00:00
|
|
|
instance.componentDidUpdate({ visible: true, menuItems: getMenuItems(3) }, wrapper.state());
|
2019-11-01 09:27:07 +00:00
|
|
|
|
|
|
|
expect(wrapper.props()).toBe(wrapper.props());
|
|
|
|
});
|
|
|
|
|
|
|
|
it('componentWillUnmount() props lifecycle test', () => {
|
|
|
|
const wrapper = shallow(<GroupButtonsMenu {...baseProps} />);
|
|
|
|
const instance = wrapper.instance();
|
|
|
|
|
|
|
|
instance.componentWillUnmount();
|
|
|
|
|
|
|
|
expect(wrapper).toExist(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('filled state moreItems', () => {
|
|
|
|
const wrapper = shallow(<GroupButtonsMenu {...baseProps} />);
|
|
|
|
|
|
|
|
wrapper.setState({
|
|
|
|
moreItems: [{
|
|
|
|
label: 'Menu item 1',
|
|
|
|
disabled: false,
|
|
|
|
onClick: jest.fn()
|
|
|
|
}]
|
2019-09-08 13:36:39 +00:00
|
|
|
});
|
2019-11-01 09:27:07 +00:00
|
|
|
|
|
|
|
expect(wrapper).toExist(false);
|
|
|
|
});
|
|
|
|
|
2020-01-30 13:21:56 +00:00
|
|
|
it('render with 100% width', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '100%' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('100%');
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(3);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
it('render with 1024px width and 3 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '1024px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('1024px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(3);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(3);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
it('render with 1024px width and 10 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '1024px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} menuItems={getMenuItems(10)} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('1024px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(10);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(10);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
it('render with 1024px width and 100 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '1024px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} menuItems={getMenuItems(100)} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('1024px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(100);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(100);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
it('render with 500px width and 3 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '500px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('500px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(3);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(3);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
it('render with 500px width and 10 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '500px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} menuItems={getMenuItems(10)} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('500px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(10);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(10);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
it('render with 500px width and 100 items', () => {
|
|
|
|
const wrapper = mount(
|
|
|
|
<div style={{ width: '500px' }}>
|
|
|
|
<GroupButtonsMenu {...baseProps} menuItems={getMenuItems(100)} />
|
|
|
|
</div>, { attachTo: document.getElementById('container') });
|
|
|
|
|
|
|
|
const menuNodeStyle = wrapper.get(0).props.style;
|
|
|
|
const menuNode = wrapper.find(GroupButtonsMenu).instance();
|
|
|
|
|
|
|
|
const moreItemsCount = menuNode.state.moreItems.length;
|
|
|
|
const priorityItemsCount = menuNode.state.priorityItems.length;
|
|
|
|
|
|
|
|
expect(menuNodeStyle.width).toEqual('500px');
|
|
|
|
expect(menuNode.props.menuItems.length).toEqual(100);
|
2020-08-18 11:46:00 +00:00
|
|
|
expect(priorityItemsCount).toEqual(100);
|
|
|
|
expect(moreItemsCount).toEqual(0);
|
2020-01-30 13:21:56 +00:00
|
|
|
})
|
|
|
|
|
2019-09-08 13:36:39 +00:00
|
|
|
});
|