import _ from 'lodash';
import React, { ReactElement } from 'react';
import { shallow } from 'enzyme';
import assert from 'assert';
import { common } from '../../util/generic-tests';
import { SearchFieldDumb as SearchField } from './SearchField';
import TextField from '../TextField/TextField';
import SearchIcon from '../Icon/SearchIcon/SearchIcon';
describe('SearchField', () => {
common(SearchField);
describe('props', () => {
const fn = _.noop;
const defaultProps = SearchField.defaultProps;
describe('onSubmit', () => {
it('should pass onSubmit to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.props().onSubmit, fn);
});
});
describe('onChange', () => {
it('should pass onChange to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.props().onChange, fn);
});
});
describe('onChangeDebounced', () => {
it('should pass onChangeDebounced to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.props().onChangeDebounced, fn);
});
});
describe('debounceLevel', () => {
it('should pass the `debounceLevel` prop thru to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.prop('debounceLevel'), 1000);
});
});
describe('isDisabled', () => {
it('should pass the `isDisabled` prop thru to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.prop('isDisabled'), true);
});
});
describe('value', () => {
it('should pass a string value prop thru to the underlying TextField', () => {
const valueText = 'Name/ID';
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(textFieldWrapper.prop('value'), valueText);
});
});
describe('placeholder', () => {
it('shold pass a placeholder text thru to the underlying TextField', () => {
const placeholderText = 'Some placeholder text';
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(TextField).first();
assert.strictEqual(
textFieldWrapper.prop('placeholder'),
placeholderText
);
});
});
describe('isValid', () => {
it('should pass the `&-Icon-active` class to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(SearchIcon).first();
assert.strictEqual(
textFieldWrapper.hasClass('lucid-SearchField-Icon-active'),
true
);
});
it('should not pass the `-Icon-active` class to the underlying TextField', () => {
const wrapper = shallow(
);
const textFieldWrapper = wrapper.find(SearchIcon).first();
assert.strictEqual(
textFieldWrapper.hasClass('lucid-SearchField-Icon-active'),
false
);
});
});
describe('nonPassThroughs', () => {
it('should filter out specfic props from the SearchField wrapper', () => {
const nonPassThroughs = {
onChange: fn,
onChangeDebounced: fn,
debounceLevel: 1000,
onSubmit: fn,
value: 'search',
isValid: true,
isDisabled: true,
placeholder: 'some placeholder text',
className: 'testClassName',
Icon: ,
TextField: <>>,
initialState: {},
callbackId: 1,
};
const combinedProps = { ...defaultProps, ...nonPassThroughs };
const wrapper = shallow();
assert.strictEqual(wrapper.prop('callbackId'), undefined);
assert.strictEqual(wrapper.prop('initalState'), undefined);
assert.strictEqual(wrapper.prop('Icon'), undefined);
assert.strictEqual(wrapper.prop('TextField'), undefined);
});
});
});
});