wix-style-react
Version:
wix-style-react
564 lines (482 loc) • 16.6 kB
JavaScript
;
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; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _testUtils = require('react-dom/test-utils');
var _testUtils2 = _interopRequireDefault(_testUtils);
var _Tooltip = require('./Tooltip.driver');
var _Tooltip2 = _interopRequireDefault(_Tooltip);
var _Tooltip3 = require('./Tooltip');
var _Tooltip4 = _interopRequireDefault(_Tooltip3);
var _driverFactory = require('wix-ui-test-utils/driver-factory');
var _testkit = require('../../../testkit');
var _enzyme = require('../../../testkit/enzyme');
var _enzyme2 = require('enzyme');
var _Button = require('../Button');
var _Button2 = _interopRequireDefault(_Button);
var _waitForCond = require('wait-for-cond');
var _waitForCond2 = _interopRequireDefault(_waitForCond);
var _polyfills = require('../../../testkit/polyfills');
var _react3 = require('../../../test/utils/react');
var _unit = require('../../../test/utils/unit');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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"); }); }; }
describe('Tooltip', function () {
var render = (0, _react3.createRendererWithDriver)(_Tooltip2.default);
var createDriver = (0, _driverFactory.createDriverFactory)(_Tooltip2.default);
var _props = {
showDelay: 5,
hideDelay: 5,
content: _react2.default.createElement(
'div',
null,
'Some content'
)
};
var children = _react2.default.createElement(
'div',
null,
'foo children'
);
beforeEach(function () {
document.body.innerHTML = '';
_polyfills.rangePolyfill.install();
});
afterEach(function () {
_polyfills.rangePolyfill.uninstall();
(0, _react3.cleanup)();
});
it('should be hidden by default', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
expect(driver.isShown()).toBeFalsy();
});
it('should show a tooltip once hovering', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
});
});
it('should hide when mouse leaving', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
return driver.mouseLeave();
}).then(function () {
return waitFor.assert(function () {
return expect(driver.isShown()).toBeFalsy();
});
});
});
it('click triggers', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { showTrigger: 'click', hideTrigger: 'click' }),
children
));
driver.click();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
driver.click();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeFalsy();
});
});
});
it('show on focus, hide on blur', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { showTrigger: 'focus', hideTrigger: 'blur' }),
_react2.default.createElement('input', null)
));
driver.focus();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
driver.blur();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeFalsy();
});
});
});
it('hover trigger is disabled in click mode', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { showTrigger: 'click', hideTrigger: 'click' }),
children
));
driver.mouseEnter();
return waitFor.assertHold(function () {
return expect(driver.isShown()).toBeFalsy();
}, 300);
});
it('custom mode - mouse enter does not hide', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _extends({}, _props, { showTrigger: 'custom', hideTrigger: 'custom' }), {
active: true
}),
_react2.default.createElement('input', null)
));
expect(driver.isShown()).toBeTruthy();
driver.mouseEnter();
return waitFor.assertHold(function () {
return expect(driver.isShown()).toBeTruthy();
});
});
it('focus and blur triggers', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { showTrigger: 'focus', hideTrigger: 'blur' }),
_react2.default.createElement('input', null)
));
driver.focus();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
driver.blur();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeFalsy();
});
});
});
it('should hide tooltip when using custom triggers', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var props, _render, driver, rerender;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
props = _extends({}, _props, { hideTrigger: 'custom', showTrigger: 'custom' });
_render = render(_react2.default.createElement(
_Tooltip4.default,
props,
children
)), driver = _render.driver, rerender = _render.rerender;
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
rerender(_react2.default.createElement(
_Tooltip4.default,
_extends({}, props, { active: true }),
children
));
_context.next = 7;
return (0, _unit.eventually)(function () {
expect(driver.isShown()).toBeTruthy();
});
case 7:
rerender(_react2.default.createElement(
_Tooltip4.default,
_extends({}, props, { active: false }),
children
));
_context.next = 10;
return (0, _unit.eventually)(function () {
expect(driver.isShown()).toBeFalsy();
});
case 10:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
})));
it('should test inner component', function () {
var dataHook = 'button_data_hook';
var buttonContent = _react2.default.createElement(
'div',
null,
'Custom Content...\xA0',
_react2.default.createElement(
_Button2.default,
{ dataHook: dataHook, id: 'inner-button', height: 'small' },
'Button content'
)
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
{ showDelay: 5, hideDelay: 5, content: buttonContent },
children
));
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
var buttonTestkit = (0, _testkit.buttonTestkitFactory)({
wrapper: driver.getTooltipWrapper(),
dataHook: dataHook
});
expect(buttonTestkit.getButtonTextContent()).toBe('Button content');
});
});
it('should not override focus event', function () {
var onFocus = jest.fn();
var onFocusedChild = _react2.default.createElement(
'div',
{ onFocus: onFocus },
'foo children'
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
onFocusedChild
));
driver.focus();
expect(onFocus).toBeCalled();
});
it('should not override blur event', function () {
var onBlur = jest.fn();
var onBluredChild = _react2.default.createElement(
'div',
{ onBlur: onBlur },
'foo children'
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
onBluredChild
));
driver.blur();
expect(onBlur).toBeCalled();
});
it('should not override click event', function () {
var onClick = jest.fn();
var onClickedChild = _react2.default.createElement(
'div',
{ onClick: onClick },
'foo children'
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
onClickedChild
));
driver.click();
expect(onClick).toBeCalled();
});
it('should not override mouse enter event', function () {
var onMouseEnter = jest.fn();
var onMouseEnteredChild = _react2.default.createElement(
'div',
{ onMouseEnter: onMouseEnter },
'foo children'
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
onMouseEnteredChild
));
driver.mouseEnter();
expect(onMouseEnter).toBeCalled();
});
it('should not override mouse leave event', function () {
var onMouseLeave = jest.fn();
var onMouseLeavedChild = _react2.default.createElement(
'div',
{ onMouseLeave: onMouseLeave },
'foo children'
);
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
onMouseLeavedChild
));
driver.mouseLeave();
expect(onMouseLeave).toBeCalled();
});
it('should support error theme', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({ theme: 'error' }, _props),
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.hasErrorTheme()).toBeTruthy();
});
});
it('should support dark theme', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({ theme: 'dark' }, _props),
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.hasDarkTheme()).toBeTruthy();
});
});
it('should support light theme', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({ theme: 'light' }, _props),
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.hasLightTheme()).toBeTruthy();
});
});
it('should have children', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
expect(driver.getChildren()).toContain('foo children');
});
it('should have a content', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.getContent()).toEqual('<div>Some content</div>');
});
});
it('should cancel mouse leave, when followed by mouse enter immediately', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_props,
children
));
driver.mouseEnter();
driver.mouseLeave();
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.isShown()).toBe(true);
});
});
it('should call onShow when tooltip is shown', function () {
var onShow = jest.fn();
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { onShow: onShow }),
children
));
driver.mouseEnter();
expect(onShow).not.toHaveBeenCalled();
return waitFor.assert(function () {
return expect(onShow).toHaveBeenCalled();
});
});
describe('placement attribute', function () {
it('should be top by default', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props),
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.getPlacement()).toEqual('top');
});
});
['top', 'bottom', 'left', 'right'].forEach(function (placement) {
it('should be ' + placement, function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _extends({}, _props), { placement: placement }),
children
));
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.getPlacement()).toBe(placement);
});
});
});
xit('show with delay and immediately hide', function () {
var driver = createDriver(_react2.default.createElement(
_Tooltip4.default,
_extends({}, _props, { hideDelay: 0, showDelay: 50 }),
children
));
driver.mouseEnter();
driver.mouseLeave();
return waitFor.assertHold(function () {
return expect(driver.isShown()).toBeFalsy();
});
});
});
describe('testkit', function () {
it('should exist', function () {
var div = document.createElement('div');
var dataHook = 'myDataHook';
var wrapper = div.appendChild(_testUtils2.default.renderIntoDocument(_react2.default.createElement(
'div',
null,
_react2.default.createElement(
_Tooltip4.default,
_extends({ dataHook: dataHook }, _props),
children
)
)));
var driver = (0, _testkit.backofficeTooltipTestkitFactory)({ wrapper: wrapper, dataHook: dataHook });
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
});
});
});
describe('enzyme testkit', function () {
it('should exist', function () {
var dataHook = 'myDataHook';
var wrapper = (0, _enzyme2.mount)(_react2.default.createElement(
_Tooltip4.default,
_extends({ dataHook: dataHook }, _props),
children
));
var driver = (0, _enzyme.backofficeTooltipTestkitFactory)({ wrapper: wrapper, dataHook: dataHook });
driver.mouseEnter();
expect(driver.isShown()).toBeFalsy();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
});
});
it.skip('should remove a tooltip immediately once the component is destroyed', function () {
var dataHook = 'myDataHook';
var wrapper = (0, _enzyme2.mount)(_react2.default.createElement(
_Tooltip4.default,
_extends({ dataHook: dataHook }, _props, { hideDelay: 1000 }),
children
));
var driver = (0, _enzyme.backofficeTooltipTestkitFactory)({ wrapper: wrapper, dataHook: dataHook });
driver.mouseEnter();
return waitFor.assert(function () {
return expect(driver.isShown()).toBeTruthy();
}).then(function () {
wrapper.unmount();
expect(driver.isShown()).toBeFalsy();
});
});
});
});
function waitFor(predicate, msg) {
return (0, _waitForCond2.default)(predicate, 2000, msg);
}
waitFor.assert = function (fn) {
return _waitForCond2.default.assert(fn, 2000);
};
waitFor.assertHold = function (fn) {
return _waitForCond2.default.assertHold(fn, 500);
};