/* * SonarQube * Copyright (C) 2009-2021 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { mount, shallow } from 'enzyme'; import * as React from 'react'; import { change, click } from '../../../helpers/testUtils'; import SearchBox from '../SearchBox'; jest.mock('lodash', () => { const lodash = jest.requireActual('lodash'); const debounce = (fn: Function) => { const debounced: any = (...args: any[]) => fn(...args); debounced.cancel = jest.fn(); return debounced; }; return Object.assign({}, lodash, { debounce }); }); it('renders', () => { const wrapper = shallow( ); expect(wrapper).toMatchSnapshot(); }); it('warns when input is too short', () => { const wrapper = shallow( ); expect(wrapper.find('.search-box-note').exists()).toBe(true); }); it('shows clear button only when there is a value', () => { const wrapper = shallow(); expect(wrapper.find('.search-box-clear').exists()).toBe(true); wrapper.setProps({ value: '' }); expect(wrapper.find('.search-box-clear').exists()).toBe(false); }); it('attaches ref', () => { const ref = jest.fn(); mount(); expect(ref).toBeCalled(); expect(ref.mock.calls[0][0]).toBeInstanceOf(HTMLInputElement); }); it('resets', () => { const onChange = jest.fn(); const wrapper = shallow(); click(wrapper.find('.search-box-clear')); expect(onChange).toBeCalledWith(''); }); it('changes', () => { const onChange = jest.fn(); const wrapper = shallow(); change(wrapper.find('.search-box-input'), 'foo'); expect(onChange).toBeCalledWith('foo'); }); it('does not change when value is too short', () => { const onChange = jest.fn(); const wrapper = shallow( ); change(wrapper.find('.search-box-input'), 'fo'); expect(onChange).not.toBeCalled(); });