import React from 'react';
import {mount} from 'enzyme';
import changeReactMentionsInput from 'app-test/helpers/changeReactMentionsInput';
import NoteInput from 'app/components/activity/note/input';
describe('NoteInput', function() {
const routerContext = TestStubs.routerContext();
describe('New item', function() {
const props = {
group: {project: {}, id: 'groupId'},
memberList: [],
teams: [],
};
it('renders', function() {
mount(, routerContext);
});
it('submits when meta + enter is pressed', function() {
const onCreate = jest.fn();
const wrapper = mount(, routerContext);
const input = wrapper.find('textarea');
input.simulate('keyDown', {key: 'Enter', metaKey: true});
expect(onCreate).toHaveBeenCalled();
});
it('submits when ctrl + enter is pressed', function() {
const onCreate = jest.fn();
const wrapper = mount(, routerContext);
const input = wrapper.find('textarea');
input.simulate('keyDown', {key: 'Enter', ctrlKey: true});
expect(onCreate).toHaveBeenCalled();
});
it('handles errors', async function() {
const errorJSON = {detail: {message: '', code: 401, extra: ''}};
const wrapper = mount(
,
routerContext
);
const input = wrapper.find('textarea');
input.simulate('keyDown', {key: 'Enter', ctrlKey: true});
wrapper.update();
expect(wrapper.find('ErrorMessage')).toHaveLength(1);
});
});
describe('Existing Item', function() {
const defaultProps = {
group: {project: {}, id: 'groupId'},
modelId: 'item-id',
text: 'an existing item',
memberList: [],
teams: [],
};
const createWrapper = props => {
return mount(, routerContext);
};
it('edits existing message', async 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', async 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();
});
});
});