UNPKG

@girders-elements/core

Version:

Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.

108 lines (71 loc) 4.32 kB
'use strict';var _this=this; var _immutable=require('immutable'); var _subsystem=require('../../subsystem');var Subsystem=_interopRequireWildcard(_subsystem); var _kernel=require('../../kernel');var Kernel=_interopRequireWildcard(_kernel); var _propNames=require('../../propNames');var propNames=_interopRequireWildcard(_propNames); var _data=require('../../data');var data=_interopRequireWildcard(_data); var _=require('..');var _2=_interopRequireDefault(_);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}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 app=Subsystem.create(function(){return{ name:'app'};});var enrich=app.enrich; describe('Enrichers',function(){var _ref,_appState; var appState=(_appState={ kind:'c1'},_defineProperty(_appState, propNames.children,'children'),_defineProperty(_appState,'data', 1),_defineProperty(_appState,'children', [(_ref={ kind:'c1'},_defineProperty(_ref, propNames.children,'children'),_defineProperty(_ref,'data', 11),_defineProperty(_ref,'children', [ { kind:'c1', data:111}, { kind:'c1', data:112}, { kind:'c2', items:[1,2,3]}]),_ref), { kind:'c2', items:[10,20]}]),_appState); enrich.register('c1',function _callee(el){return regeneratorRuntime.async(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_context.next=2;return regeneratorRuntime.awrap( sleep(randomMs(100)));case 2:return _context.abrupt('return', el.update('data',function(data){return data+1000;}));case 3:case'end':return _context.stop();}}},null,_this);}); enrich.register('c1',function _callee2(el){var sum,items;return regeneratorRuntime.async(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:_context2.next=2;return regeneratorRuntime.awrap( sleep(randomMs(100)));case 2: sum=el. get('children',(0,_immutable.List)()). filter(data.isOfKind('c1')). map(function(el){return el.get('data',0);}). reduce(function(a,b){return a+b;},el.get('sum',0)); items=el. get('children',(0,_immutable.List)()). map(function(el){return el.get('items',(0,_immutable.List)());}). reduce(function(a,b){return a.concat(b);},(0,_immutable.List)());return _context2.abrupt('return', el. update('items',function(i){return(0,_immutable.List)(i).concat(items);}). update('data',function(d){return d+sum;}));case 5:case'end':return _context2.stop();}}},null,_this);}); enrich.register('c2',function _callee3(el){return regeneratorRuntime.async(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return regeneratorRuntime.awrap( sleep(randomMs(150)));case 2:return _context3.abrupt('return', el.update('items',function(items){return items.push(100);}));case 3:case'end':return _context3.stop();}}},null,_this);}); test('enrichers run concurrently for all children, before the parent',function _callee4(){var kernel,enricher,result;return regeneratorRuntime.async(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0: kernel=Kernel.create([_2.default,app],appState,{}); enricher=kernel.subsystems.enrich.buildEnricher();_context4.next=4;return regeneratorRuntime.awrap( enricher((0,_immutable.fromJS)(appState)));case 4:result=_context4.sent; expect(result.getIn(['children',0,'children',2,'items'])).toEqualI( _immutable.List.of(1,2,3,100)); expect(result.getIn(['children',1,'items'])).toEqualI( _immutable.List.of(10,20,100)); expect(result.getIn(['children',0,'children',0,'data'])).toEqual(1111); expect(result.getIn(['children',0,'data'])).toEqual(1011+1111+1112); expect(result.getIn(['data'])).toEqual(1011+1111+1112+1001); expect(result.getIn(['items'])).toEqualI(_immutable.List.of(1,2,3,100,10,20,100));case 11:case'end':return _context4.stop();}}},null,_this);}); }); function sleep(ms){ return new Promise(function(resolve){return setTimeout(resolve,ms);}); } function randomMs(max){ return Math.trunc(max*Math.random())+1; }