import { mount } from 'enzyme';
import React from 'react';
import Tooltip from '@atlaskit/tooltip';
import { AnalyticsListener } from '@atlaskit/analytics-next';
import { FabricChannel } from '@atlaskit/analytics-listeners';
import Button from '@atlaskit/button';
import ToolbarButton, { TOOLBAR_BUTTON } from '../../../ui/ToolbarButton';
import { fireEvent, render } from '@testing-library/react';
import {
ACTION_SUBJECT,
ACTION,
EVENT_TYPE,
} from '../../../plugins/analytics/types/enums';
const noop = () => {};
describe('@atlaskit/editor-core/ui/ToolbarButton', () => {
it('should not render tooltip if title is not set', () => {
const toolbarButtonElem = mount(
,
);
expect(toolbarButtonElem.find(Tooltip)).toHaveLength(0);
toolbarButtonElem.unmount();
});
it('should render tooltip if title is set', () => {
const toolbarButtonElem = mount(
,
);
expect(toolbarButtonElem.find(Tooltip)).toHaveLength(1);
toolbarButtonElem.unmount();
});
it('should not display tooltip if hideTooltip prop is passed in', () => {
const toolbarButtonElem = mount(
,
);
toolbarButtonElem.simulate('mouseover');
const tooltip = toolbarButtonElem.find(Tooltip);
expect(tooltip.html()).not.toContain('tooltip text');
toolbarButtonElem.unmount();
});
it('should pass titlePosition to tooltip position', () => {
const toolbarButtonElem = mount(
,
);
const tooltip = toolbarButtonElem.find(Tooltip);
tooltip.simulate('mouseover');
expect(tooltip.prop('position')).toEqual('left');
toolbarButtonElem.unmount();
});
it('should pass testId down to the button', () => {
const toolbarButtonElem = mount(
,
);
const button = toolbarButtonElem.find(Button);
expect(button.props().testId).toEqual('some-test-id');
});
describe('when button id is not set', () => {
it('should not fire the analytics event', () => {
const onEvent = jest.fn();
const component = render(
,
);
const { getByTestId } = component;
fireEvent.click(getByTestId('some-test-id'));
expect(onEvent).not.toHaveBeenCalled();
});
});
describe('when button id is set', () => {
it('should fire the analytics event with the button id', () => {
const onEvent = jest.fn();
const component = render(
,
);
const { getByTestId } = component;
fireEvent.click(getByTestId('some-test-id'));
expect(onEvent).toHaveBeenCalledWith(
expect.objectContaining({
payload: {
action: ACTION.CLICKED,
actionSubject: ACTION_SUBJECT.TOOLBAR_BUTTON,
actionSubjectId: TOOLBAR_BUTTON.UNDO,
eventType: EVENT_TYPE.UI,
attributes: expect.any(Object),
},
}),
'editor',
);
});
});
});