redux-form
Version:
A higher order component decorator for forms using Redux and React
283 lines (212 loc) • 8.29 kB
JavaScript
'use strict';
var _expect = require('expect');
var _expect2 = _interopRequireDefault(_expect);
var _immutable = require('immutable');
var _setIn = require('../setIn');
var _setIn2 = _interopRequireDefault(_setIn);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('structure.immutable.setIn', function () {
it('should handle undefined', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), undefined, 'success');
(0, _expect2.default)(result).toEqual('success');
});
it('should handle dot paths', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b.c', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var c = b.get('c');
(0, _expect2.default)(c).toEqual('success');
});
it('should handle array paths', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b[0]', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing').toBeA(_immutable.List).toEqual((0, _immutable.fromJS)(['success']));
});
it('should handle array paths with successive sets', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b[2]', 'success');
result = (0, _setIn2.default)(result, 'a.b[0]', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing').toBeA(_immutable.List).toEqual((0, _immutable.fromJS)(['success', undefined, 'success']));
});
it('should handle array paths with existing array', function () {
var result = (0, _setIn2.default)(new _immutable.Map({
a: new _immutable.Map({
b: new _immutable.List(['first'])
})
}), 'a.b[1].value', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing').toBeA(_immutable.List).toEqual((0, _immutable.fromJS)(['first', { value: 'success' }]));
});
it('should handle array paths with existing array with undefined', function () {
var result = (0, _setIn2.default)(new _immutable.Map({
a: new _immutable.Map({
b: new _immutable.List(['first', undefined])
})
}), 'a.b[1].value', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing').toBeA(_immutable.List).toEqual((0, _immutable.fromJS)(['first', { value: 'success' }]));
});
it('should handle multiple array paths', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b[0].c.d[13].e', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing').toBeA(_immutable.Map);
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing').toBeA(_immutable.List);
var b0 = b.get(0);
(0, _expect2.default)(b0).toExist('b[0] missing').toBeA(_immutable.Map);
var c = b0.get('c');
(0, _expect2.default)(c).toExist('c missing').toBeA(_immutable.Map);
var d = c.get('d');
(0, _expect2.default)(d).toExist('d missing').toBeA(_immutable.List);
var d13 = d.get(13);
(0, _expect2.default)(d13).toExist('d[13] missing').toBeA(_immutable.Map);
var e = d13.get('e');
(0, _expect2.default)(e).toExist('e missing').toEqual('success');
});
it('should handle indexer paths', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b[c].d[e]', 'success');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var c = b.get('c');
(0, _expect2.default)(c).toExist('c missing');
var d = c.get('d');
(0, _expect2.default)(d).toExist('d missing');
var e = d.get('e');
(0, _expect2.default)(e).toExist('e missing').toEqual('success');
});
it('should update existing Map', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: { c: 'one' }
}
});
var result = (0, _setIn2.default)(initial, 'a.b.c', 'two');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var c = b.get('c');
(0, _expect2.default)(c).toEqual('two');
});
it('should update existing List', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: [{ c: 'one' }]
}
});
var result = (0, _setIn2.default)(initial, 'a.b[0].c', 'two');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var b0 = b.get(0);
(0, _expect2.default)(b0).toExist();
var b0c = b0.get('c');
(0, _expect2.default)(b0c).toEqual('two');
});
it('should not break existing Map', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: { c: 'one' }
}
});
var result = (0, _setIn2.default)(initial, 'a.b.d', 'two');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var c = b.get('c');
(0, _expect2.default)(c).toEqual('one');
var d = b.get('d');
(0, _expect2.default)(d).toEqual('two');
});
it('should not break existing List', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: [{ c: 'one' }, { c: 'two' }]
}
});
var result = (0, _setIn2.default)(initial, 'a.b[0].c', 'changed');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var b0 = b.get(0);
(0, _expect2.default)(b0).toExist();
var b0c = b0.get('c');
(0, _expect2.default)(b0c).toEqual('changed');
var b1 = b.get(1);
(0, _expect2.default)(b1).toExist();
var b1c = b1.get('c');
(0, _expect2.default)(b1c).toEqual('two');
});
it('should add to an existing List', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: [{ c: 'one' }, { c: 'two' }]
}
});
var result = (0, _setIn2.default)(initial, 'a.b[2].c', 'three');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var b0 = b.get(0);
(0, _expect2.default)(b0).toExist();
var b0c = b0.get('c');
(0, _expect2.default)(b0c).toEqual('one');
var b1 = b.get(1);
(0, _expect2.default)(b1).toExist();
var b1c = b1.get('c');
(0, _expect2.default)(b1c).toEqual('two');
var b2 = b.get(2);
(0, _expect2.default)(b2).toExist();
var b2c = b2.get('c');
(0, _expect2.default)(b2c).toEqual('three');
});
it('should set a value directly on new list', function () {
var result = (0, _setIn2.default)(new _immutable.Map(), 'a.b[2]', 'three');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var b0 = b.get(0);
(0, _expect2.default)(b0).toEqual(undefined);
var b1 = b.get(1);
(0, _expect2.default)(b1).toEqual(undefined);
var b2 = b.get(2);
(0, _expect2.default)(b2).toEqual('three');
});
it('should add to an existing List item', function () {
var initial = (0, _immutable.fromJS)({
a: {
b: [{
c: '123'
}]
}
});
var result = (0, _setIn2.default)(initial, 'a.b[0].d', '12');
var a = result.get('a');
(0, _expect2.default)(a).toExist('a missing');
var b = a.get('b');
(0, _expect2.default)(b).toExist('b missing');
var b0 = b.get(0);
(0, _expect2.default)(b0).toExist();
var b0d = b0.get('d');
(0, _expect2.default)(b0d).toEqual('12');
var b0c = b0.get('c');
(0, _expect2.default)(b0c).toEqual('123');
});
});