/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License * 2.0 and the Server Side Public License, v 1; you may not use this file except * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ import React from 'react'; import { EuiFieldText } from '@elastic/eui'; import { mount } from 'enzyme'; import { DebouncedInput } from './debounced_input'; import { act } from 'react-dom/test-utils'; jest.mock('lodash', () => { const original = jest.requireActual('lodash'); return { ...original, debounce: (fn: unknown) => fn, }; }); describe('DebouncedInput', () => { it('should render', () => { const mockOnChange = jest.fn(); const wrapper = mount( ); const textProps = wrapper.find(EuiFieldText).props(); expect(textProps.value).toBe('my value'); expect(textProps.placeholder).toBe('default value'); act(() => { textProps.onChange!({ target: { value: 'new value' }, } as unknown as React.ChangeEvent); }); expect(mockOnChange).toHaveBeenCalledWith('new value'); }); it('should update placeholder when default value changes', () => { const wrapper = mount( {}} defaultValue={'old default'} /> ); expect(wrapper.find(EuiFieldText).props().placeholder).toBe('old default'); act(() => { wrapper.setProps({ defaultValue: 'new default' }); }); expect(wrapper.find(EuiFieldText).props().placeholder).toBe('new default'); }); it('should forward text field props', () => { const wrapper = mount( {}} defaultValue={'old default'} /> ); expect(wrapper.find(EuiFieldText).props()).toEqual( expect.objectContaining({ compressed: true, fullWidth: true, readOnly: true, }) ); }); });