/** * @jest-environment jsdom */ import { create, act } from 'react-test-renderer'; import MessageInput from '../MessageInput'; const testMessage = { mid: 1, rid: 0, body: 'test message', timestamp: new Date().toISOString(), attach: '', to: {} }; window.matchMedia = window.matchMedia || function() { return { matches: true, addListener: function() { }, removeListener: function() { } }; }; function createMessageInput(data, onFocus, onSend, draft) { return create(, { createNodeMock: (element) => { if (element.type === 'textarea') { // mock a focus function return { focus: onFocus, style: {} }; } return null; } }); } it('Gives immediate focus on to textarea on load', () => { let focused = false; act(() => { createMessageInput(testMessage, () => { focused = true; }, () => { }); }); expect(focused).toEqual(true, 'textarea was not focused'); }); it('Submits on ctrl-enter', () => { const onSend = jest.fn(); var messageInput = null; act(() => { messageInput = createMessageInput(testMessage, () => {}, onSend); }); let textarea = messageInput.root.findByType('textarea'); act(() => { textarea.props.onKeyPress({ charCode: 13, which: 13, keyCode: 13, ctrlKey: false }); }); expect(onSend).toHaveBeenCalledTimes(0); act(() => { textarea.props.onKeyPress({ charCode: 13, which: 13, keyCode: 13, ctrlKey: true }); }); expect(onSend).toHaveBeenCalledTimes(1); expect(textarea.props.value).toEqual(''); act(() => { textarea.props.onChange({ target: { value: ' ', validity: {} } }); }); expect(textarea.props.value).toEqual(' '); act(() => { messageInput.root.findByType('form').props.onSubmit({ event: {} }); }); expect(textarea.props.value).toEqual('', 'Value should be cleared after submit'); }); it('Show draft text', () => { var messageInput; act(() => { messageInput = createMessageInput(testMessage, () => {}, () => {}, 'yo'); }); let textarea = messageInput.root.findByType('textarea'); expect(textarea.props.value).toEqual('yo', 'Value should match draft'); });