UNPKG

redux-form

Version:

A higher order component decorator for forms using Redux and React

308 lines (270 loc) 13.7 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 _createFieldArrayProps = require('../createFieldArrayProps'); var _createFieldArrayProps2 = _interopRequireDefault(_createFieldArrayProps); var _plain = require('../structure/plain'); var _plain2 = _interopRequireDefault(_plain); var _expectations = require('../structure/plain/expectations'); var _expectations2 = _interopRequireDefault(_expectations); var _immutable = require('../structure/immutable'); var _immutable2 = _interopRequireDefault(_immutable); var _expectations3 = require('../structure/immutable/expectations'); var _expectations4 = _interopRequireDefault(_expectations3); var _addExpectations = require('./addExpectations'); var _addExpectations2 = _interopRequireDefault(_addExpectations); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var describeCreateFieldProps = function describeCreateFieldProps(name, structure, expect) { var fromJS = structure.fromJS; var getIn = structure.getIn; var size = structure.size; var defaultProps = [getIn, 'foo']; describe(name, function () { it('should pass props through', function () { expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ otherProp: 'hello' }])).otherProp).toBe('hello'); }); it('should pass props through using props prop', function () { expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ props: { otherProp: 'hello' } }])).otherProp).toBe('hello'); }); it('should pass dirty/pristine through', function () { expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ dirty: false, pristine: true }])).meta.dirty).toBe(false); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ dirty: false, pristine: true }])).meta.pristine).toBe(true); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ dirty: true, pristine: false }])).meta.dirty).toBe(true); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ dirty: true, pristine: false }])).meta.pristine).toBe(false); }); it('should provide length', function () { expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS([]), length: 0 }])).fields.length).toBe(0); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a']), length: 1 }])).fields.length).toBe(1); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), length: 2 }])).fields.length).toBe(2); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), length: 3 }])).fields.length).toBe(3); }); it('should provide errors', function () { expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ syncError: 'Sync Error' }])).meta.error).toBe('Sync Error'); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ syncError: 'Sync Error' }])).meta.valid).toBe(false); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ syncError: 'Sync Error' }])).meta.invalid).toBe(true); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ asyncError: 'Async Error' }])).meta.error).toBe('Async Error'); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ asyncError: 'Async Error' }])).meta.valid).toBe(false); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ asyncError: 'Async Error' }])).meta.invalid).toBe(true); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ submitError: 'Submit Error' }])).meta.error).toBe('Submit Error'); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ submitError: 'Submit Error' }])).meta.valid).toBe(false); expect(_createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ submitError: 'Submit Error' }])).meta.invalid).toBe(true); }); it('should provide move', function () { var arrayMove = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), arrayMove: arrayMove }])); expect(result.fields.move).toBeA('function'); expect(arrayMove).toNotHaveBeenCalled(); expect(result.fields.move(0, 2)).toNotExist(); expect(arrayMove).toHaveBeenCalled().toHaveBeenCalledWith(0, 2); }); it('should provide push', function () { var arrayPush = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), arrayPush: arrayPush }])); expect(result.fields.push).toBeA('function'); expect(arrayPush).toNotHaveBeenCalled(); expect(result.fields.push('c')).toNotExist(); expect(arrayPush).toHaveBeenCalled().toHaveBeenCalledWith('c'); }); it('should provide pop', function () { var arrayPop = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), length: 3, arrayPop: arrayPop }])); expect(result.fields.pop).toBeA('function'); expect(arrayPop).toNotHaveBeenCalled(); expect(result.fields.pop()).toBe('c'); expect(arrayPop).toHaveBeenCalled().toHaveBeenCalledWith(); }); it('should provide insert', function () { var arrayInsert = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), arrayInsert: arrayInsert }])); expect(result.fields.insert).toBeA('function'); expect(arrayInsert).toNotHaveBeenCalled(); expect(result.fields.insert(1, 'c')).toNotExist(); expect(arrayInsert).toHaveBeenCalled().toHaveBeenCalledWith(1, 'c'); }); it('should provide remove', function () { var arrayRemove = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), arrayRemove: arrayRemove }])); expect(result.fields.remove).toBeA('function'); expect(arrayRemove).toNotHaveBeenCalled(); expect(result.fields.remove(2)).toNotExist(); expect(arrayRemove).toHaveBeenCalled().toHaveBeenCalledWith(2); }); it('should provide removeAll', function () { var arrayRemoveAll = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), arrayRemoveAll: arrayRemoveAll }])); expect(result.fields.removeAll).toBeA('function'); expect(arrayRemoveAll).toNotHaveBeenCalled(); expect(result.fields.removeAll()).toNotExist(); expect(arrayRemoveAll).toHaveBeenCalled().toHaveBeenCalledWith(); }); it('should provide unshift', function () { var arrayUnshift = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b']), arrayUnshift: arrayUnshift }])); expect(result.fields.unshift).toBeA('function'); expect(arrayUnshift).toNotHaveBeenCalled(); expect(result.fields.unshift('c')).toNotExist(); expect(arrayUnshift).toHaveBeenCalled().toHaveBeenCalledWith('c'); }); it('should provide shift', function () { var arrayShift = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), arrayShift: arrayShift }])); expect(result.fields.shift).toBeA('function'); expect(arrayShift).toNotHaveBeenCalled(); expect(result.fields.shift()).toBe('a'); expect(arrayShift).toHaveBeenCalled().toHaveBeenCalledWith(); }); it('should provide forEach', function () { var callback = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']) }])); expect(result.fields.forEach).toBeA('function'); expect(callback).toNotHaveBeenCalled(); result.fields.forEach(callback); expect(callback).toHaveBeenCalled(); expect(callback.calls.length).toBe(3); expect(callback.calls[0].arguments).toEqual(['foo[0]', 0]); expect(callback.calls[1].arguments).toEqual(['foo[1]', 1]); expect(callback.calls[2].arguments).toEqual(['foo[2]', 2]); }); it('should provide map', function () { var callback = (0, _expect.createSpy)(function (name) { return { whatever: true, name: name }; }).andCallThrough(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), length: 3 }])); expect(result.fields.map).toBeA('function'); expect(callback).toNotHaveBeenCalled(); var mapResult = result.fields.map(callback); expect(size(mapResult), 3); expect(getIn(mapResult, 0)).toEqual({ whatever: true, name: 'foo[0]' }); expect(getIn(mapResult, 1)).toEqual({ whatever: true, name: 'foo[1]' }); expect(getIn(mapResult, 2)).toEqual({ whatever: true, name: 'foo[2]' }); expect(callback).toHaveBeenCalled(); expect(callback.calls.length).toBe(3); expect(callback.calls[0].arguments).toEqual(['foo[0]', 0]); expect(callback.calls[1].arguments).toEqual(['foo[1]', 1]); expect(callback.calls[2].arguments).toEqual(['foo[2]', 2]); }); it('should provide reduce', function () { var callback = (0, _expect.createSpy)(function (accumulator, name) { return _extends({}, accumulator, _defineProperty({}, name, { whatever: true, name: name })); }).andCallThrough(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']), length: 3 }])); expect(result.fields.reduce).toBeA('function'); expect(callback).toNotHaveBeenCalled(); var reduceResult = result.fields.reduce(callback, {}); expect(size(reduceResult), 3); expect(reduceResult['foo[0]']).toEqual({ whatever: true, name: 'foo[0]' }); expect(reduceResult['foo[1]']).toEqual({ whatever: true, name: 'foo[1]' }); expect(reduceResult['foo[2]']).toEqual({ whatever: true, name: 'foo[2]' }); expect(callback).toHaveBeenCalled(); expect(callback.calls.length).toBe(3); expect(callback.calls[0].arguments).toEqual([{}, 'foo[0]', 0]); expect(callback.calls[1].arguments).toEqual([{ 'foo[0]': { whatever: true, name: 'foo[0]' } }, 'foo[1]', 1]); expect(callback.calls[2].arguments).toEqual([{ 'foo[0]': { whatever: true, name: 'foo[0]' }, 'foo[1]': { whatever: true, name: 'foo[1]' } }, 'foo[2]', 2]); }); it('should provide reduce when no value', function () { var callback = (0, _expect.createSpy)(function (accumulator, name) { return _extends({}, accumulator, _defineProperty({}, name, { whatever: true, name: name })); }).andCallThrough(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{}])); expect(result.fields.reduce).toBeA('function'); expect(callback).toNotHaveBeenCalled(); var reduceResult = result.fields.reduce(callback, {}); expect(size(reduceResult), 0); expect(callback).toNotHaveBeenCalled(); }); it('should provide swap', function () { var arraySwap = (0, _expect.createSpy)(); var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ arraySwap: arraySwap, value: fromJS(['a', 'b', 'c']) }])); expect(result.fields.swap).toBeA('function'); expect(arraySwap).toNotHaveBeenCalled(); expect(result.fields.swap(0, 2)).toNotExist(); expect(arraySwap).toHaveBeenCalled().toHaveBeenCalledWith(0, 2); }); it('should provide a _isFieldArray meta prop', function () { var result = _createFieldArrayProps2.default.apply(undefined, defaultProps.concat([{ value: fromJS(['a', 'b', 'c']) }])); expect(result.fields._isFieldArray).toBe(true); }); }); }; describeCreateFieldProps('createFieldArrayProps.plain', _plain2.default, (0, _addExpectations2.default)(_expectations2.default)); describeCreateFieldProps('createFieldArrayProps.immutable', _immutable2.default, (0, _addExpectations2.default)(_expectations4.default));