@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
JavaScript
;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;
}