UNPKG

wix-style-react

Version:
303 lines (242 loc) • 10.9 kB
var _this = this; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } import React from 'react'; import ReactTestUtils from 'react-dom/test-utils'; import { createDriverFactory } from 'wix-ui-test-utils/driver-factory'; import { mount } from 'enzyme'; import eventually from 'wix-eventually'; import TableActionCell from './TableActionCell'; import tableActionCellDriverFactory from './TableActionCell.driver'; import { tableActionCellTestkitFactory } from '../../testkit'; import { tableActionCellTestkitFactory as enzymeTableActionCellTestkitFactory } from '../../testkit/enzyme'; import { flattenInternalDriver } from '../../test/utils/private-drivers'; var primaryActionProps = function primaryActionProps() { var actionTrigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; return { primaryAction: { text: 'primary action', theme: 'whiteblue', onClick: actionTrigger } }; }; var secondaryActionsProps = function secondaryActionsProps() { var actionTriggers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var createAction = function createAction(n) { return { text: 'Action ' + n, icon: React.createElement( 'span', null, 'Icon ' + n ), // simulate the icon as <span> elements onClick: actionTriggers[n] || function () {} }; }; return { secondaryActions: Array(4).fill().map(function (val, idx) { return createAction(idx); }), numOfVisibleSecondaryActions: 2 }; }; describe('Table Action Cell', function () { var createDriver = function createDriver() { return flattenInternalDriver(createDriverFactory(tableActionCellDriverFactory).apply(undefined, arguments)); }; it("should have a placeholder when there's only a primary action", function () { var driver = createDriver(React.createElement(TableActionCell, primaryActionProps())); expect(driver.primaryActionPlaceholderExists()).toBeTruthy(); }); it('should display the primary action button', function () { var onPrimaryActionTrigger = jest.fn(); var driver = createDriver(React.createElement(TableActionCell, primaryActionProps(onPrimaryActionTrigger))); expect(driver.getPrimaryActionButtonDriver().exists()).toBeTruthy(); expect(driver.getPrimaryActionButtonDriver().getButtonTextContent()).toEqual('primary action'); }); it('should trigger the primary action on primary button click', function () { var onPrimaryActionTrigger = jest.fn(); var driver = createDriver(React.createElement(TableActionCell, primaryActionProps(onPrimaryActionTrigger))); driver.clickPrimaryActionButton(); expect(onPrimaryActionTrigger).toHaveBeenCalledTimes(1); }); it('should not have a primary action placeholder when there are also secondary actions', function () { var driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), secondaryActionsProps()))); expect(driver.primaryActionPlaceholderExists()).toBeFalsy(); }); it('should put visible secondary actions in the cell', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var driver, tooltipDriver1, tooltipDriver2; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), secondaryActionsProps()))); expect(driver.getVisibleActionsCount()).toEqual(2); expect(driver.getVisibleActionButtonDriver(0).getButtonTextContent()).toEqual('Icon 0'); expect(driver.getVisibleActionButtonDriver(1).getButtonTextContent()).toEqual('Icon 1'); tooltipDriver1 = driver.getVisibleActionTooltipDriver(0); tooltipDriver2 = driver.getVisibleActionTooltipDriver(1); tooltipDriver1.mouseEnter(); _context.next = 9; return eventually(function () { return expect(tooltipDriver1.getContent()).toEqual('Action 0'); }); case 9: tooltipDriver1.mouseLeave(); tooltipDriver2.mouseEnter(); _context.next = 13; return eventually(function () { return expect(tooltipDriver2.getContent()).toEqual('Action 1'); }); case 13: tooltipDriver2.mouseLeave(); case 14: case 'end': return _context.stop(); } } }, _callee, _this); }))); it('should put hidden secondary action in a PopoverMenu', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { var driver, popoverMenuDriver; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), secondaryActionsProps()))); popoverMenuDriver = driver.getHiddenActionsPopoverMenuDriver(0); expect(popoverMenuDriver.exists()).toEqual(true); popoverMenuDriver.click(); _context2.next = 6; return eventually(function () { expect(popoverMenuDriver.menu.itemsLength()).toEqual(2); expect(popoverMenuDriver.menu.itemContentAt(0)).toEqual('Action 2'); expect(popoverMenuDriver.menu.itemContentAt(1)).toEqual('Action 3'); }); case 6: case 'end': return _context2.stop(); } } }, _callee2, _this); }))); it('should trigger secondary action on click', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { var actionTriggers, driver; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: actionTriggers = Array(4).fill().map(function () { return jest.fn(); }); driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), secondaryActionsProps(actionTriggers)))); driver.clickVisibleAction(0); driver.clickVisibleAction(1); driver.clickPopoverMenu(); _context3.next = 7; return eventually(function () { return driver.clickHiddenAction(0); }); case 7: driver.clickPopoverMenu(); _context3.next = 10; return eventually(function () { return driver.clickHiddenAction(1); }); case 10: actionTriggers.forEach(function (actionTrigger) { expect(actionTrigger).toHaveBeenCalledTimes(1); }); case 11: case 'end': return _context3.stop(); } } }, _callee3, _this); }))); it('should render disabled hidden actions', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { var actionTrigger, disabledAction, driver; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: actionTrigger = jest.fn(); disabledAction = { text: 'Disabled Action', icon: React.createElement( 'span', null, 'Icon' ), onClick: actionTrigger, disabled: true }; driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), { secondaryActions: [disabledAction], numOfVisibleSecondaryActions: 0 }))); driver.clickPopoverMenu(); _context4.next = 6; return eventually(function () { return driver.clickHiddenAction(0); }); case 6: expect(actionTrigger).toHaveBeenCalledTimes(0); case 7: case 'end': return _context4.stop(); } } }, _callee4, _this); }))); it('should allow to change the number of visible secondary actions', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { var driver; return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: driver = createDriver(React.createElement(TableActionCell, _extends({}, primaryActionProps(), secondaryActionsProps(), { numOfVisibleSecondaryActions: 3 }))); expect(driver.getVisibleActionsCount()).toEqual(3); driver.clickPopoverMenu(); _context5.next = 5; return eventually(function () { return expect(driver.getHiddenActionsCount()).toEqual(1); }); case 5: case 'end': return _context5.stop(); } } }, _callee5, _this); }))); }); describe('testkit', function () { it('should exist', function () { var div = document.createElement('div'); var dataHook = 'table-action-cell'; var wrapper = div.appendChild(ReactTestUtils.renderIntoDocument(React.createElement( 'div', null, React.createElement(TableActionCell, _extends({ dataHook: dataHook }, primaryActionProps())) ))); var actionCellTextkit = tableActionCellTestkitFactory({ wrapper: wrapper, dataHook: dataHook }); expect(actionCellTextkit.getPrimaryActionButtonDriver()).toBeTruthy(); }); }); describe('enzyme testkit', function () { it('should exist', function () { var dataHook = 'table-action-cell'; var wrapper = mount(React.createElement(TableActionCell, _extends({ dataHook: dataHook }, primaryActionProps()))); var actionCellTextkit = enzymeTableActionCellTestkitFactory({ wrapper: wrapper, dataHook: dataHook }); expect(actionCellTextkit.getPrimaryActionButtonDriver()).toBeTruthy(); }); });