UNPKG

box-ui-elements-test

Version:
187 lines (165 loc) 8.29 kB
import React from 'react'; import { mount } from 'enzyme/build'; import { MemoryRouter } from 'react-router-dom'; import { FEED_ITEM_TYPE_ANNOTATION, FEED_ITEM_TYPE_COMMENT, FEED_ITEM_TYPE_TASK } from '../../../constants'; import { SidebarPanelsComponent as SidebarPanels } from '../SidebarPanels'; // mock lazy imports jest.mock('../SidebarUtils'); describe('elements/content-sidebar/SidebarPanels', () => { const getWrapper = ({ path = '/', ...rest } = {}) => mount( <SidebarPanels file={{ id: '1234' }} hasActivity hasDetails hasMetadata hasSkills hasVersions isOpen {...rest} />, { wrappingComponent: MemoryRouter, wrappingComponentProps: { initialEntries: [path], keyLength: 0, }, }, ); describe('render', () => { test.each` path | sidebar ${'/activity'} | ${'ActivitySidebar'} ${'/activity/comments'} | ${'ActivitySidebar'} ${'/activity/comments/1234'} | ${'ActivitySidebar'} ${'/activity/tasks'} | ${'ActivitySidebar'} ${'/activity/tasks/1234'} | ${'ActivitySidebar'} ${'/activity/annotations/1234/5678'} | ${'ActivitySidebar'} ${'/activity/annotations/1234'} | ${'ActivitySidebar'} ${'/activity/versions'} | ${'VersionsSidebar'} ${'/activity/versions/1234'} | ${'VersionsSidebar'} ${'/details'} | ${'DetailsSidebar'} ${'/details/versions'} | ${'VersionsSidebar'} ${'/details/versions/1234'} | ${'VersionsSidebar'} ${'/metadata'} | ${'MetadataSidebar'} ${'/skills'} | ${'SkillsSidebar'} ${'/nonsense'} | ${'SkillsSidebar'} ${'/'} | ${'SkillsSidebar'} `('should render $sidebar given the path $path', ({ path, sidebar }) => { const wrapper = getWrapper({ path }); expect(wrapper.exists(sidebar)).toBe(true); }); test('should render nothing if the sidebar is closed', () => { const wrapper = getWrapper({ isOpen: false, }); expect(wrapper.isEmptyRender()).toBe(true); }); test('should render nothing if all sidebars are disabled', () => { const wrapper = getWrapper({ hasActivity: false, hasDetails: false, hasMetadata: false, hasSkills: false, hasVersions: false, }); expect(wrapper.isEmptyRender()).toBe(true); }); describe('activity sidebar', () => { test('should render with tasks deeplink', () => { const wrapper = getWrapper({ path: '/activity/tasks/12345' }); expect(wrapper.find('ActivitySidebar').props()).toMatchObject({ activeFeedEntryType: FEED_ITEM_TYPE_TASK, activeFeedEntryId: '12345', }); }); test('should render with comments deeplink', () => { const wrapper = getWrapper({ path: '/activity/comments/12345' }); expect(wrapper.find('ActivitySidebar').props()).toMatchObject({ activeFeedEntryType: FEED_ITEM_TYPE_COMMENT, activeFeedEntryId: '12345', }); }); test('should render with versions deeplink', () => { const wrapper = getWrapper({ path: '/activity/versions/12345' }); expect(wrapper.find('VersionsSidebar').props()).toMatchObject({ versionId: '12345', }); }); test('should render with annotations deeplink', () => { const wrapper = getWrapper({ path: '/activity/annotations/12345/67890' }); expect(wrapper.find('ActivitySidebar').props()).toMatchObject({ activeFeedEntryType: FEED_ITEM_TYPE_ANNOTATION, activeFeedEntryId: '67890', }); }); test('should not pass down activeFeedEntry props with partial annotations deeplink', () => { const wrapper = getWrapper({ path: '/activity/annotations/12345' }); expect(wrapper.find('ActivitySidebar').props()).toMatchObject({ activeFeedEntryType: undefined, activeFeedEntryId: undefined, }); }); }); describe('details sidebar', () => { test('should render with versions deeplink', () => { const wrapper = getWrapper({ path: '/details/versions/12345' }); expect(wrapper.find('VersionsSidebar').props()).toMatchObject({ versionId: '12345', }); }); }); describe('first loaded behavior', () => { test('should update isInitialized state on mount', () => { const wrapper = getWrapper({ path: '/activity' }); const sidebarPanels = wrapper.find(SidebarPanels); expect(sidebarPanels.state('isInitialized')).toBe(true); }); }); }); describe('refresh()', () => { test.each([true, false])('should call the sidebars with the appropriate argument', shouldRefreshCache => { const instance = getWrapper() .find(SidebarPanels) .instance(); ['activitySidebar', 'detailsSidebar', 'metadataSidebar', 'versionsSidebar'].forEach(sidebar => { instance[sidebar] = { current: { refresh: jest.fn() } }; }); instance.refresh(shouldRefreshCache); expect(instance.activitySidebar.current.refresh).toHaveBeenCalledWith(shouldRefreshCache); expect(instance.detailsSidebar.current.refresh).toHaveBeenCalledWith(); expect(instance.metadataSidebar.current.refresh).toHaveBeenCalledWith(); expect(instance.versionsSidebar.current.refresh).toHaveBeenCalledWith(); }); }); describe('componentDidUpdate', () => { const onVersionChange = jest.fn(); test.each([ ['/activity/versions/123', '/activity/versions/456'], ['/activity/versions/123', '/details/versions/456'], ['/activity/versions', '/activity/versions/123'], ['/activity/versions', '/details/versions'], ])('should not reset the current version if the versions route is still active', (prevPathname, pathname) => { const wrapper = getWrapper({ location: { pathname: prevPathname }, onVersionChange }); wrapper.setProps({ location: { pathname } }); expect(onVersionChange).not.toBeCalled(); }); test.each([true, false])('should not reset the current version if the sidebar is toggled', isOpen => { const wrapper = getWrapper({ isOpen, location: { pathname: '/details/versions/123' }, onVersionChange }); wrapper.setProps({ isOpen: !isOpen }); expect(onVersionChange).not.toBeCalled(); }); test.each([ ['/activity/versions/123', '/metadata'], ['/activity/versions/123', '/activity'], ['/activity/versions', '/metadata'], ['/details/versions/123', '/metadata'], ['/details/versions/123', '/details'], ['/details/versions', '/metadata'], ])('should reset the current version if the versions route is no longer active', (prevPathname, pathname) => { const wrapper = getWrapper({ location: { pathname: prevPathname }, onVersionChange }); wrapper.setProps({ location: { pathname } }); expect(onVersionChange).toBeCalledWith(null); }); }); });