wix-style-react
Version:
wix-style-react
250 lines (209 loc) • 9.07 kB
JavaScript
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);
});
});