wix-style-react
Version:
wix-style-react
41 lines • 2.21 kB
JavaScript
import { getAppendToElement, popoverHostElementId } from './getAppendToElement';
import { getScrollParent } from './utils';
describe('getAppendToElement', () => {
it('should append popover host element to body [when] given `window`/`viewport` ', () => {
expect(getAppendToElement('viewport').parentElement).toBe(document.body);
});
it('should return popover host element [when] given `viewport` ', () => {
expect(getAppendToElement('viewport')).toBe(document.querySelector(`#${popoverHostElementId}`));
});
it('should return popover host element [when] given `window` ', () => {
expect(getAppendToElement('window')).toBe(document.querySelector(`#${popoverHostElementId}`));
});
it('should return first element with overflow style [when] given `scrollParent` ', () => {
const node = document.createElement('div');
const parent = document.createElement('div');
parent.appendChild(node);
parent.style.overflow = 'auto';
expect(getAppendToElement('scrollParent', node)).toBe(getScrollParent(node));
});
it('should return null [when] given `random`', () => {
expect(getAppendToElement('random')).toBe(undefined);
});
it('should return matching ancestor by predicate [when] filter function', () => {
const predicate = (el) => el.getAttribute('some-attr') === 'some-value';
const element = document.createElement('div');
const parent = document.createElement('div');
parent.setAttribute('some-attr', 'some-value');
parent.appendChild(element);
expect(getAppendToElement(predicate, element)).toBe(parent);
});
it('should return undefined [when] predicate is not matched', () => {
const predicate = (el) => el.getAttribute('some-attr') === 'some-value';
const element = document.createElement('div');
expect(getAppendToElement(predicate, element)).toBe(undefined);
});
it('should return given element [when] element is given', () => {
const element = document.createElement('div');
expect(getAppendToElement(element)).toBe(element);
});
});
//# sourceMappingURL=getAppendToElement.spec.js.map