UNPKG

regard

Version:

Sugar-interface to access multiple data sources.

95 lines (85 loc) 3.2 kB
var _ = require('lodash'), Chai = require('chai'), Manager = require('../lib/manager'), Connector = require('../lib/connector'), ConnectorsManager = require('../lib/managers/connectors'), EndpointsManager = require('../lib/managers/endpoints'); var clazz = Manager, expect = Chai.expect, foo, bar; function BadConnector() { if (!(this instanceof BadConnector)) { return new BadConnector(); } Connector.call(this, 'bad'); } BadConnector.prototype = _.create(Connector.prototype); function CustomConnector() { if (!(this instanceof CustomConnector)) { return new CustomConnector(); } Connector.call(this, 'foo'); this.handler(_.identity); } CustomConnector.prototype = _.create(Connector.prototype); describe('Manager', function () { beforeEach(function () { foo = clazz(); }); it('should return Manager instance', function () { foo = clazz(); expect(foo).is.be.instanceof(Manager); foo = new clazz(); expect(foo).is.be.instanceof(Manager); }); it('should have connectors and endpoints managers', function () { expect(foo).to.have.property('connectors'); expect(foo.connectors).is.be.instanceof(ConnectorsManager); expect(foo).to.have.property('endpoints'); expect(foo.endpoints).is.be.instanceof(EndpointsManager); }); it('should create connector from connector factory', function () { expect(foo.connectors.has('foo')).to.not.be.ok; expect(_.partial(foo.createConnector, BadConnector)).to.throw(); foo.createConnector(CustomConnector); expect(foo.connectors.has('foo')).to.be.ok; }); it('should create endpoint if a connector was found', function () { expect(_.bind(foo.createEndpoint, foo, 'foo', ['foo'])).to.throw(); foo.createConnector(foo.connectors.core('fs')); foo.createEndpoint('foo', ['/foo']); foo.createEndpoint('foo/bar', ['bar']); foo.createEndpoint('foo/bar/baz', ['baz']); expect(foo.api.foo).to.be.ok; expect(foo.api.foo.bar).to.be.ok; expect(foo.api.foo.bar.baz).to.be.ok; }); it('should create request to an endpoint', function () { expect(foo.requests.data.itemCount).to.eql(0); foo.createConnector(foo.connectors.core('fs')); bar = foo.createEndpoint('foo', ['/foo']); foo.createRequest(bar, 'default', ['foo']); expect(foo.requests.data.itemCount).to.eql(1); }); it('should have sugar api', function (done) { expect(foo.api.$$).to.throw(); foo.api.$$('fs'); expect(foo.connectors.data.length).to.eql(1); expect(foo.api.$).to.throw(); foo.api.$('bar', __dirname); expect(foo.endpoints.data.length).to.eql(1); foo.api.bar.$('baz', 'foo'); expect(foo.endpoints.data.length).to.eql(2); expect(foo.endpoints.get('bar/baz').parent.key).to.eql('bar'); expect(foo.api.to(__dirname)).to.be.a('function'); expect(foo.endpoints.data.length).to.eql(3); expect(foo.api).to.throw(); foo.api('bar', '../package.json').then(function () { foo.api('bar:read', '../package.json').then(function () { expect(_.partial(foo.api, 'bar:readx')).to.throw(); foo.api('bar', '../package.json'); done(); }); }); }); });