UNPKG

@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
'use strict'; 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); }); });