@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
126 lines (80 loc) • 5.64 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
enhance=app.enhance;
describe('Enhancers',function(){var _appState;
var appState=(_appState={
kind:'document'},_defineProperty(_appState,
propNames.children,'children'),_defineProperty(_appState,'data',
1),_defineProperty(_appState,'value',
1),_defineProperty(_appState,'items',
[1,2,3]),_defineProperty(_appState,'children',
[
{
kind:'teaser',
data:10,
value:10},
{
kind:'teaser',
data:20,
value:20}]),_appState);
enhance.register('document',function _callee(el,context){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',
function(el){return el.update('data',function(d){return d+1;});});case 3:case'end':return _context.stop();}}},null,_this);});
enhance.register('document',function _callee2(el,context){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:return _context2.abrupt('return',
[['teaser',function(el){return el.update('data',function(d){return d+1;});}]]);case 3:case'end':return _context2.stop();}}},null,_this);});
enhance.register('teaser',function _callee3(el,context){return regeneratorRuntime.async(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:_context3.next=2;return regeneratorRuntime.awrap(
sleep(randomMs(100)));case 2:return _context3.abrupt('return',
function(el){return el.update('data',function(d){return d+1;});});case 3:case'end':return _context3.stop();}}},null,_this);});
enhance.register(function _callee4(context){return regeneratorRuntime.async(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:_context4.next=2;return regeneratorRuntime.awrap(
sleep(randomMs(100)));case 2:return _context4.abrupt('return',
[[['teaser'],function(el){return el.update('value',function(v){return v+2;});}]]);case 3:case'end':return _context4.stop();}}},null,_this);});
enhance.register(function _callee5(context){return regeneratorRuntime.async(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:_context5.next=2;return regeneratorRuntime.awrap(
sleep(randomMs(100)));case 2:return _context5.abrupt('return',
function(el){return el.update('value',function(v){return v+3;});});case 3:case'end':return _context5.stop();}}},null,_this);});
test('read dependent enhancers should run only for root element',function _callee6(){var kernel,enhanceHelper,readValue,enhancers,updates,result;return regeneratorRuntime.async(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:
kernel=Kernel.create([_2.default,app],appState,{});
enhanceHelper=kernel.subsystems.enhance.buildEnhanceHelper();
readValue=(0,_immutable.fromJS)(appState);
enhancers=enhanceHelper.readDependentEnhancers(
data.kindOf(readValue));_context6.next=6;return regeneratorRuntime.awrap(
enhanceHelper.runEnhancers(
readValue,
{
elementZipper:kernel.elementZipper},
enhancers));case 6:updates=_context6.sent;
result=enhanceHelper.applyEnhancements(
readValue,
{
elementZipper:kernel.elementZipper},
updates);
expect(result.get('data')).toEqualI(2);
expect(result.getIn(['children',0,'data'])).toEqualI(11);
expect(result.getIn(['children',1,'data'])).toEqualI(21);case 11:case'end':return _context6.stop();}}},null,_this);});
test('read independent enhancers should apply all registered enhancements',function _callee7(){var kernel,enhanceHelper,enhancers,updates,result;return regeneratorRuntime.async(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:
kernel=Kernel.create([_2.default,app],appState,{});
enhanceHelper=kernel.subsystems.enhance.buildEnhanceHelper();
enhancers=enhanceHelper.readIndependentEnhancers();_context7.next=5;return regeneratorRuntime.awrap(
enhanceHelper.runEnhancers(
null,
{
elementZipper:kernel.elementZipper},
enhancers));case 5:updates=_context7.sent;
result=enhanceHelper.applyEnhancements(
(0,_immutable.fromJS)(appState),
{
elementZipper:kernel.elementZipper},
updates);
expect(result.get('value')).toEqualI(4);
expect(result.getIn(['children',0,'value'])).toEqualI(12);
expect(result.getIn(['children',1,'value'])).toEqualI(22);case 10:case'end':return _context7.stop();}}},null,_this);});
});
var sleep=function sleep(ms){return new Promise(function(resolve){return setTimeout(resolve,ms);});};
var randomMs=function randomMs(max){return Math.trunc(max*Math.random())+1;};