@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
153 lines (116 loc) • 4.1 kB
JavaScript
;
var _immutable=require('immutable');
var _RegistryChain=require('../RegistryChain');
var _Registry=require('../Registry');var _Registry2=_interopRequireDefault(_Registry);
var _MultivalueRegistry=require('../MultivalueRegistry');var _MultivalueRegistry2=_interopRequireDefault(_MultivalueRegistry);
var _PatternRegistry=require('../PatternRegistry');var _PatternRegistry2=_interopRequireDefault(_PatternRegistry);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}
describe('RegistryChain',function(){
var reg1=new _Registry2.default();
var reg2=new _Registry2.default();
var combined=new _RegistryChain.RegistryChain(reg1,reg2);
afterEach(function(){
reg1.reset();
reg2.reset();
});
it('chains two repositories together',function(){
reg1.register('a',1);
reg2.register('b',2);
expect(combined.get('a')).toEqual(1);
expect(combined.get('b')).toEqual(2);
});
it('gives precedence to the primary registry',function(){
reg1.register('a',1);
reg2.register('a',2);
expect(combined.get('a')).toEqual(2);
});
it('looks for the more specific version of the key in both registries first',function(){
reg1.register(['a','b'],1);
reg2.register('a',2);
expect(combined.get(['a','b'])).toEqual(1);
});
});
describe('RegistryChain with a fallabck pattern registry',function(){
var reg1=new _PatternRegistry2.default();
var reg2=new _Registry2.default();
var combined=new _RegistryChain.RegistryChain(reg1,reg2);
afterEach(function(){
reg1.reset();
reg2.reset();
});
it('supports more/less specific keys as well as patterns',function(){
reg1.register(/^ab/,1);
reg2.register(['ab','a'],2);
expect(combined.get(['ab','a'])).toEqual(2);
expect(combined.get('ab')).toEqual(1);
});
});
describe('MultivalueRegistryChain',function(){
var reg1=new _MultivalueRegistry2.default();
var reg2=new _MultivalueRegistry2.default();
var combined=new _RegistryChain.MultivalueRegistryChain(reg1,reg2);
afterEach(function(){
reg1.reset();
reg2.reset();
});
it('combines results, less specific to more, fallback to primary, from both registries',function(){
reg2.register('a',1);
reg1.register(['a','b'],2);
reg1.register(['a','b','c'],3);
reg1.register('a',4);
reg1.register(['a','b'],5);
reg2.register(['a','b','c'],10);
expect(combined.get('a')).toEqualI(_immutable.List.of(4,1));
expect(combined.get(['a','b'])).toEqualI(_immutable.List.of(4,1,2,5));
expect(combined.get(['a','b','c'])).toEqualI(_immutable.List.of(4,1,2,5,3,10));
});
});
describe('chainRegistries',function(){
var reg1=new _PatternRegistry2.default();
var reg2=new _Registry2.default();
var reg3=new _Registry2.default();
var reg4=new _Registry2.default();
afterEach(function(){
reg1.reset();
reg2.reset();
reg3.reset();
reg4.reset();
});
it('combines several registries, where registries to the right have precedence',function(){
var combined=(0,_RegistryChain.chainRegistries)([reg1,reg2,reg3,reg4]);
reg1.register('a',1);
reg4.register('a',3);
reg2.register('b',6);
expect(combined.get('a')).toEqual(3);
expect(combined.get('b')).toEqual(6);
});
it('combines a single registry',function(){
var combined=(0,_RegistryChain.chainRegistries)([reg2]);
reg2.register('a',1);
expect(combined.get(['a'])).toEqual(1);
});
});
describe('chainMultivalueRegistries',function(){
var reg1=new _MultivalueRegistry2.default();
var reg2=new _MultivalueRegistry2.default();
var reg3=new _MultivalueRegistry2.default();
var reg4=new _MultivalueRegistry2.default();
afterEach(function(){
reg1.reset();
reg2.reset();
reg3.reset();
reg4.reset();
});
it('combines several registries, where registries to the right have precedence',function(){
var combined=(0,_RegistryChain.chainMultivalueRegistries)([reg1,reg2,reg3,reg4]);
reg1.register('a',1);
reg3.register('a',2);
reg2.register(['a','b'],3);
reg4.register(['a','b'],4);
expect(combined.get(['a','b'])).toEqualI(_immutable.List.of(1,2,3,4));
});
it('combines a single registry',function(){
var combined=(0,_RegistryChain.chainMultivalueRegistries)([reg1]);
reg1.register('a',1);
expect(combined.get(['a'])).toEqualI(_immutable.List.of(1));
});
});