@momentum-ui/react
Version:
Cisco Momentum UI framework for ReactJs applications
289 lines (249 loc) • 7.96 kB
JavaScript
import React from 'react';
import { shallow, mount } from 'enzyme';
import {
Button,
EventOverlay,
Popover
} from '@momentum-ui/react';
describe('tests for <EventOverlay />', () => {
beforeAll(() => {
jest.clearAllTimers();
jest.useFakeTimers();
});
it('should match text SnapShot', () => {
const props = {
anchorNode: <div />
};
const container = shallow(
<EventOverlay {...props}>
<span>Test</span>
</EventOverlay>
);
expect(container).toMatchSnapshot();
});
describe('should set classes for', () => {
const content = (
<span className="popover-content" key="1">Hello how are you doing</span>
);
it('top-center direction', () => {
const container = mount(
<Popover
direction="top-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--top').length).toEqual(1);
expect(container.find('.md-event-overlay--arrow').length).toEqual(1);
});
it('bottom-center direction', () => {
const container = mount(
<Popover
direction="bottom-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--bottom').length).toEqual(1);
});
it('left-center direction', () => {
const container = mount(
<Popover
direction="left-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--left').length).toEqual(1);
});
it('right-center direction', () => {
const container = mount(
<Popover
direction="right-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--right').length).toEqual(1);
});
});
it('on click outside, should close the popover', () => {
const content = (
<span className="popover-content" key="1">Hello how are you doing</span>
);
const container = mount(
<div className="wrapper">
<Popover
allowClickAway
direction="top-center"
showArrow
content={content}
popoverTrigger={'Click'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
</div>
);
container.find('button').simulate('click');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--top').length).toEqual(1);
// making a click outside
container.childAt(0).childAt(1).instance().handleAllowClickAway({});
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--top').length).toEqual(0);
});
it('on focus outside, should close the popover', () => {
const content = (
<span className="popover-content" key="1">Hello how are you doing</span>
);
const container = mount(
<div className="wrapper">
<Popover
allowClickAway
direction="top-center"
showArrow
content={content}
popoverTrigger={'Focus'}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
</div>
);
container.find('.anchor').simulate('focus');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay--top').length).toEqual(1);
// when tabbed out of the Overlay
container.childAt(0).childAt(1).instance().handleAllowClickAway({});
expect(container.find('.md-event-overlay--top').length).toEqual(1);
});
it('on closing the popover, show not focus back on the trigger if onMouseEnter present', () => {
const container = mount(
<div className="wrapper">
<Popover
allowClickAway
direction="top-center"
showArrow
content={'test'}
popoverTrigger={'MouseEnter'}
>
<Button ariaLabel='Hello'>Hello</Button>
</Popover>
</div>
);
container.find('Button').simulate('mouseenter');
jest.runAllTimers();
container.update();
// when tabbed out of the Overlay
container.childAt(0).childAt(1).instance().handleAllowClickAway({});
expect(document.activeElement.type).toEqual(undefined);
});
it('on closing the popover, show not focus back on the trigger if onFocus present', () => {
const container = mount(
<div className="wrapper">
<Popover
allowClickAway
direction="top-center"
showArrow
content={'test'}
popoverTrigger={'Focus'}
>
<Button ariaLabel='Hello'>Hello</Button>
</Popover>
</div>
);
container.find('Button').simulate('focus');
jest.runAllTimers();
container.update();
// when tabbed out of the Overlay
container.childAt(0).childAt(1).instance().handleAllowClickAway({});
expect(document.activeElement.type).toEqual(undefined);
});
it('on closing the popover, show focus back on the trigger if onClick present', () => {
const container = mount(
<div className="wrapper">
<Popover
allowClickAway
direction="top-center"
showArrow
content={'test'}
popoverTrigger={'Click'}
>
<Button ariaLabel='Hello'>Hello</Button>
</Popover>
</div>
);
container.find('Button').simulate('click');
jest.runAllTimers();
container.update();
// when tabbed out of the Overlay
container.childAt(0).childAt(1).instance().handleAllowClickAway({});
expect('button').toEqual(document.activeElement.type);
});
it('should handle maxHeight prop', () => {
const content = (
<span className="popover-content" key="1">Hello how are you doing</span>
);
const container = mount(
<Popover
direction="top-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
maxHeight={300}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay__children').get(0).props.style).toHaveProperty('maxHeight', '300px');
});
it('should handle maxWidth prop', () => {
const content = (
<span className="popover-content" key="1">Hello how are you doing</span>
);
const container = mount(
<Popover
direction="top-center"
showArrow
content={content}
popoverTrigger={'MouseEnter'}
maxWidth={300}
>
<button tabIndex={0} className="anchor">Hello</button>
</Popover>
);
container.find('.anchor').simulate('mouseenter');
jest.runAllTimers();
container.update();
expect(container.find('.md-event-overlay__children').get(0).props.style).toHaveProperty('maxWidth', '300px');
});
});