import React from 'react'; import { mount } from 'enzyme'; import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import MessageInput from '../MessageInput'; // Remove when it will be fixed: https://github.com/airbnb/enzyme/issues/1875 jest.mock('react', () => { const r = jest.requireActual('react'); return { ...r, memo: (x) => x }; }); configure({ adapter: new Adapter() }); const testMessage = { mid: 1, user: { uid: 1, uname: 'ugnich' }, body: 'test message', timestamp: new Date().toISOString() }; window.matchMedia = window.matchMedia || function() { return { matches: true, addListener: function() { }, removeListener: function() { } }; }; it('Gives immediate focus on to textarea on load', () => { const wrapper = mount( { }} />); const textareaRef = wrapper.instance().textarea; jest.spyOn(textareaRef.current, 'focus'); wrapper.instance().componentDidMount(); expect(textareaRef.current.focus).toHaveBeenCalledTimes(1); }); it('Submits on ctrl-enter', () => { const onSend = jest.fn(); const messageInput = mount(); let textarea = messageInput.find('textarea'); textarea.simulate('keypress', { charCode: 13, which: 13, keyCode: 13, ctrlKey: false }); expect(onSend).toHaveBeenCalledTimes(0); textarea.simulate('keypress', { charCode: 13, which: 13, keyCode: 13, ctrlKey: true }); expect(onSend).toHaveBeenCalledTimes(1); }); it('Clears template on submit', () => { const messageInput = mount( { }} />); messageInput.find('textarea').simulate('change', { target: { value: ' ' } }); expect(messageInput.state().body).toEqual(' '); messageInput.find('Button').simulate('click'); expect(messageInput.state().body).toEqual(''); });