UNPKG

redux-form

Version:

A higher order component decorator for forms using Redux and React

253 lines (221 loc) 6.98 kB
'use strict'; var _formValueSelector = require('../formValueSelector'); var _formValueSelector2 = _interopRequireDefault(_formValueSelector); 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 }; } /* eslint react/no-multi-comp:0 */ var describeFormValueSelector = function describeFormValueSelector(name, structure, expect) { var fromJS = structure.fromJS; var getIn = structure.getIn; var formValueSelector = (0, _formValueSelector2.default)(structure); describe(name, function () { it('should throw an error if no form specified', function () { expect(function () { return formValueSelector(); }).toThrow('Form value must be specified'); }); it('should return a function', function () { expect(formValueSelector('myForm')).toBeA('function'); }); it('should throw an error if no fields specified', function () { var selector = formValueSelector('myForm'); var state = fromJS({}); expect(function () { return selector(state); }).toThrow('No fields specified'); }); it('should return undefined for a single value when no redux-form state found', function () { var selector = formValueSelector('myForm'); var state = fromJS({}); expect(selector(state, 'foo')).toBe(undefined); }); it('should return undefined for a single value when no form slice found', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: {} }); expect(selector(state, 'foo')).toBe(undefined); }); it('should return undefined for a single value when no values found', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { // no values } } }); expect(selector(state, 'foo')).toBe(undefined); }); it('should get a single value', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { foo: 'bar' } } } }); expect(selector(state, 'foo')).toBe('bar'); }); it('should get a single deep value', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { dog: { cat: { ewe: { pig: 'Napoleon' } } } } } } }); expect(selector(state, 'dog.cat.ewe.pig')).toBe('Napoleon'); }); it('should return {} for multiple values when no redux-form state found', function () { var selector = formValueSelector('myForm'); var state = fromJS({}); expect(selector(state, 'foo', 'bar')).toEqual({}); }); it('should return {} for multiple values when no form slice found', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: {} }); expect(selector(state, 'foo', 'bar')).toEqual({}); }); it('should return {} for multiple values when no values found', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { // no values } } }); expect(selector(state, 'foo', 'bar')).toEqual({}); }); it('should get multiple values', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { foo: 'bar', dog: 'cat', another: 'do not read' } } } }); expect(selector(state, 'foo', 'dog')).toEqual({ foo: 'bar', dog: 'cat' }); }); it('should get multiple deep values', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { dog: { cat: { ewe: { pig: 'Napoleon' } }, rat: { hog: 'Wilbur' } } } } } }); expect(selector(state, 'dog.cat.ewe.pig', 'dog.rat.hog')).toEqual({ dog: { cat: { ewe: { pig: 'Napoleon' } }, rat: { hog: 'Wilbur' } } }); }); it('should get an array', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { mice: ['Jaq', 'Gus', 'Major', 'Bruno'] } } } }); expect(selector(state, 'mice')).toEqualMap(['Jaq', 'Gus', 'Major', 'Bruno']); }); it('should get a deep array', function () { var selector = formValueSelector('myForm'); var state = fromJS({ form: { myForm: { values: { rodent: { rat: { hog: 'Wilbur' }, mice: ['Jaq', 'Gus', 'Major', 'Bruno'] } } } } }); expect(selector(state, 'rodent.rat.hog', 'rodent.mice')).toEqual({ rodent: { rat: { hog: 'Wilbur' }, mice: fromJS(['Jaq', 'Gus', 'Major', 'Bruno']) } }); }); it('should get a single value using a different mount point', function () { var selector = formValueSelector('myForm', function (state) { return getIn(state, 'otherMountPoint'); }); var state = fromJS({ otherMountPoint: { myForm: { values: { foo: 'bar' } } } }); expect(selector(state, 'foo')).toBe('bar'); }); }); }; describeFormValueSelector('formValueSelector.plain', _plain2.default, (0, _addExpectations2.default)(_expectations2.default)); describeFormValueSelector('formValueSelector.immutable', _immutable2.default, (0, _addExpectations2.default)(_expectations4.default));