import {mountWithTheme} from 'sentry-test/enzyme';
import {selectByValue} from 'sentry-test/select-new';
import {Form, SelectField} from 'app/components/forms';
describe('SelectField', function () {
it('renders without form context', function () {
const wrapper = mountWithTheme(
);
expect(wrapper).toSnapshot();
});
it('renders with flat choices', function () {
const wrapper = mountWithTheme(
,
{
context: {
form: {
data: {
fieldName: 'fieldValue',
},
errors: {},
},
},
}
);
expect(wrapper).toSnapshot();
});
it('renders with paired choices', function () {
const wrapper = mountWithTheme(
,
{
context: {
form: {
data: {
fieldName: 'fieldValue',
},
errors: {},
},
},
}
);
expect(wrapper).toSnapshot();
});
it('can change value and submit', function () {
const mock = jest.fn();
const wrapper = mountWithTheme(
);
selectByValue(wrapper, 'a', {name: 'fieldName'});
wrapper.find('Form').simulate('submit');
expect(mock).toHaveBeenCalledWith(
{fieldName: 'a'},
expect.anything(),
expect.anything()
);
});
it('can set the value to empty string via props with no options', function () {
const mock = jest.fn();
const wrapper = mountWithTheme(
);
// Select a value so there is an option selected.
selectByValue(wrapper, 'a', {name: 'fieldName'});
expect(mock).toHaveBeenCalledTimes(1);
expect(mock).toHaveBeenLastCalledWith('a');
// Update props to remove value and options.
wrapper.setProps({value: '', options: []});
wrapper.update();
expect(wrapper.find('SelectPicker').props().value).toEqual('');
// second update.
expect(mock).toHaveBeenCalledTimes(2);
expect(mock).toHaveBeenLastCalledWith('');
});
describe('Multiple', function () {
it('selects multiple values and submits', function () {
const mock = jest.fn();
const wrapper = mountWithTheme(
);
selectByValue(wrapper, 'a', {name: 'fieldName'});
wrapper.find('Form').simulate('submit');
expect(mock).toHaveBeenCalledWith(
{fieldName: ['a']},
expect.anything(),
expect.anything()
);
});
});
});