wix-style-react
Version:
228 lines (204 loc) • 7.96 kB
JavaScript
import React from 'react';
import Sidebar from '../Sidebar';
import WixStyleReactProvider from '../../WixStyleReactProvider';
import { mount } from 'enzyme';
describe('Sidebar.SidebarItem', () => {
describe.each([true, false])(
'Sidebar with collapsible inner menu : %p',
sidebarExperimentCollapsible => {
describe('Sidebar.Item', () => {
it('should render top level Sidebar.Item', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible,
}}
>
<Sidebar>
<Sidebar.Item itemKey={'item1'}>
<div data-hook="simple">123</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
const el1 = sidebar.find(`[data-hook="simple"]`);
expect(el1.text()).toEqual('123');
});
it('should not render second level items until navigate', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible,
}}
>
<Sidebar>
<Sidebar.Item
itemKey={'item1'}
innerMenu={[
<Sidebar.Item itemKey={'item2'}>
<div data-hook="simple2">456</div>
</Sidebar.Item>,
<Sidebar.Item itemKey={'item3'}>
<div data-hook="simple2">789</div>
</Sidebar.Item>,
<Sidebar.Item itemKey={'item4'}>
<div data-hook="simple2">000</div>
</Sidebar.Item>,
]}
>
<div data-hook="simple1">123</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
const el1 = sidebar.find(`[data-hook="simple1"]`);
expect(el1.text()).toEqual('123');
let el = sidebar.find(`[data-hook="simple2"]`);
expect(el.exists()).toBe(false);
el = sidebar.find(`[data-hook="simple3"]`);
expect(el.exists()).toBe(false);
el = sidebar.find(`[data-hook="simple4"]`);
expect(el.exists()).toBe(false);
});
it('should render second level items once navigate', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible,
}}
>
<Sidebar selectedKey={'item2'}>
<Sidebar.Item
itemKey={'item1'}
innerMenu={[
<Sidebar.Item key={'item2'} itemKey={'item2'}>
<div data-hook="simple2">456</div>
</Sidebar.Item>,
<Sidebar.Item key={'item3'} itemKey={'item3'}>
<div data-hook="simple3">789</div>
</Sidebar.Item>,
<Sidebar.Item key={'item4'} itemKey={'item4'}>
<div data-hook="simple4">000</div>
</Sidebar.Item>,
]}
>
<div data-hook="simple1">123</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
let el = sidebar.find(`[data-hook="simple2"]`);
expect(el.text()).toEqual('456');
el = sidebar.find(`[data-hook="simple3"]`);
expect(el.text()).toEqual('789');
el = sidebar.find(`[data-hook="simple4"]`);
expect(el.text()).toEqual('000');
});
it('should render and not throw if all innerMenu items are disabled', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible,
}}
>
<Sidebar selectedKey={'item2'}>
<Sidebar.Item
itemKey={'item1'}
innerMenu={[
<Sidebar.Item key={'item2'} itemKey={'item2'} disable>
<div data-hook="simple2">456</div>
</Sidebar.Item>,
<Sidebar.Item key={'item3'} itemKey={'item3'} disable>
<div data-hook="simple3">789</div>
</Sidebar.Item>,
<Sidebar.Item key={'item4'} itemKey={'item4'} disable>
<div data-hook="simple4">000</div>
</Sidebar.Item>,
]}
>
<div data-hook="simple1">123</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
let el = sidebar.find(`[data-hook="simple2"]`);
expect(el.text()).toEqual('456');
el = sidebar.find(`[data-hook="simple3"]`);
expect(el.text()).toEqual('789');
el = sidebar.find(`[data-hook="simple4"]`);
expect(el.text()).toEqual('000');
});
it('should navigate on click when innerMenu', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible,
}}
>
<Sidebar selectedKey={'last-item'}>
<Sidebar.Item
itemKey={'item1'}
innerMenu={[
<Sidebar.Item key={'item2'} itemKey={'item2'}>
<div data-hook="simple2">456</div>
</Sidebar.Item>,
<Sidebar.Item key={'item3'} itemKey={'item3'}>
<div data-hook="simple3">789</div>
</Sidebar.Item>,
<Sidebar.Item key={'item4'} itemKey={'item4'}>
<div data-hook="simple4">000</div>
</Sidebar.Item>,
]}
>
<div data-hook="simple1">123</div>
</Sidebar.Item>
<Sidebar.Item
key={'last-item'}
itemKey={'last-item'}
dataHook="last-item"
>
<div>Last</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
let subMenuChildren = sidebar.find(
`[data-hook="driven-in-children"]`,
);
expect(subMenuChildren.exists()).toBe(false);
const itemEl = sidebar.find(`[data-hook="simple1"]`);
itemEl.simulate('click');
subMenuChildren = sidebar.find(`[data-hook="driven-in-children"]`);
expect(subMenuChildren.exists()).toBe(true);
let subItemEl = sidebar.find(`[data-hook="simple2"]`);
expect(subItemEl.text()).toEqual('456');
subItemEl = sidebar.find(`[data-hook="simple3"]`);
expect(subItemEl.text()).toEqual('789');
subItemEl = sidebar.find(`[data-hook="simple4"]`);
expect(subItemEl.text()).toEqual('000');
});
});
},
);
describe('sliding inner menu', () => {
it('should not dummy navigate when no innerMenu', () => {
const sidebar = mount(
<WixStyleReactProvider
features={{
sidebarExperimentCollapsible: false,
}}
>
<Sidebar selectedKey={'item1'}>
<Sidebar.Item itemKey={'item1'}>
<div data-hook="simple1">123</div>
</Sidebar.Item>
</Sidebar>
</WixStyleReactProvider>,
);
const itemEl = sidebar.find(`[data-hook="simple1"]`);
itemEl.simulate('click');
const subMenuChildren = sidebar.find(`[data-hook="driven-in-children"]`);
expect(subMenuChildren.exists()).toBe(false);
});
});
});