import { h } from 'preact'; import render from 'preact-render-to-json'; import { shallow } from 'preact-render-spy'; import Compose from '../compose'; let submitNoMessage = false; let submitWithMessage = false; let textfieldIsEmpty = true; const handleSubmitEmpty = () => { submitNoMessage = true; submitWithMessage = false; textfieldIsEmpty = true; }; const handleSubmitFake = () => { submitNoMessage = false; submitWithMessage = true; textfieldIsEmpty = true; }; const handleKeyDownFake = (e) => { const enterPressed = e.keyCode === 13; if (!enterPressed) { textfieldIsEmpty = false; } else if (textfieldIsEmpty) { handleSubmitEmpty(); } else { handleSubmitFake(); } }; const getCompose = (tf) => { // true -> not empty, false -> empty if (tf) { return ( ); } return ( ); }; describe('', () => { afterEach(() => { submitNoMessage = false; submitWithMessage = false; textfieldIsEmpty = true; }); describe('behavior with no message', () => { it('should click submit', () => { const context = shallow(getCompose(false)); const btn = context.find('.composer-submit'); expect(btn.simulate('click')); expect(submitNoMessage).toEqual(true); expect(submitWithMessage).toEqual(false); expect(textfieldIsEmpty).toEqual(true); }); it('should press enter', () => { const context = shallow(getCompose(false)); const input = context.find('.composer-textarea'); const enter = { keyCode: 13 }; expect(input.simulate('keyDown', enter)); expect(submitNoMessage).toEqual(true); expect(submitWithMessage).toEqual(false); expect(textfieldIsEmpty).toEqual(true); }); }); describe('behavior with message', () => { it('should render and test snapshot', () => { const tree = render(getCompose(true)); expect(tree).toMatchSnapshot(); }); it('should have proper elements, attributes and values', () => { const context = shallow(getCompose(true)); expect(context.find('.messagecomposer').exists()).toEqual(true); const input = context.find('.composer-textarea'); expect(input.exists()).toEqual(true); expect(input.text()).toEqual(''); expect(input.attr('maxLength')).toEqual('1000'); expect(input.attr('placeholder')).toEqual('Write message...'); const btn = context.find('.composer-submit'); expect(btn.exists()).toEqual(true); expect(btn.text()).toEqual('Send'); }); it('should click submit and check for empty textarea', () => { const context = shallow(getCompose(true)); const input = context.find('.composer-textarea'); const btn = context.find('.composer-submit'); const someletter = { keyCode: 69 }; expect(input.simulate('keyDown', someletter)); expect(textfieldIsEmpty).toEqual(false); expect(btn.simulate('click')); expect(submitNoMessage).toEqual(false); expect(submitWithMessage).toEqual(true); expect(textfieldIsEmpty).toEqual(true); }); it('should press enter and check for empty textarea', () => { const context = shallow(getCompose(true)); const input = context.find('.composer-textarea'); const someletter = { keyCode: 69 }; expect(input.simulate('keyDown', someletter)); const enter = { keyCode: 13 }; expect(input.simulate('keyDown', enter)); expect(submitNoMessage).toEqual(false); expect(submitWithMessage).toEqual(true); expect(textfieldIsEmpty).toEqual(true); }); }); });