import { mount, ReactWrapper } from 'enzyme';
import React from 'react';
import PropTypes from 'prop-types';
import AkButton from '@atlaskit/button/standard-button';
import { Popup } from '@atlaskit/editor-common';
import ToolbarFeedback from '../../../ui/ToolbarFeedback';
import { openFeedbackDialog } from '../../../plugins/feedback-dialog';
import { analyticsEventKey } from '../../../plugins/analytics/consts';
jest.mock('../../../plugins/feedback-dialog', () => ({
openFeedbackDialog: jest.fn(),
}));
describe('@atlaskit/editor-core/ui/ToolbarFeedback', () => {
let toolbarOption: ReactWrapper;
beforeAll(() => {
window.jQuery = { ajax: () => {} };
});
afterAll(() => {
if (window.jQuery) {
delete window.jQuery;
}
});
const mockEventDispatcher: { emit: jest.Mock } = { emit: jest.fn() };
function mountWithEditorActions(props = {}) {
const context = {
editorActions: { eventDispatcher: mockEventDispatcher },
};
const childContextTypes = {
editorActions: PropTypes.object.isRequired,
};
toolbarOption = mount(, {
context,
childContextTypes,
});
}
describe('analytics', () => {
afterEach(() => {
if (toolbarOption) {
toolbarOption.unmount();
}
});
it('should trigger feedback button clicked analytics event when feedback icon clicked', () => {
mountWithEditorActions();
toolbarOption.find(AkButton).simulate('click');
expect(mockEventDispatcher.emit).toHaveBeenCalledWith(analyticsEventKey, {
payload: {
action: 'clicked',
actionSubject: 'button',
actionSubjectId: 'feedbackButton',
eventType: 'ui',
},
});
});
});
it('should open opt out popup for bitbucket when feedback icon is clicked', () => {
const toolbarOption = mount();
expect(toolbarOption.find(Popup).length).toEqual(0);
toolbarOption.find(AkButton).simulate('click');
expect(toolbarOption.find(Popup).length).toEqual(1);
toolbarOption.unmount();
});
describe('openFeedbackDialog', () => {
beforeEach(() => {
mountWithEditorActions({
packageName: 'editor',
packageVersion: '1.1.1',
labels: ['label1', 'label2'],
});
toolbarOption.find(AkButton).simulate('click');
});
afterEach(() => {
if (toolbarOption) {
toolbarOption.unmount();
}
});
it('should call openFeedbackDialog with correct params', () => {
expect(openFeedbackDialog).toHaveBeenCalledWith({
packageName: 'editor',
packageVersion: '1.1.1',
labels: ['label1', 'label2'],
});
});
});
});