UNPKG

wix-style-react

Version:
250 lines (209 loc) • 9.07 kB
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /* eslint-disable no-console */ import React from 'react'; import SideMenu from '../index'; import SideMenuDrill from './index'; import { createDriverFactory } from 'wix-ui-test-utils/driver-factory'; import drillViewDriverFactory from './DrillView.driver'; describe('DrillView', function () { var linksPerLevel = 3; var subMenusPerLevel = 2; var createDriver = createDriverFactory(drillViewDriverFactory); var getHeader = function getHeader(level) { return 'Level ' + level + ' - Start'; }; var getFooter = function getFooter(level) { return 'Level ' + level + ' - End'; }; var onClickSpy = void 0, onSubMenuClickSpy = void 0, onSubMenuBackSpy = void 0; beforeEach(function () { onClickSpy = jest.fn(); onSubMenuClickSpy = jest.fn(); onSubMenuBackSpy = jest.fn(); }); function createLinksForLevel(level, activeLink) { var isLinkDisabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var activeLevel = activeLink.activeLevel, activeIndex = activeLink.activeIndex; var isLevelActive = activeLevel === level; return [].concat(_toConsumableArray(new Array(linksPerLevel))).map(function (_, i) { return React.createElement( SideMenuDrill.Link, { key: level + '_' + i, isActive: isLevelActive && activeIndex === i }, React.createElement( 'a', { href: '//wix.com', onClick: onClickSpy, disabled: isLinkDisabled }, 'Link ', i ) ); }); } function createSubMenu(key, level, maxLevel, activeLink, isDisabled) { var isLinkDisabled = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; var menuKey = key + '_' + level; return React.createElement( SideMenuDrill.SubMenu, { key: menuKey, menuKey: menuKey, title: menuKey, onSelectHandler: onSubMenuClickSpy, onBackHandler: onSubMenuBackSpy, disabled: isDisabled }, React.createElement( SideMenu.Header, null, getHeader(level) ), React.createElement( SideMenuDrill.Navigation, null, createLinksForLevel(level, activeLink, isLinkDisabled), createSubMenus(key + '_' + level, level + 1, maxLevel, activeLink, false, isLinkDisabled) ), React.createElement( SideMenu.Footer, null, getFooter(level) ) ); } function createSubMenus(key, level, maxLevel, activeLink, isDisabled) { var isLinkDisabled = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; if (level > maxLevel) { return React.createElement('div', null); } return [].concat(_toConsumableArray(new Array(subMenusPerLevel))).map(function (_, i) { return createSubMenu(key + i, level, maxLevel, activeLink, isDisabled, isLinkDisabled); }); } function createSideMenu(maxLevel) { var activeLink = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var isSubMenuDisabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isLinkDisabled = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; return createDriver(React.createElement( SideMenuDrill, null, React.createElement( SideMenu.Header, null, getHeader(0) ), createLinksForLevel(0, activeLink, isLinkDisabled), createSubMenus('SubMenu', 1, maxLevel, activeLink, isSubMenuDisabled, isLinkDisabled), React.createElement( SideMenu.Footer, null, getFooter(0) ) )); } it('should have a sticky footer through props', function () { var driver = createDriver(React.createElement( SideMenuDrill, { stickyFooter: React.createElement( SideMenu.Footer, null, getFooter(1) ) }, createLinksForLevel(0, {}) )); expect(!!driver.getStickyFooter()).toBe(true); }); it('should render a one level drill view', function () { var driver = createSideMenu(0); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().navigationInnerLinks()).toHaveLength(linksPerLevel); }); it('should render a one level drill view with an active item', function () { var activeLevel = 0; var activeIndex = 1; var driver = createSideMenu(0, { activeLevel: activeLevel, activeIndex: activeIndex }); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().isLinkActiveByIndex(0)).toBe(false); expect(driver.getMenuDriver().isLinkActiveByIndex(activeIndex)).toBe(true); }); it('should initially render the sub menu of the active link', function () { var activeLevel = 1; var activeIndex = 1; var driver = createSideMenu(1, { activeLevel: activeLevel, activeIndex: activeIndex }); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(1)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(1)); expect(driver.getMenuDriver().hasBackLink()).toBe(true); expect(driver.getMenuDriver().isLinkActiveByIndex(activeIndex)).toBe(true); expect(driver.getMenuDriver().navigationCategoryContent(0)).toBe('SubMenu1_1'); }); it("should NOT trigger first child link's click when clicking a disabled sub menu", function () { var driver = createSideMenu(3, {}, false, true); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().hasBackLink()).toBe(false); // click the first link expect(onClickSpy.mock.calls).toHaveLength(0); driver.getMenuDriver().clickInnerLinkByIndex(3); expect(onClickSpy.mock.calls).toHaveLength(0); expect(onSubMenuClickSpy.mock.calls).toHaveLength(1); }); it("should trigger first child link's click when clicking a sub menu", function () { var driver = createSideMenu(3); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().hasBackLink()).toBe(false); // click the first sub menu expect(onClickSpy.mock.calls).toHaveLength(0); driver.getMenuDriver().clickInnerLinkByIndex(3); expect(onClickSpy).toHaveBeenCalled(); expect(onSubMenuClickSpy).toHaveBeenCalled(); expect(onClickSpy.mock.calls).toHaveLength(1); expect(onSubMenuClickSpy.mock.calls).toHaveLength(1); }); it('should have a disabled css when disabled prop is passed', function () { var driver = createSideMenu(3, {}, true); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().hasBackLink()).toBe(false); // click the first sub menu expect(onClickSpy.mock.calls).toHaveLength(0); driver.getMenuDriver().clickInnerLinkByIndex(3); expect(driver.getMenuDriver().isLinkDisabledByIndex(3)).toBe(true); }); it('should NOT have a disabled css when disabled prop is passed', function () { var driver = createSideMenu(3); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().hasBackLink()).toBe(false); // click the first sub menu expect(onClickSpy.mock.calls).toHaveLength(0); driver.getMenuDriver().clickInnerLinkByIndex(3); expect(driver.getMenuDriver().isLinkDisabledByIndex(3)).toBe(false); }); it('should navigate to a parent menu and sub menu link should be active', function (done) { var activeLevel = 1; var activeIndex = 1; var driver = createSideMenu(1, { activeLevel: activeLevel, activeIndex: activeIndex }); expect(driver.getMenuDriver().headerContent()).toBe(getHeader(1)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(1)); expect(driver.getMenuDriver().isLinkActiveByIndex(activeIndex)).toBe(true); expect(driver.getMenuDriver().hasBackLink()).toBe(true); driver.getMenuDriver().clickBackLink(); setTimeout(function () { expect(driver.getMenuDriver().headerContent()).toBe(getHeader(0)); expect(driver.getMenuDriver().footerContent()).toBe(getFooter(0)); expect(driver.getMenuDriver().isLinkActiveByIndex(3)).toBe(true); expect(onSubMenuBackSpy).toHaveBeenCalled(); expect(onSubMenuBackSpy.mock.calls).toHaveLength(1); done(); }, 600); }); });