import React from 'react'; import { mount, render } from 'enzyme'; import faker from 'faker'; import { BreakpointWidth } from 'src/global/globalConfig'; import StandardAppLayout from './StandardAppLayout'; const MainContent = () => (
This is main content
); const SidebarContent = () => (
This is sidebar content
); const TopbarContent = () => (
This is topbar content
); const SidebarToolstripContent = () => (
This is topbar content
); const DrawerContent = () => (
This is drawer content
); const SidebarNavigation = () => (
This is sidebar navigation
); const sidebarNavigationLinks = [...Array(3)].map(() => ({ label: faker.random.word(), isActive: false })); const activeSidebarNavLinkIndex = Math.floor( Math.random() * sidebarNavigationLinks.length ); sidebarNavigationLinks[activeSidebarNavLinkIndex].isActive = true; const minimalProps = { mainContent: , sidebarContent: , sidebarToolstripContent: , topbarContent: , isSidebarOpen: true, sidebarNavigation: , onSidebarToggle: jest.fn(), viewportWidth: BreakpointWidth.DESKTOP }; describe('StandardAppLayout', () => { afterEach(() => { jest.resetAllMocks(); }); describe('rendering', () => { it('renders the main content in the main section', () => { const wrapper = render(); expect(wrapper.find('.main').find('.mainContent').length).toBe(1); }); it('renders the top bar content in the top bar', () => { const wrapper = render(); expect(wrapper.find('.topBar').find('.topbarContent').length).toBe(1); }); it('renders the sidebar content in the sidebar', () => { const wrapper = render(); expect(wrapper.find('.sideBar').find('.sidebarContent').length).toBe(1); }); it('renders sidebar navigation in appropriate slot', () => { const wrapper = render(); expect(wrapper.find('.topBar').find('.sidebarNavigation').length).toBe(1); }); it('renders sidebar toolstrip content in the sidebar toolstrip', () => { const wrapper = render(); expect( wrapper.find('.sideBarToolstripContent').find('.toolstripContent') .length ).toBe(1); }); describe('with drawer', () => { const props = { ...minimalProps, isDrawerOpen: false, drawerContent: , onDrawerClose: jest.fn() }; it('renders drawer content in the drawer', () => { const wrapper = render(); expect(wrapper.find('.drawer').find('.drawerContent').length).toBe(1); }); it('applies correct classes to the sidebar/drawer wrapper', () => { let wrapper, sidebarWrapper; const closedSidebarProps = { ...props, isSidebarOpen: false }; wrapper = render(); sidebarWrapper = wrapper.find('.sideBarWrapper'); expect(sidebarWrapper.hasClass('sideBarWrapperOpen')).toBe(false); expect(sidebarWrapper.hasClass('sideBarWrapperClosed')).toBe(true); expect(sidebarWrapper.hasClass('sideBarWrapperDrawerOpen')).toBe(false); const openSidebarProps = props; wrapper = render(); sidebarWrapper = wrapper.find('.sideBarWrapper'); expect(sidebarWrapper.hasClass('sideBarWrapperOpen')).toBe(true); expect(sidebarWrapper.hasClass('sideBarWrapperClosed')).toBe(false); expect(sidebarWrapper.hasClass('sideBarWrapperDrawerOpen')).toBe(false); const openDrawerProps = { ...props, isDrawerOpen: true }; wrapper = render(); sidebarWrapper = wrapper.find('.sideBarWrapper'); expect(sidebarWrapper.hasClass('sideBarWrapperOpen')).toBe(true); expect(sidebarWrapper.hasClass('sideBarWrapperClosed')).toBe(false); expect(sidebarWrapper.hasClass('sideBarWrapperDrawerOpen')).toBe(true); }); }); }); describe('behaviour', () => { const commonProps = { ...minimalProps, isDrawerOpen: false, drawerContent: , onDrawerClose: jest.fn() }; describe('sidebar navigation tabs when sidebar is closed', () => { const props = { ...commonProps, isSidebarOpen: false }; test('sidebar navigation tabs are rendered for desktop viewport and larger', () => { const wrapper = mount(); expect(wrapper.find('.sidebarNavigation').length).toBe(1); }); test('sidebar navigation tabs are not rendered for laptop viewport and smaller', () => { const wrapper = mount( ); expect(wrapper.find('.sidebarNavigation').length).toBe(0); }); }); describe('with closed drawer', () => { const props = commonProps; it('calls onSidebarToggle when sidebar toggle button is clicked', () => { const wrapper = mount(); wrapper.find('.sidebarModeToggleChevron').simulate('click'); expect(props.onSidebarToggle).toHaveBeenCalledTimes(1); // do the same for closed sidebar wrapper.setProps({ isSidebarOpen: false }); wrapper.find('.sidebarModeToggleChevron').simulate('click'); expect(props.onSidebarToggle).toHaveBeenCalledTimes(2); expect(props.onDrawerClose).not.toHaveBeenCalled(); }); }); describe('with open drawer', () => { const props = { ...commonProps, isDrawerOpen: true }; it('closes drawer when sidebar toggle button is clicked', () => { const wrapper = mount(); wrapper.find('.sidebarModeToggleChevron').simulate('click'); expect(props.onDrawerClose).toHaveBeenCalledTimes(1); expect(props.onSidebarToggle).not.toHaveBeenCalled(); }); it('closes drawer when drawer close button is clicked', () => { const wrapper = mount(); wrapper.find('.drawerClose').simulate('click'); expect(props.onDrawerClose).toHaveBeenCalledTimes(1); }); it('closes drawer when drawer’s transparent window is clicked', () => { const wrapper = mount(); wrapper.find('.drawerWindow').simulate('click'); expect(props.onDrawerClose).toHaveBeenCalledTimes(1); }); }); }); });