import { mount, ReactWrapper } from 'enzyme'; import React from 'react'; import { browser } from '@atlaskit/editor-common'; import PanelTextInput from '../../../ui/PanelTextInput'; const noop = () => {}; describe('@atlaskit/editor-core/ui/PanelTextInput', () => { let panel: ReactWrapper; beforeEach(() => { jest.clearAllMocks(); }); afterEach(() => { if (panel && panel.length) { panel.unmount(); } }); beforeAll(() => { jest.useFakeTimers(); }); afterAll(() => { jest.useRealTimers(); }); it('should call onSubmit when ENTER key is pressed', () => { const onSubmitHandler = jest.fn(); panel = mount(); const input = panel.find('input'); (input.getDOMNode() as any).value = 'http://atlassian.com'; input.simulate('keydown', { which: 'enter', keyCode: 13 }); expect(onSubmitHandler).toHaveBeenCalledWith('http://atlassian.com'); }); it('should prevent KeyDown event if ENTER key is pressed', () => { const onSubmitHandler = jest.fn(); const preventDefault = jest.fn(); panel = mount(); const input = panel.find('input'); input.simulate('keydown', { which: 'enter', keyCode: 13, preventDefault }); expect(preventDefault).toHaveBeenCalledTimes(1); }); it('should not prevent KeyDown event if any other key is pressed', () => { const preventDefault = jest.fn(); panel = mount(); const input = panel.find('input'); input.simulate('keydown', { which: 'a', keyCode: 65, preventDefault }); expect(preventDefault).not.toHaveBeenCalled(); }); it('should call onCancel when ESC key is pressed', () => { const onCancelHandler = jest.fn(); panel = mount(); const input = panel.find('input'); input.simulate('keydown', { which: 'esc', keyCode: 27 }); expect(onCancelHandler).toHaveBeenCalled(); }); it('should call onKeyDown when a key is pressed', () => { const onKeyDownHandler = jest.fn(); panel = mount(); const input = panel.find('input'); input.simulate('keydown', { which: 'a', keyCode: 65 }); expect(onKeyDownHandler).toHaveBeenCalled(); }); describe('given', () => { let onUndoSpy: jest.Mock, onRedoSpy: jest.Mock; beforeEach(() => { onUndoSpy = jest.fn(); onRedoSpy = jest.fn(); panel = mount(); }); describe('on win platform', () => { it('on ctrl+z calls onUndo handler', () => { const event: KeyboardEvent = { keyCode: 90, ctrlKey: true, } as KeyboardEvent; panel.find('input').simulate('keydown', event); expect(onUndoSpy).toHaveBeenCalled(); }); it('on ctrl+y calls onRedo handler', () => { const event: KeyboardEvent = { keyCode: 89, ctrlKey: true, } as KeyboardEvent; panel.find('input').simulate('keydown', event); expect(onRedoSpy).toHaveBeenCalled(); }); }); describe('on mac platform', () => { beforeEach(() => { browser.mac = true; }); it('on cmd+z calls onUndo handler', () => { panel.find('input').simulate('keydown', { keyCode: 90, metaKey: true, }); expect(onUndoSpy).toHaveBeenCalled(); }); it('on cmd+shift+z calls onRedo handler', () => { panel.find('input').simulate('keydown', { keyCode: 90, shiftKey: true, metaKey: true, }); expect(onRedoSpy).toHaveBeenCalled(); }); it('should not undo if cmd+z is pressed with shift', () => { panel.find('input').simulate('keydown', { keyCode: 90, shiftKey: true, metaKey: true, }); expect(onUndoSpy).not.toHaveBeenCalled(); }); }); }); it('should focus input if autoFocus prop set to true', () => { panel = mount(); const inputNode: any = panel.find('input').instance(); jest.spyOn(inputNode, 'focus'); jest.runAllTimers(); expect(inputNode.focus).toHaveBeenCalled(); }); it('should focus input passing through focus options if autoFocus prop set to options', () => { panel = mount(); const inputNode: any = panel.find('input').instance(); jest.spyOn(inputNode, 'focus'); jest.runAllTimers(); expect(inputNode.focus).toHaveBeenCalledWith({ preventScroll: true }); }); });