import changeReactMentionsInput from 'sentry-test/changeReactMentionsInput';
import {mountWithTheme} from 'sentry-test/enzyme';
import NoteInput from 'sentry/components/activity/note/input';
describe('NoteInput', function () {
describe('New item', function () {
const props = {
group: {project: {}, id: 'groupId'},
memberList: [],
teams: [],
};
it('renders', function () {
mountWithTheme();
});
it('submits when meta + enter is pressed', function () {
const onCreate = jest.fn();
const wrapper = mountWithTheme();
const input = wrapper.find('textarea');
changeReactMentionsInput(wrapper, 'something');
input.simulate('keyDown', {key: 'Enter', metaKey: true});
expect(onCreate).toHaveBeenCalled();
});
it('submits when ctrl + enter is pressed', function () {
const onCreate = jest.fn();
const wrapper = mountWithTheme();
const input = wrapper.find('textarea');
changeReactMentionsInput(wrapper, 'something');
input.simulate('keyDown', {key: 'Enter', ctrlKey: true});
expect(onCreate).toHaveBeenCalled();
});
it('does not submit when nothing is entered', function () {
const onCreate = jest.fn();
const wrapper = mountWithTheme();
const input = wrapper.find('textarea');
input.simulate('keyDown', {key: 'Enter', metaKey: true});
expect(onCreate).not.toHaveBeenCalled();
});
it('handles errors', function () {
const errorJSON = {detail: {message: '', code: 401, extra: ''}};
const wrapper = mountWithTheme(
);
const input = wrapper.find('textarea');
changeReactMentionsInput(wrapper, 'something');
input.simulate('keyDown', {key: 'Enter', ctrlKey: true});
wrapper.update();
expect(wrapper.find('ErrorMessage')).toHaveLength(1);
});
it('has a disabled submit button when no text is entered', function () {
const errorJSON = {detail: {message: '', code: 401, extra: ''}};
const wrapper = mountWithTheme(
);
expect(wrapper.find('button[type="submit"]').prop('disabled')).toBe(true);
});
it('enables the submit button when text is entered', function () {
const errorJSON = {detail: {message: '', code: 401, extra: ''}};
const wrapper = mountWithTheme(
);
changeReactMentionsInput(wrapper, 'something');
expect(wrapper.find('button[type="submit"]').prop('disabled')).toBe(false);
});
});
describe('Existing Item', function () {
const defaultProps = {
group: {project: {}, id: 'groupId'},
modelId: 'item-id',
text: 'an existing item',
memberList: [],
teams: [],
};
const createWrapper = props =>
mountWithTheme();
it('edits existing message', function () {
const onUpdate = jest.fn();
const wrapper = createWrapper({onUpdate});
expect(wrapper.find('NoteInputNavTabLink').first().text()).toBe('Edit');
// Switch to preview
wrapper.find('NoteInputNavTabLink').last().simulate('click');
expect(wrapper.find('NotePreview').text()).toBe('an existing item\n');
// Switch to edit
wrapper.find('NoteInputNavTabLink').first().simulate('click');
expect(wrapper.find('textarea').prop('value')).toBe('an existing item');
// Can edit text
changeReactMentionsInput(wrapper, 'new item');
wrapper.find('textarea').simulate('keyDown', {key: 'Enter', ctrlKey: true});
expect(onUpdate).toHaveBeenCalledWith({text: 'new item', mentions: []});
});
it('canels editing and moves to preview mode', function () {
const onEditFinish = jest.fn();
const wrapper = createWrapper({onEditFinish});
changeReactMentionsInput(wrapper, 'new value');
expect(wrapper.find('FooterButton').first().text()).toBe('Cancel');
wrapper.find('FooterButton').first().simulate('click');
expect(onEditFinish).toHaveBeenCalled();
});
});
});