import * as React from 'react';
import { Tooltip } from 'src/components/Tooltip/Tooltip';
import { tooltipContentClassName } from 'src/components/Tooltip/TooltipContent';
import { Button, buttonClassName } from 'src/components/Button/Button';
import { mountWithProvider, findIntrinsicElement } from '../../../utils';
import { implementsPopperProps } from 'test/specs/commonTests/implementsPopperProps';
describe('Tooltip', () => {
implementsPopperProps(Tooltip, {
requiredProps: { open: true },
});
test('aria-labelledby is not added on trigger if aria-label is passed to trigger shorthand', () => {
const ariaLabelTestValue = 'test-aria-label';
const wrapper = mountWithProvider(} />);
const trigger = findIntrinsicElement(wrapper, `.${buttonClassName}`);
expect(trigger.getDOMNode()).toHaveAttribute('aria-label', ariaLabelTestValue);
expect(trigger.getDOMNode()).not.toHaveAttribute('aria-labelledby');
});
describe('content', () => {
it('uses "id" if "content" with "id" is passed', () => {
const contentId = 'element-id';
const wrapper = mountWithProvider(} content={{ id: contentId }} />);
const content = findIntrinsicElement(wrapper, `.${tooltipContentClassName}`);
expect(content.prop('id')).toBe(contentId);
});
it('uses computed "id" if "content" is passed without "id"', () => {
const wrapper = mountWithProvider(} content="Welcome" />);
const content = findIntrinsicElement(wrapper, `.${tooltipContentClassName}`);
expect(content.prop('id')).toMatch(/tooltip-content-\d+/);
});
});
describe('onOpenChange', () => {
test('is called on hover', () => {
const onOpenChange = jest.fn();
mountWithProvider(} content="Hi" onOpenChange={onOpenChange} />)
.find('button')
.simulate('mouseEnter');
expect(onOpenChange).toHaveBeenCalledTimes(1);
expect(onOpenChange).toHaveBeenCalledWith(
expect.objectContaining({ type: 'mouseenter' }),
expect.objectContaining({ open: true }),
);
});
// https://github.com/microsoft/fluent-ui-react/pull/619
test('is called on hover when controlled', () => {
const onOpenChange = jest.fn();
mountWithProvider(} content="Hi" onOpenChange={onOpenChange} />)
.find('button')
.simulate('mouseEnter');
expect(onOpenChange).toHaveBeenCalledTimes(1);
expect(onOpenChange).toHaveBeenCalledWith(
expect.objectContaining({ type: 'mouseenter' }),
expect.objectContaining({ open: true }),
);
});
});
describe('open', () => {
it('is passed to "Popper" as "enabled"', () => {
const wrapper = mountWithProvider(} content="Foo" />);
expect(wrapper.find('Popper').prop('enabled')).toBe(false);
wrapper.setProps({ open: true });
expect(wrapper.find('Popper').prop('enabled')).toBe(true);
});
});
});