UNPKG

redux-form

Version:

A higher order component decorator for forms using Redux and React

1,252 lines (1,164 loc) 112 kB
'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _expect = require('expect'); var _expect2 = _interopRequireDefault(_expect); var _reducer = require('../reducer'); var _reducer2 = _interopRequireDefault(_reducer); var _bindActionData = require('../bindActionData'); var _bindActionData2 = _interopRequireDefault(_bindActionData); var _actions = require('../actions'); var _fieldValue = require('../fieldValue'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var compare = function compare(a, b) { if (a.value > b.value) { return 1; } if (a.value < b.value) { return -1; } return 0; }; describe('reducer', function () { it('should initialize state to {}', function () { var state = (0, _reducer2.default)(); (0, _expect2.default)(state).toExist().toBeA('object'); (0, _expect2.default)(Object.keys(state).length).toBe(0); }); it('should not modify state when action has no form', function () { var state = { foo: 'bar' }; (0, _expect2.default)((0, _reducer2.default)(state, { type: 'SOMETHING_ELSE' })).toBe(state); }); it('should initialize form state when action has form', function () { var _expect$toExist$toBeA; var state = (0, _reducer2.default)(undefined, { form: 'foo' }); (0, _expect2.default)(state).toExist().toBeA('object'); (0, _expect2.default)(Object.keys(state).length).toBe(1); (0, _expect2.default)(state.foo).toExist().toBeA('object').toEqual((_expect$toExist$toBeA = { _active: undefined, _asyncValidating: false }, _expect$toExist$toBeA[_reducer.globalErrorKey] = undefined, _expect$toExist$toBeA._initialized = false, _expect$toExist$toBeA._submitting = false, _expect$toExist$toBeA._submitFailed = false, _expect$toExist$toBeA)); }); it('should add an empty array value with empty state', function () { var _expect$toEqual; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.addArrayValue)('myField'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual = { myField: [{ value: undefined }], _active: undefined, _asyncValidating: false }, _expect$toEqual[_reducer.globalErrorKey] = undefined, _expect$toEqual._initialized = false, _expect$toEqual._submitting = false, _expect$toEqual._submitFailed = false, _expect$toEqual)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField[0])).toBe(true); }); it('should add an empty deep array value with empty state', function () { var _expect$toEqual2; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.addArrayValue)('myField.myArray'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual2 = { myField: { myArray: [{ value: undefined }] }, _active: undefined, _asyncValidating: false }, _expect$toEqual2[_reducer.globalErrorKey] = undefined, _expect$toEqual2._initialized = false, _expect$toEqual2._submitting = false, _expect$toEqual2._submitFailed = false, _expect$toEqual2)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.myArray)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.myArray[0])).toBe(true); }); it('should add a deep array value with initial value', function () { var _expect$toEqual3; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.addArrayValue)('myField.myArray', 20, undefined), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual3 = { myField: { myArray: [{ value: 20 }] }, _active: undefined, _asyncValidating: false }, _expect$toEqual3[_reducer.globalErrorKey] = undefined, _expect$toEqual3._initialized = false, _expect$toEqual3._submitting = false, _expect$toEqual3._submitFailed = false, _expect$toEqual3)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.myArray)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.myArray[0])).toBe(true); }); it('should push an array value', function () { var _testForm, _expect$toEqual4; var state = (0, _reducer2.default)({ testForm: (_testForm = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' })], _active: undefined, _asyncValidating: false }, _testForm[_reducer.globalErrorKey] = undefined, _testForm._initialized = false, _testForm._submitting = false, _testForm._submitFailed = false, _testForm) }, _extends({}, (0, _actions.addArrayValue)('myField', 'baz'), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual4 = { myField: [{ value: 'foo' }, { value: 'bar' }, { value: 'baz' }], _active: undefined, _asyncValidating: false }, _expect$toEqual4[_reducer.globalErrorKey] = undefined, _expect$toEqual4._initialized = false, _expect$toEqual4._submitting = false, _expect$toEqual4._submitFailed = false, _expect$toEqual4)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(true); }); it('should insert an array value', function () { var _testForm2, _expect$toEqual5; var state = (0, _reducer2.default)({ testForm: (_testForm2 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' })], _active: undefined, _asyncValidating: false }, _testForm2[_reducer.globalErrorKey] = undefined, _testForm2._initialized = false, _testForm2._submitting = false, _testForm2._submitFailed = false, _testForm2) }, _extends({}, (0, _actions.addArrayValue)('myField', 'baz', 1), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual5 = { myField: [{ value: 'foo' }, { value: 'baz' }, { value: 'bar' }], _active: undefined, _asyncValidating: false }, _expect$toEqual5[_reducer.globalErrorKey] = undefined, _expect$toEqual5._initialized = false, _expect$toEqual5._submitting = false, _expect$toEqual5._submitFailed = false, _expect$toEqual5)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(true); }); // TODO: Find a way to make this pass: /* it('should push an array value which is a deep object', () => { const state = reducer({ testForm: { friends: [ { name: { initial: 'name-1', value: 'name-1' }, address: { street: { initial: 'street-1', value: 'street-1' }, postalCode: { initial: 'postalCode-1', value: 'postalCode-1' } } }, { name: { initial: 'name-2', value: 'name-2' }, address: { street: { initial: 'street-2', value: 'street-2' }, postalCode: { initial: 'postalCode-2', value: 'postalCode-2' } } } ], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false } }, { ...addArrayValue('friends', { name: 'name-3', address: { street: 'street-3', postalCode: 'postalCode-3' } }, undefined), form: 'testForm' }); expect(state.testForm) .toEqual({ friends: [ { name: { initial: 'name-1', value: 'name-1' }, address: { street: { initial: 'street-1', value: 'street-1' }, postalCode: { initial: 'postalCode-1', value: 'postalCode-1' } } }, { name: { initial: 'name-2', value: 'name-2' }, address: { street: { initial: 'street-2', value: 'street-2' }, postalCode: { initial: 'postalCode-2', value: 'postalCode-2' } } }, { name: { initial: 'name-3', value: 'name-3' }, address: { street: { initial: 'street-3', value: 'street-3' }, postalCode: { initial: 'postalCode-3', value: 'postalCode-3' } } } ], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false }); }); */ it('should push a deep array value which is a nested object', function () { var state = (0, _reducer2.default)({ testForm: { myField: [{ foo: (0, _fieldValue.makeFieldValue)({ initial: { a: 'foo-a1', b: 'foo-b1' }, value: { a: 'foo-a1', b: 'foo-b1' } }), bar: (0, _fieldValue.makeFieldValue)({ initial: { a: 'bar-a1', b: 'bar-b1' }, value: { a: 'bar-a1', b: 'bar-b1' } }) }, { foo: (0, _fieldValue.makeFieldValue)({ initial: { a: 'foo-a2', b: 'foo-b2' }, value: { a: 'foo-a2', b: 'foo-b2' } }), bar: (0, _fieldValue.makeFieldValue)({ initial: { a: 'bar-a2', b: 'bar-b2' }, value: { a: 'bar-a2', b: 'bar-b2' } }) }], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false } }, _extends({}, (0, _actions.addArrayValue)('myField', { foo: { a: 'foo-a3', b: 'foo-b3' }, bar: { a: 'bar-a3', b: 'bar-b3' } }, undefined), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual({ myField: [{ foo: { initial: { a: 'foo-a1', b: 'foo-b1' }, value: { a: 'foo-a1', b: 'foo-b1' } }, bar: { initial: { a: 'bar-a1', b: 'bar-b1' }, value: { a: 'bar-a1', b: 'bar-b1' } } }, { foo: { initial: { a: 'foo-a2', b: 'foo-b2' }, value: { a: 'foo-a2', b: 'foo-b2' } }, bar: { initial: { a: 'bar-a2', b: 'bar-b2' }, value: { a: 'bar-a2', b: 'bar-b2' } } }, { foo: { initial: { a: 'foo-a3', b: 'foo-b3' }, value: { a: 'foo-a3', b: 'foo-b3' } }, bar: { initial: { a: 'bar-a3', b: 'bar-b3' }, value: { a: 'bar-a3', b: 'bar-b3' } } }], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false }); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2].bar)).toBe(true); }); it('should push a subarray value which is an object', function () { var state = (0, _reducer2.default)({ testForm: { myField: [{ myField2: [{ foo: (0, _fieldValue.makeFieldValue)({ initial: 'foo-1-1', value: 'foo-1-1' }), bar: (0, _fieldValue.makeFieldValue)({ initial: 'bar-1-1', value: 'bar-1-1' }) }, { foo: (0, _fieldValue.makeFieldValue)({ initial: 'foo-1-2', value: 'foo-1-2' }), bar: (0, _fieldValue.makeFieldValue)({ initial: 'bar-1-2', value: 'bar-1-2' }) }] }, { myField2: [{ foo: (0, _fieldValue.makeFieldValue)({ initial: 'foo-2-1', value: 'foo-2-1' }), bar: (0, _fieldValue.makeFieldValue)({ initial: 'bar-2-1', value: 'bar-2-1' }) }, { foo: (0, _fieldValue.makeFieldValue)({ initial: 'foo-2-2', value: 'foo-2-2' }), bar: (0, _fieldValue.makeFieldValue)({ initial: 'bar-2-2', value: 'bar-2-2' }) }] }], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false } }, _extends({}, (0, _actions.addArrayValue)('myField[1].myField2', { foo: 'foo-2-3', bar: 'bar-2-3' }, undefined), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual({ myField: [{ myField2: [{ foo: { initial: 'foo-1-1', value: 'foo-1-1' }, bar: { initial: 'bar-1-1', value: 'bar-1-1' } }, { foo: { initial: 'foo-1-2', value: 'foo-1-2' }, bar: { initial: 'bar-1-2', value: 'bar-1-2' } }] }, { myField2: [{ foo: { initial: 'foo-2-1', value: 'foo-2-1' }, bar: { initial: 'bar-2-1', value: 'bar-2-1' } }, { foo: { initial: 'foo-2-2', value: 'foo-2-2' }, bar: { initial: 'bar-2-2', value: 'bar-2-2' } }, { foo: { initial: 'foo-2-3', value: 'foo-2-3' }, bar: { initial: 'bar-2-3', value: 'bar-2-3' } }] }], _active: undefined, _asyncValidating: false, _error: undefined, _initialized: false, _submitting: false, _submitFailed: false }); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[0])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[0].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[0].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[1])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[1].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0].myField2[1].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[0])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[0].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[0].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[1])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[1].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[1].bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[2])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[2].foo)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1].myField2[2].bar)).toBe(true); }); it('should set value on blur with empty state', function () { var _expect$toEqual6; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.blur)('myField', 'myValue'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual6 = { myField: { value: 'myValue' }, _asyncValidating: false }, _expect$toEqual6[_reducer.globalErrorKey] = undefined, _expect$toEqual6._initialized = false, _expect$toEqual6._submitting = false, _expect$toEqual6._submitFailed = false, _expect$toEqual6)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set value on blur and touch with empty state', function () { var _expect$toEqual7; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.blur)('myField', 'myValue'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual7 = { myField: { value: 'myValue', touched: true }, _asyncValidating: false }, _expect$toEqual7[_reducer.globalErrorKey] = undefined, _expect$toEqual7._initialized = false, _expect$toEqual7._submitting = false, _expect$toEqual7._submitFailed = false, _expect$toEqual7)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set value on blur and touch with initial value', function () { var _foo, _expect$toEqual8; var state = (0, _reducer2.default)({ foo: (_foo = { myField: (0, _fieldValue.makeFieldValue)({ initial: 'initialValue', value: 'initialValue', touched: false }), _asyncValidating: false }, _foo[_reducer.globalErrorKey] = undefined, _foo._initialized = false, _foo._submitting = false, _foo._submitFailed = false, _foo) }, _extends({}, (0, _actions.blur)('myField', 'myValue'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual8 = { myField: { initial: 'initialValue', value: 'myValue', touched: true }, _asyncValidating: false }, _expect$toEqual8[_reducer.globalErrorKey] = undefined, _expect$toEqual8._initialized = false, _expect$toEqual8._submitting = false, _expect$toEqual8._submitFailed = false, _expect$toEqual8)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should not modify value if undefined is passed on blur (for android react native)', function () { var _foo2, _expect$toEqual9; var state = (0, _reducer2.default)({ foo: (_foo2 = { myField: (0, _fieldValue.makeFieldValue)({ initial: 'initialValue', value: 'myValue', touched: false }), _active: 'myField', _asyncValidating: false }, _foo2[_reducer.globalErrorKey] = undefined, _foo2._initialized = false, _foo2._submitting = false, _foo2._submitFailed = false, _foo2) }, _extends({}, (0, _actions.blur)('myField'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual9 = { myField: { initial: 'initialValue', value: 'myValue', touched: true }, _asyncValidating: false }, _expect$toEqual9[_reducer.globalErrorKey] = undefined, _expect$toEqual9._initialized = false, _expect$toEqual9._submitting = false, _expect$toEqual9._submitFailed = false, _expect$toEqual9)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should not modify value if undefined is passed on blur, even if no value existed (for android react native)', function () { var _foo3, _expect$toEqual10; var state = (0, _reducer2.default)({ foo: (_foo3 = { myField: (0, _fieldValue.makeFieldValue)({ value: undefined }), _active: 'myField', _asyncValidating: false }, _foo3[_reducer.globalErrorKey] = undefined, _foo3._initialized = false, _foo3._submitting = false, _foo3._submitFailed = false, _foo3) }, _extends({}, (0, _actions.blur)('myField'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual10 = { myField: { value: undefined, touched: true }, _asyncValidating: false }, _expect$toEqual10[_reducer.globalErrorKey] = undefined, _expect$toEqual10._initialized = false, _expect$toEqual10._submitting = false, _expect$toEqual10._submitFailed = false, _expect$toEqual10)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set nested value on blur', function () { var _foo4, _expect$toEqual11; var state = (0, _reducer2.default)({ foo: (_foo4 = { myField: { mySubField: (0, _fieldValue.makeFieldValue)({ value: undefined }) }, _active: 'myField', _asyncValidating: false }, _foo4[_reducer.globalErrorKey] = undefined, _foo4._initialized = false, _foo4._submitting = false, _foo4._submitFailed = false, _foo4) }, _extends({}, (0, _actions.blur)('myField.mySubField', 'hello'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual11 = { myField: { mySubField: { value: 'hello', touched: true } }, _asyncValidating: false }, _expect$toEqual11[_reducer.globalErrorKey] = undefined, _expect$toEqual11._initialized = false, _expect$toEqual11._submitting = false, _expect$toEqual11._submitFailed = false, _expect$toEqual11)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.mySubField)).toBe(true); }); it('should set array value on blur', function () { var _foo5, _expect$toEqual12; var state = (0, _reducer2.default)({ foo: (_foo5 = { myArray: [(0, _fieldValue.makeFieldValue)({ value: undefined })], _active: 'myField', _asyncValidating: false }, _foo5[_reducer.globalErrorKey] = undefined, _foo5._initialized = false, _foo5._submitting = false, _foo5._submitFailed = false, _foo5) }, _extends({}, (0, _actions.blur)('myArray[0]', 'hello'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual12 = { myArray: [{ value: 'hello', touched: true }], _asyncValidating: false }, _expect$toEqual12[_reducer.globalErrorKey] = undefined, _expect$toEqual12._initialized = false, _expect$toEqual12._submitting = false, _expect$toEqual12._submitFailed = false, _expect$toEqual12)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myArray[0])).toBe(true); }); it('should set value on change with empty state', function () { var _expect$toEqual13; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.change)('myField', 'myValue'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual13 = { myField: { value: 'myValue' }, _active: undefined, // CHANGE doesn't touch _active _asyncValidating: false }, _expect$toEqual13[_reducer.globalErrorKey] = undefined, _expect$toEqual13._initialized = false, _expect$toEqual13._submitting = false, _expect$toEqual13._submitFailed = false, _expect$toEqual13)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set value on change and touch with empty state', function () { var _expect$toEqual14; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.change)('myField', 'myValue'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual14 = { myField: { value: 'myValue', touched: true }, _active: undefined, // CHANGE doesn't touch _active _asyncValidating: false }, _expect$toEqual14[_reducer.globalErrorKey] = undefined, _expect$toEqual14._initialized = false, _expect$toEqual14._submitting = false, _expect$toEqual14._submitFailed = false, _expect$toEqual14)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set value on change and touch with initial value', function () { var _foo6, _expect$toEqual15; var state = (0, _reducer2.default)({ foo: (_foo6 = { myField: (0, _fieldValue.makeFieldValue)({ initial: 'initialValue', value: 'initialValue', touched: false }), _active: 'myField', _asyncValidating: false }, _foo6[_reducer.globalErrorKey] = 'Some global error', _foo6._initialized = false, _foo6._submitting = false, _foo6._submitFailed = false, _foo6) }, _extends({}, (0, _actions.change)('myField', 'myValue'), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual15 = { myField: { initial: 'initialValue', value: 'myValue', touched: true }, _active: 'myField', _asyncValidating: false }, _expect$toEqual15[_reducer.globalErrorKey] = 'Some global error', _expect$toEqual15._initialized = false, _expect$toEqual15._submitting = false, _expect$toEqual15._submitFailed = false, _expect$toEqual15)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set value on change and remove field-level submit and async errors', function () { var _foo7, _expect$toEqual16; var state = (0, _reducer2.default)({ foo: (_foo7 = { myField: (0, _fieldValue.makeFieldValue)({ value: 'initial', submitError: 'submit error', asyncError: 'async error' }), _active: 'myField', _asyncValidating: false }, _foo7[_reducer.globalErrorKey] = 'Some global error', _foo7._initialized = false, _foo7._submitting = false, _foo7._submitFailed = false, _foo7) }, _extends({}, (0, _actions.change)('myField', 'different'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual16 = { myField: { value: 'different' }, _active: 'myField', _asyncValidating: false }, _expect$toEqual16[_reducer.globalErrorKey] = 'Some global error', _expect$toEqual16._initialized = false, _expect$toEqual16._submitting = false, _expect$toEqual16._submitFailed = false, _expect$toEqual16)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set nested value on change with empty state', function () { var _expect$toEqual17; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.change)('myField.mySubField', 'myValue'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual17 = { myField: { mySubField: { value: 'myValue' } }, _active: undefined, // CHANGE doesn't touch _active _asyncValidating: false }, _expect$toEqual17[_reducer.globalErrorKey] = undefined, _expect$toEqual17._initialized = false, _expect$toEqual17._submitting = false, _expect$toEqual17._submitFailed = false, _expect$toEqual17)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.mySubField)).toBe(true); }); it('should set visited on focus and update active with no previous state', function () { var _expect$toEqual18; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.focus)('myField'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual18 = { myField: { visited: true }, _active: 'myField', _asyncValidating: false }, _expect$toEqual18[_reducer.globalErrorKey] = undefined, _expect$toEqual18._initialized = false, _expect$toEqual18._submitting = false, _expect$toEqual18._submitFailed = false, _expect$toEqual18)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set visited on focus and update active on deep field with no previous state', function () { var _expect$toEqual19; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.focus)('myField.subField'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual19 = { myField: { subField: { visited: true } }, _active: 'myField.subField', _asyncValidating: false }, _expect$toEqual19[_reducer.globalErrorKey] = undefined, _expect$toEqual19._initialized = false, _expect$toEqual19._submitting = false, _expect$toEqual19._submitFailed = false, _expect$toEqual19)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.subField)).toBe(true); }); it('should set visited on focus and update current with previous state', function () { var _foo8, _expect$toEqual20; var state = (0, _reducer2.default)({ foo: (_foo8 = { myField: (0, _fieldValue.makeFieldValue)({ initial: 'initialValue', value: 'initialValue', visited: false }), _active: 'otherField', _asyncValidating: false }, _foo8[_reducer.globalErrorKey] = undefined, _foo8._initialized = false, _foo8._submitting = false, _foo8._submitFailed = false, _foo8) }, _extends({}, (0, _actions.focus)('myField'), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual20 = { myField: { initial: 'initialValue', value: 'initialValue', visited: true }, _active: 'myField', _asyncValidating: false }, _expect$toEqual20[_reducer.globalErrorKey] = undefined, _expect$toEqual20._initialized = false, _expect$toEqual20._submitting = false, _expect$toEqual20._submitFailed = false, _expect$toEqual20)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should set initialize values on initialize on empty state', function () { var _expect$toEqual21; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.initialize)({ myField: 'initialValue' }, ['myField']), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual21 = { myField: { initial: 'initialValue', value: 'initialValue' }, _active: undefined, _asyncValidating: false }, _expect$toEqual21[_reducer.globalErrorKey] = undefined, _expect$toEqual21._initialized = true, _expect$toEqual21._submitting = false, _expect$toEqual21._submitFailed = false, _expect$toEqual21)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should allow initializing null values', function () { var _expect$toEqual22; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.initialize)({ bar: 'baz', dog: null }, ['bar', 'dog']), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual22 = { bar: { initial: 'baz', value: 'baz' }, dog: { initial: null, value: null }, _active: undefined, _asyncValidating: false }, _expect$toEqual22[_reducer.globalErrorKey] = undefined, _expect$toEqual22._initialized = true, _expect$toEqual22._submitting = false, _expect$toEqual22._submitFailed = false, _expect$toEqual22)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.bar)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.dog)).toBe(true); }); it('should initialize nested values on initialize on empty state', function () { var _expect$toEqual23; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.initialize)({ myField: { subField: 'initialValue' } }, ['myField.subField'], {}), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual23 = { myField: { subField: { initial: 'initialValue', value: 'initialValue' } }, _active: undefined, _asyncValidating: false }, _expect$toEqual23[_reducer.globalErrorKey] = undefined, _expect$toEqual23._initialized = true, _expect$toEqual23._submitting = false, _expect$toEqual23._submitFailed = false, _expect$toEqual23)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField.subField)).toBe(true); }); it('should initialize array values on initialize on empty state', function () { var _expect$toEqual24; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.initialize)({ myField: ['initialValue'] }, ['myField[]'], {}), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual24 = { myField: [{ initial: 'initialValue', value: 'initialValue' }], _active: undefined, _asyncValidating: false }, _expect$toEqual24[_reducer.globalErrorKey] = undefined, _expect$toEqual24._initialized = true, _expect$toEqual24._submitting = false, _expect$toEqual24._submitFailed = false, _expect$toEqual24)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField[0])).toBe(true); }); it('should initialize array values with subvalues on initialize on empty state', function () { var _expect$toEqual25; var state = (0, _reducer2.default)({}, _extends({}, (0, _actions.initialize)({ accounts: [{ name: 'Bobby Tables', email: 'bobby@gmail.com' }, { name: 'Sammy Tables', email: 'sammy@gmail.com' }] }, ['accounts[].name', 'accounts[].email'], {}), { form: 'foo' })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual25 = { accounts: [{ name: { initial: 'Bobby Tables', value: 'Bobby Tables' }, email: { initial: 'bobby@gmail.com', value: 'bobby@gmail.com' } }, { name: { initial: 'Sammy Tables', value: 'Sammy Tables' }, email: { initial: 'sammy@gmail.com', value: 'sammy@gmail.com' } }], _active: undefined, _asyncValidating: false }, _expect$toEqual25[_reducer.globalErrorKey] = undefined, _expect$toEqual25._initialized = true, _expect$toEqual25._submitting = false, _expect$toEqual25._submitFailed = false, _expect$toEqual25)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[0])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[0].name)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[0].email)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[1])).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[1].name)).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.accounts[1].email)).toBe(true); }); it('should set initialize values, making form pristine when initializing', function () { var _foo9, _expect$toEqual26; var state = (0, _reducer2.default)({ foo: (_foo9 = { myField: (0, _fieldValue.makeFieldValue)({ value: 'dirtyValue', touched: true }), _active: 'myField', _asyncValidating: false }, _foo9[_reducer.globalErrorKey] = undefined, _foo9._initialized = false, _foo9._submitting = false, _foo9._submitFailed = false, _foo9) }, _extends({}, (0, _actions.initialize)({ myField: 'cleanValue' }, ['myField']), { form: 'foo', touch: true })); (0, _expect2.default)(state.foo).toEqual((_expect$toEqual26 = { myField: { initial: 'cleanValue', value: 'cleanValue' }, _active: undefined, _asyncValidating: false }, _expect$toEqual26[_reducer.globalErrorKey] = undefined, _expect$toEqual26._initialized = true, _expect$toEqual26._submitting = false, _expect$toEqual26._submitFailed = false, _expect$toEqual26)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.foo.myField)).toBe(true); }); it('should pop an array value', function () { var _testForm3, _expect$toEqual27; var state = (0, _reducer2.default)({ testForm: (_testForm3 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' })], _active: undefined, _asyncValidating: false }, _testForm3[_reducer.globalErrorKey] = undefined, _testForm3._initialized = false, _testForm3._submitting = false, _testForm3._submitFailed = false, _testForm3) }, _extends({}, (0, _actions.removeArrayValue)('myField'), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual27 = { myField: [{ value: 'foo' }], _active: undefined, _asyncValidating: false }, _expect$toEqual27[_reducer.globalErrorKey] = undefined, _expect$toEqual27._initialized = false, _expect$toEqual27._submitting = false, _expect$toEqual27._submitFailed = false, _expect$toEqual27)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); }); it('should not change empty array value on remove', function () { var _testForm4, _expect$toEqual28; var state = (0, _reducer2.default)({ testForm: (_testForm4 = { myField: [], _active: undefined, _asyncValidating: false }, _testForm4[_reducer.globalErrorKey] = undefined, _testForm4._initialized = false, _testForm4._submitting = false, _testForm4._submitFailed = false, _testForm4) }, _extends({}, (0, _actions.removeArrayValue)('myField'), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual28 = { myField: [], _active: undefined, _asyncValidating: false }, _expect$toEqual28[_reducer.globalErrorKey] = undefined, _expect$toEqual28._initialized = false, _expect$toEqual28._submitting = false, _expect$toEqual28._submitFailed = false, _expect$toEqual28)); }); it('should remove an array value from start of array', function () { var _testForm5, _expect$toEqual29; var state = (0, _reducer2.default)({ testForm: (_testForm5 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' }), (0, _fieldValue.makeFieldValue)({ value: 'baz' })], _active: undefined, _asyncValidating: false }, _testForm5[_reducer.globalErrorKey] = undefined, _testForm5._initialized = false, _testForm5._submitting = false, _testForm5._submitFailed = false, _testForm5) }, _extends({}, (0, _actions.removeArrayValue)('myField', 0), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual29 = { myField: [{ value: 'bar' }, { value: 'baz' }], _active: undefined, _asyncValidating: false }, _expect$toEqual29[_reducer.globalErrorKey] = undefined, _expect$toEqual29._initialized = false, _expect$toEqual29._submitting = false, _expect$toEqual29._submitFailed = false, _expect$toEqual29)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); }); it('should remove an array value from middle of array', function () { var _testForm6, _expect$toEqual30; var state = (0, _reducer2.default)({ testForm: (_testForm6 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' }), (0, _fieldValue.makeFieldValue)({ value: 'baz' })], _active: undefined, _asyncValidating: false }, _testForm6[_reducer.globalErrorKey] = undefined, _testForm6._initialized = false, _testForm6._submitting = false, _testForm6._submitFailed = false, _testForm6) }, _extends({}, (0, _actions.removeArrayValue)('myField', 1), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual30 = { myField: [{ value: 'foo' }, { value: 'baz' }], _active: undefined, _asyncValidating: false }, _expect$toEqual30[_reducer.globalErrorKey] = undefined, _expect$toEqual30._initialized = false, _expect$toEqual30._submitting = false, _expect$toEqual30._submitFailed = false, _expect$toEqual30)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); }); it('should not change empty array value on swap', function () { var _testForm7, _expect$toEqual31; var state = (0, _reducer2.default)({ testForm: (_testForm7 = { myField: [], _active: undefined, _asyncValidating: false }, _testForm7[_reducer.globalErrorKey] = undefined, _testForm7._initialized = false, _testForm7._submitting = false, _testForm7._submitFailed = false, _testForm7) }, _extends({}, (0, _actions.swapArrayValues)('myField'), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual31 = { myField: [], _active: undefined, _asyncValidating: false }, _expect$toEqual31[_reducer.globalErrorKey] = undefined, _expect$toEqual31._initialized = false, _expect$toEqual31._submitting = false, _expect$toEqual31._submitFailed = false, _expect$toEqual31)); }); it('should should swap two array values at different indexes', function () { var _testForm8, _expect$toEqual32; var state = (0, _reducer2.default)({ testForm: (_testForm8 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' }), (0, _fieldValue.makeFieldValue)({ value: 'baz' })], _active: undefined, _asyncValidating: false }, _testForm8[_reducer.globalErrorKey] = undefined, _testForm8._initialized = false, _testForm8._submitting = false, _testForm8._submitFailed = false, _testForm8) }, _extends({}, (0, _actions.swapArrayValues)('myField', 0, 2), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual32 = { myField: [{ value: 'baz' }, { value: 'bar' }, { value: 'foo' }], _active: undefined, _asyncValidating: false }, _expect$toEqual32[_reducer.globalErrorKey] = undefined, _expect$toEqual32._initialized = false, _expect$toEqual32._submitting = false, _expect$toEqual32._submitFailed = false, _expect$toEqual32)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(true); }); it('should not change array on swap with the same index', function () { var _testForm9, _expect$toEqual33; var state = (0, _reducer2.default)({ testForm: (_testForm9 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' }), (0, _fieldValue.makeFieldValue)({ value: 'baz' })], _active: undefined, _asyncValidating: false }, _testForm9[_reducer.globalErrorKey] = undefined, _testForm9._initialized = false, _testForm9._submitting = false, _testForm9._submitFailed = false, _testForm9) }, _extends({}, (0, _actions.swapArrayValues)('myField', 1, 1), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual33 = { myField: [{ value: 'foo' }, { value: 'bar' }, { value: 'baz' }], _active: undefined, _asyncValidating: false }, _expect$toEqual33[_reducer.globalErrorKey] = undefined, _expect$toEqual33._initialized = false, _expect$toEqual33._submitting = false, _expect$toEqual33._submitFailed = false, _expect$toEqual33)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(true); }); it('should not change array on swap with out of bounds index', function () { var _testForm10, _expect$toEqual34; var state = (0, _reducer2.default)({ testForm: (_testForm10 = { myField: [(0, _fieldValue.makeFieldValue)({ value: 'foo' }), (0, _fieldValue.makeFieldValue)({ value: 'bar' }), (0, _fieldValue.makeFieldValue)({ value: 'baz' })], _active: undefined, _asyncValidating: false }, _testForm10[_reducer.globalErrorKey] = undefined, _testForm10._initialized = false, _testForm10._submitting = false, _testForm10._submitFailed = false, _testForm10) }, _extends({}, (0, _actions.swapArrayValues)('myField', 1, 4), { form: 'testForm' })); (0, _expect2.default)(state.testForm).toEqual((_expect$toEqual34 = { myField: [{ value: 'foo' }, { value: 'bar' }, { value: 'baz' }], _active: undefined, _asyncValidating: false }, _expect$toEqual34[_reducer.globalErrorKey] = undefined, _expect$toEqual34._initialized = false, _expect$toEqual34._submitting = false, _expect$toEqual34._submitFailed = false, _expect$toEqual34)); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField)).toBe(false); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[0])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[1])).toBe(true); (0, _expect2.default)((0, _fieldValue.isFieldValue)(state.testForm.myField[2])).toBe(true); }); it('should reset values on reset on with previous state', function () { var _foo10, _expect$toEqual35; var state = (0, _reducer2.default)({ foo: (_foo10 = { myField: (0, _fieldValue.makeFieldValue)({ initial: 'initialValue', value: 'dirtyValue', touched: true }), myOtherField: (0, _fieldValue.makeFieldValue)({ initial: 'otherInitialValue', value: 'otherDirtyValue', touched: true }), _active: 'myField', _asyncValidating: false }, _foo10[_reducer.globalErrorKey] = undefined, _foo10._initialized = false, _foo10