@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
112 lines (77 loc) • 3.54 kB
JavaScript
;
var _immutable=require('immutable');
var _cursor=require('immutable/contrib/cursor');var _cursor2=_interopRequireDefault(_cursor);
var _action=require('../../action');var actions=_interopRequireWildcard(_action);
var _subsystem=require('../../subsystem');var Subsystem=_interopRequireWildcard(_subsystem);
var _kernel=require('../../kernel');var Kernel=_interopRequireWildcard(_kernel);
var _registry=require('../../registry');
var _data=require('../../data');
var _=require('..');var _2=_interopRequireDefault(_);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 _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}
var registryAttribute='@@girders-elements/_updateRegistry';
describe('updates API',function(){
var app=Subsystem.create(function(){return{
name:'app'};});
var update=app.update;
it('registers an update',function(){
var action1={
fromKind:['article','specific'],
type:'TOGGLE_BOOKMARK'};
var action2={
fromKind:['article'],
type:'.LOAD'};
update.register(action1.fromKind,action1.type,function(){});
update.forKind(action2.fromKind,function(updates){
updates.register(action2.type,function(){});
updates.register(action2.type,function(){});
});
var registry=app.update[registryAttribute];
expect(
registry.get(
_registry.ActionRegistry.keyFor(['article','specific'],'TOGGLE_BOOKMARK'))).
toEqual(expect.anything());
expect(registry.get(_registry.ActionRegistry.keyFor(['article'],'.LOAD'))).toEqual(
expect.anything());
expect(
registry.get(_registry.ActionRegistry.keyFor(['article','specific'],'.LOAD'))).
toEqual(expect.anything());
expect(
registry.get(_registry.ActionRegistry.keyFor(['article'],'unknown'))).
not.toEqual(expect.anything());
expect(
registry.get(_registry.ActionRegistry.keyFor(['unknown'],'.LOAD'))).
not.toEqual(expect.anything());
});
it('reduces the app state according to registrations',function(){
var app=Subsystem.create(function(){return{
name:'app'};});
var update=app.update;
var data=(0,_immutable.fromJS)({
element1:{
element2:{
element3:{
kind:['article','specific']},
kind:['container']},
kind:['container']},
kind:'root'});
var root=_cursor2.default.from(data);
var el1=function el1(cursor){return cursor.get('element1');};
var el2=function el2(cursor){return cursor.getIn(['element1','element2']);};
var el3=function el3(cursor){return cursor.getIn(['element1','element2','element3']);};
var bookmark=function bookmark(cursor){return cursor.get('bookmark');};
var globalBookmark=function globalBookmark(cursor){return cursor.get('globalBookmark');};
var localUpdate=actions.atCursor(el3(root),{type:'TOGGLE_BOOKMARK'});
var globalUpdate=actions.atCursor(el1(root),{
type:'.TOGGLE_BOOKMARK'});
var bubblingUpdate=actions.atCursor(el3(root),{
type:'.TOGGLE_BOOKMARK'});
update.register(['article','specific'],'TOGGLE_BOOKMARK',function(e){return(
e.set('bookmark',true));});
update.register('container','.TOGGLE_BOOKMARK',function(e){return(
e.set('globalBookmark',true));});
var kernel=Kernel.create([_2.default,app],{},{});
var reducer=kernel.subsystems.update.reducer;
expect((0,_data.flow)(reducer(root,localUpdate),el3,bookmark)).toBe(true);
expect((0,_data.flow)(reducer(root,globalUpdate),el1,globalBookmark)).toBe(true);
expect((0,_data.flow)(reducer(root,bubblingUpdate),el2,globalBookmark)).toBe(true);
});
});