wix-style-react
Version:
wix-style-react
167 lines (150 loc) • 5.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _testUtils = require('react-dom/test-utils');
var _testUtils2 = _interopRequireDefault(_testUtils);
var _wixEventually = require('wix-eventually');
var _wixEventually2 = _interopRequireDefault(_wixEventually);
var _last = require('lodash/last');
var _last2 = _interopRequireDefault(_last);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var arrowDirectionToPlacement = {
top: 'bottom',
bottom: 'top',
left: 'right',
right: 'left'
};
var tooltipDriverFactory = function tooltipDriverFactory(_ref) {
var element = _ref.element;
var getContentRoot = function getContentRoot() {
var contentRootHook = element.getAttribute('data-content-hook');
if (!contentRootHook) {
throw new Error('Tooltip.driver: contentRootHook attribute must exist on the Toolrip\'s root element');
}
return document.body.querySelector('[data-hook="' + contentRootHook + '"]');
};
var getTooltipContent = function getTooltipContent() {
return getContentRoot().querySelector('.tooltip');
};
var mouseEnter = function mouseEnter() {
return _testUtils2.default.Simulate.mouseEnter(element);
};
var mouseLeave = function mouseLeave() {
return _testUtils2.default.Simulate.mouseLeave(element);
};
var isShown = function isShown() {
return !!getContentRoot();
};
var getContent = function getContent() {
var content = getTooltipContent();
while (content.children.length > 0) {
content = content.children[0];
}
return content.innerHTML;
};
var contentHasElement = function contentHasElement(selector) {
var content = getContentRoot();
return content && !!content.querySelector(selector);
};
return {
exists: function exists() {
return !!element;
},
isShown: isShown,
focus: function focus() {
return _testUtils2.default.Simulate.focus(element);
},
blur: function blur() {
return _testUtils2.default.Simulate.blur(element);
},
click: function click() {
return _testUtils2.default.Simulate.click(element);
},
mouseEnter: mouseEnter,
mouseLeave: mouseLeave,
hasErrorTheme: function hasErrorTheme() {
return contentHasElement('.error');
},
hasDarkTheme: function hasDarkTheme() {
return contentHasElement('.dark');
},
hasLightTheme: function hasLightTheme() {
return contentHasElement('.light');
},
hasAnimationClass: function hasAnimationClass() {
return contentHasElement('.fadeIn');
},
hasArrow: function hasArrow() {
return contentHasElement('[data-hook="tooltip-arrow"]');
},
getTooltipWrapper: getTooltipContent,
getChildren: function getChildren() {
return element.innerHTML;
},
getPlacement: function getPlacement() {
var content = getContentRoot();
var arrowDirection = (0, _last2.default)(content.querySelectorAll('[data-hook="tooltip-arrow"]')).className.split(' ')[2];
return arrowDirectionToPlacement[arrowDirection];
},
getContent: getContent,
hoverAndGetContent: function hoverAndGetContent() {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref2$timeout = _ref2.timeout,
timeout = _ref2$timeout === undefined ? 1000 : _ref2$timeout,
_ref2$interval = _ref2.interval,
interval = _ref2$interval === undefined ? 50 : _ref2$interval;
mouseEnter();
return (0, _wixEventually2.default)(function () {
if (!isShown()) {
throw new Error('Tooltip not visible');
}
var content = getContent();
mouseLeave();
return content;
}, {
timeout: timeout,
interval: interval
});
},
getMaxWidth: function getMaxWidth() {
var content = getTooltipContent();
var values = content.style._values;
return values['max-width'];
},
getMinWidth: function getMinWidth() {
var content = getTooltipContent();
var values = content.style._values;
return values['min-width'];
},
getAlignment: function getAlignment() {
var content = getTooltipContent();
var values = content.style._values;
return values['text-align'];
},
getPadding: function getPadding() {
var content = getTooltipContent();
var values = content.style._values;
return values.padding;
}
};
};
exports.default = assertExistsWrapper(tooltipDriverFactory, 'The Tooltip testkit could not be initialized, please make sure that a dataHook is directly applied to the Tooltip component and passed to the tooltipTestkitFactory.');
function assertExistsWrapper(driver, msg) {
return function () {
return (
/* eslint-disable no-restricted-globals */
new Proxy(driver.apply(undefined, arguments), {
/* eslint-enable no-restricted-globals */
get: function get(_driver, prop) {
if (_driver.exists && prop !== 'exists') {
if (!_driver.exists()) {
throw new Error(msg);
}
}
return _driver[prop];
}
})
);
};
}