import React from 'react';
import expect, { createSpy, restoreSpies } from 'expect';
import { mount } from 'enzyme';
import ConfigOptionsForm from 'components/forms/ConfigOptionsForm';
import { configOptionStub } from 'test/stubs';
import { fillInFormInput } from 'test/helpers';
describe('ConfigOptionsForm - form', () => {
afterEach(restoreSpies);
it('renders a ConfigOptionForm for each completed config option', () => {
const formWithOneOption = mount();
const formWithTwoOptions = mount();
expect(formWithOneOption.find('ConfigOptionForm').length).toEqual(1);
expect(formWithTwoOptions.find('ConfigOptionForm').length).toEqual(2);
});
it('calls the onFormUpdate prop with the old and new option when the option is updated', () => {
const spy = createSpy();
const form = mount();
const configOptionFormInput = form.find('ConfigOptionForm').find('InputField');
fillInFormInput(configOptionFormInput.find('input'), 'updated value');
expect(spy).toHaveBeenCalledWith(configOptionStub, { ...configOptionStub, value: 'updated value' });
});
describe('error rendering', () => {
it('sets errors on the ConfigOptionForm correctly when there are errors', () => {
const errors = {
[configOptionStub.id]: { name: 'Must be unique' },
10101: { name: 'Something went wrong' },
};
const form = mount();
const configOptionForm = form.find('ConfigOptionForm');
expect(configOptionForm.prop('serverErrors')).toEqual({
name: 'Must be unique',
});
});
it('sets errors on the ConfigOptionForm correctly when there are errors on a different object', () => {
const errors = {
10101: { name: 'Something went wrong' },
};
const form = mount();
const configOptionForm = form.find('ConfigOptionForm');
expect(configOptionForm.prop('serverErrors')).toEqual({});
});
it('sets errors on the ConfigOptionForm correctly when there are no errors', () => {
const errors = {};
const form = mount();
const configOptionForm = form.find('ConfigOptionForm');
expect(configOptionForm.prop('serverErrors')).toEqual({});
});
});
});