datapumps
Version:
Node.js ETL (Extract, Transform, Load) toolkit for easy data import, export or transfer between systems.
105 lines (96 loc) • 3.16 kB
JavaScript
(function() {
var Promise, RestMixin, restler, sinon;
require('should');
sinon = require('sinon');
restler = require('restler');
restler.get = sinon.stub().returns({
on: function() {}
});
RestMixin = require('../RestMixin');
Promise = require('bluebird');
describe('RestMixin', function() {
it('should wrap .get method of restler', function() {
var target;
target = {};
RestMixin(target);
target.get('foo');
restler.get.calledOnce.should.be["true"];
return restler.get.getCall(0).args[0].should.equal('foo');
});
it('should return a promise in the wrapped .get() method', function() {
var target;
target = {};
RestMixin(target);
return target.get('foo').should.be["instanceof"](Promise);
});
return describe('when using .fromRest() method', function() {
var buffer, target;
buffer = {
writeArrayAsync: sinon.stub().returns(Promise.resolve()),
seal: sinon.spy()
};
target = {
from: function() {
return buffer;
},
createBuffer: sinon.spy()
};
it('should be possible to fill input buffer', function(done) {
buffer.writeArrayAsync.reset();
buffer.seal.reset();
RestMixin(target);
target.fromRest({
query: function() {
return Promise.resolve(['foo', 'bar']);
}
});
return process.nextTick(function() {
buffer.writeArrayAsync.calledOnce.should.be["true"];
buffer.seal.calledOnce.should.be["true"];
return done();
});
});
it('should be possible to map results with resultMapping key', function(done) {
buffer.writeArrayAsync.reset();
RestMixin(target);
target.fromRest({
query: function() {
return Promise.resolve({
items: ['foo', 'bar']
});
},
resultMapping: function(result) {
return result.items;
}
});
return process.nextTick(function() {
buffer.writeArrayAsync.calledOnce.should.be["true"];
buffer.writeArrayAsync.getCall(0).args[0].should.eql(['foo', 'bar']);
return done();
});
});
return it('should be possible to use paginated REST service', function(done) {
buffer.writeArrayAsync.reset();
buffer.seal.reset();
RestMixin(target);
target.fromRest({
query: function(nextPage) {
return Promise.resolve(nextPage != null ? nextPage : ['foo', 'bar']);
},
nextPage: function(result) {
if (result[0] !== 'next') {
return ['next'];
}
}
});
return process.nextTick(function() {
buffer.writeArrayAsync.calledTwice.should.be["true"];
buffer.writeArrayAsync.getCall(0).args[0].should.eql(['foo', 'bar']);
buffer.writeArrayAsync.getCall(1).args[0].should.eql(['next']);
buffer.seal.calledOnce.should.be["true"];
return done();
});
});
});
});
}).call(this);