connect-platform-test
Version:
A platform to build backened code mostly in a visual manner.
86 lines (66 loc) • 2.56 kB
JavaScript
const assert = require('assert');
const base = require('../base');
const registry = require('../registry');
const { UnregisteredPath } = require('../errors');
describe('registry', () => {
describe('.register()', () => {
it('should register a node class or factory with given path.', () => {
registry.register({path: 'X'}, base.node.Node);
registry.register({path: 'Y'}, () => new base.node.Node());
assert(registry.registered('X'));
assert(registry.registered('Y'));
});
it('should override with subsequent registration.', () => {
class A extends base.node.Node{};
class B extends base.node.Node{};
registry.register({path: 'X'}, A);
assert(registry.instance('X') instanceof A);
registry.register({path: 'X'}, B);
assert(registry.instance('X') instanceof B);
});
});
describe('.instance()', () => {
it('should return an instance of a registered class or factory.', () => {
class A extends base.node.Node{};
class B extends base.node.Node{};
registry.register({path: 'X'}, A);
registry.register({path: 'Y'}, () => new B());
assert(registry.instance('X') instanceof A);
assert(registry.instance('Y') instanceof B);
});
it('should throw proper error when given path is not registered.', () => {
assert.throws(() => {
registry.instance('XX/123456');
}, UnregisteredPath);
});
});
describe('.signature()', () => {
it('should return the signature of a registered node class or factory.', ()=> {
registry.register({path: 'X', inputs: ['a']}, base.node.Node);
assert.equal(registry.signature('X').inputs[0], 'a');
});
it('should throw proper error when given path is not registered.', () => {
assert.throws(() => {
registry.signature('XX/123456');
}, UnregisteredPath);
});
});
describe('.alias()', () => {
it('should make an alias for a given path.', () => {
class A extends base.node.Node{};
registry.register({path: 'X'}, A);
assert.throws(() => {
registry.instance('X-alias');
}, UnregisteredPath);
registry.alias('X-alias', 'X');
assert(registry.instance('X-alias') instanceof A);
});
it('should be able to resolve chain alaising as well.', () => {
registry.alias('XZZ', 'WZZ');
registry.alias('WZZ', 'ZZZ');
class D extends base.node.Node{};
registry.register({path: 'ZZZ'}, D);
assert(registry.instance('WZZ') instanceof D);
});
});
});