@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
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 _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);});
}