UNPKG

@girders-elements/core

Version:

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

299 lines (182 loc) 9.28 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 _enrich=require('../../enrich');var _enrich2=_interopRequireDefault(_enrich); var _enhance=require('../../enhance');var _enhance2=_interopRequireDefault(_enhance); var _transform=require('../../transform');var _transform2=_interopRequireDefault(_transform); var _update=require('../../update');var _update2=_interopRequireDefault(_update); var _effect=require('../../effect');var _effect2=_interopRequireDefault(_effect); var _=require('..');var _2=_interopRequireDefault(_); var _http=require('../http');var http=_interopRequireWildcard(_http); var _action=require('../../action');var action=_interopRequireWildcard(_action); var _data=require('../../data');var data=_interopRequireWildcard(_data); var _actions=require('../actions');var readActions=_interopRequireWildcard(_actions); var _propNames=require('../../propNames');var propNames=_interopRequireWildcard(_propNames);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;} describe('Read Subsytem',function(){var _Kernel$create; var app=Subsystem.create(function(){return{ name:'app'};}); app.read.register(/test.json$/,function(u){return( Promise.resolve(http.asResponse({kind:'scene',title:'Scene Title'},u)));}); app.read.register(/failure.json$/,function(){return Promise.reject(new Error('fail'));}); var kernel=Kernel.create( [_enrich2.default,_enhance2.default,_transform2.default,_effect2.default,_update2.default,_2.default,app],(_Kernel$create={ kind:'app'},_defineProperty(_Kernel$create, propNames.children,['content','failure']),_defineProperty(_Kernel$create,'content', { kind:['__read','scene'], uri:'https://netcetera.com/test.json'}),_defineProperty(_Kernel$create,'failure', { kind:['__read','scene'], uri:'https://netcetera.com/failure.json'}),_Kernel$create), { data:{ defaultChildPositions:['children']}}); it('processes reads successfully',function _callee(){var content,readAction;return regeneratorRuntime.async(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0: content=kernel.query(['content']); readAction=readActions.read(content.get('uri'),{ revalidate:content.get('revalidate')}); kernel.dispatch(action.atCursor(content,readAction)); expect((0,_immutable.List)(kernel.query(['content','kind']))).toEqualI( _immutable.List.of('__loading','scene'));_context.next=6;return regeneratorRuntime.awrap( sleep(300));case 6: content=kernel.query(['content']); expect(data.isExactlyOfKind('scene',content)).toBeTruthy(); expect(content.get('title')).toEqual('Scene Title');case 9:case'end':return _context.stop();}}},null,_this);}); it('handles failures',function _callee2(){var content,readAction;return regeneratorRuntime.async(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0: content=kernel.query(['failure']); readAction=readActions.read(content.get('uri'),{ revalidate:content.get('revalidate')}); kernel.dispatch(action.atCursor(content,readAction));_context2.next=5;return regeneratorRuntime.awrap( sleep(60));case 5: content=kernel.query(['failure']); expect(data.isOfKind('__error',content)).toBeTruthy();case 7:case'end':return _context2.stop();}}},null,_this);}); }); describe('Read function',function(){var _Kernel$create2; var app=Subsystem.create(function(){return{ name:'app'};}); var readFn=jest.fn(); readFn.mockReturnValue( Promise.resolve( http.asResponse( {kind:'scene',title:'Scene Title X'}, 'https://netcetera.com/x.json'))); afterEach(function(){return readFn.mockClear();}); app.read.register(/test.json$/,readFn); var kernel=Kernel.create( [_enrich2.default,_enhance2.default,_transform2.default,_effect2.default,_update2.default,_2.default,app],(_Kernel$create2={ kind:'app'},_defineProperty(_Kernel$create2, propNames.children,['content']),_defineProperty(_Kernel$create2,'content', { kind:['__read','scene'], uri:'https://netcetera.com/test.json'}),_Kernel$create2), {foo:1}); test('read fn parameters',function _callee3(){var content,context;return regeneratorRuntime.async(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0: content=kernel.query(['content']); kernel.dispatch( action.atCursor( content, readActions.read(content.get('uri'),{revalidate:true})));_context3.next=4;return regeneratorRuntime.awrap( sleep(60));case 4: expect(readFn).toHaveBeenCalledWith( 'https://netcetera.com/test.json', { revalidate:true}, expect.any(Object)); context=readFn.mock.calls[0][2]; expect(context).toHaveProperty('config',{foo:1}); expect(context).toHaveProperty('subsystems',expect.any(Object)); expect(context).toHaveProperty('subsystemSequence',expect.any(Array));case 9:case'end':return _context3.stop();}}},null,_this);}); }); describe('Refreshing',function(){var _Kernel$create3; var app=Subsystem.create(function(){return{ name:'app'};}); var counter=0; app.read.register(/test.json$/,function(u){ counter+=1; return Promise.resolve( http.asResponse({kind:'scene',title:'Scene Title '+counter},u)); }); var refresher=jest.fn(); refresher.mockReturnValue( Promise.resolve( http.asResponse( {kind:'scene',title:'Scene Title X'}, 'https://netcetera.com/x.json'))); app.read.register(/x.json$/,refresher); app.read.register(/fail.json$/,function(){return Promise.reject(new Error('fail'));}); afterEach(function(){ refresher.mockClear(); }); var kernel=Kernel.create( [_enrich2.default,_enhance2.default,_transform2.default,_effect2.default,_update2.default,_2.default,app],(_Kernel$create3={ kind:'app'},_defineProperty(_Kernel$create3, propNames.children,['content']),_defineProperty(_Kernel$create3,'content', { kind:['__read','scene'], uri:'https://netcetera.com/test.json', revalidate:true}),_Kernel$create3)); test('refresh',function _callee4(){var content,status;return regeneratorRuntime.async(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0: content=kernel.query(['content']); kernel.dispatch( action.atCursor(content,readActions.read(content.get('uri'))));_context4.next=4;return regeneratorRuntime.awrap( sleep(60));case 4: content=kernel.query(['content']); expect(content.get('title')).toEqual('Scene Title 1'); kernel.dispatch(action.atCursor(content,readActions.readRefresh()));_context4.next=9;return regeneratorRuntime.awrap( sleep(60));case 9: content=kernel.query(['content']); expect(content.get('title')).toEqual('Scene Title 2'); kernel.dispatch( action.atCursor( content, readActions.readRefresh('https://netcetera.com/x.json')));_context4.next=14;return regeneratorRuntime.awrap( sleep(60));case 14: content=kernel.query(['content']); expect(content.get('title')).toEqual('Scene Title X'); expect(refresher.mock.calls[0][0]).toEqual('https://netcetera.com/x.json'); expect(refresher.mock.calls[0][1]).toMatchObject({revalidate:true}); kernel.dispatch( action.atCursor( content, readActions.readRefresh('https://netcetera.com/fail.json')));_context4.next=21;return regeneratorRuntime.awrap( sleep(60));case 21: content=kernel.query(['content']); expect(content.get('title')).toEqual('Scene Title X'); expect(content.getIn([propNames.metadata,'refreshing'])).not.toBeTruthy(); status=content.getIn([ propNames.metadata, 'failedRefresh', 'status']); expect(status>=200&&status<300).not.toBeTruthy();case 26:case'end':return _context4.stop();}}},null,_this);}); }); describe('Performing reads manually',function _callee5(){var app,readFn,kernel,result;return regeneratorRuntime.async(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0: app=Subsystem.create(function(){return{ name:'app'};}); readFn=jest.fn(); readFn.mockReturnValue( Promise.resolve( http.asResponse( {kind:'scene',title:'Scene Title X'}, 'https://netcetera.com/test.json'))); afterEach(function(){return readFn.mockClear();}); app.read.register(/test.json$/,readFn); kernel=Kernel.create( [_enrich2.default,_enhance2.default,_transform2.default,_effect2.default,_update2.default,_2.default,app], { kind:'app'});_context5.next=8;return regeneratorRuntime.awrap( kernel.subsystems.read.perform( 'https://netcetera.com/test.json', {revalidate:true,a:1}));case 8:result=_context5.sent; expect(readFn).toHaveBeenCalledWith( 'https://netcetera.com/test.json', { revalidate:true, a:1}, expect.anything()); expect(result.value.get('title')).toEqual('Scene Title X'); expect(result.value.getIn([propNames.metadata,'uri'])).toEqual( 'https://netcetera.com/test.json');case 12:case'end':return _context5.stop();}}},null,_this);}); function sleep(ms){ return new Promise(function(resolve){return setTimeout(resolve,ms);}); }