jqueue
Version:
MySQL backed plugable Node.js job queue based on the Beanstalk Job Lifecycle
235 lines (169 loc) • 5.57 kB
JavaScript
;
var proxyquire = require('proxyquire');
var chai = require('chai');
var sinon = require('sinon');
var expect = chai.expect;
var queueMock = sinon.spy();
var exceptionMock = function() {error: 'an error'};
var callbackMock = sinon.spy();
var Jqueue = proxyquire('../src/jqueue', {
'./queue': queueMock,
'./exception': exceptionMock,
'./callback': callbackMock
});
describe('jqueue:', function() {
it('should construct a new jqueue', function () {
var jqueue = new Jqueue();
expect(jqueue.use).to.exist;
});
it('should use success', function() {
var connection = {
query: function(query, params, cb) {
cb(null);
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('lalala', callback);
expect(callbackMock.withArgs(callback,
null,
sinon.match.object).calledOnce).to.be.true;
});
it('should connection fail', function() {
var connection = {
query: function(query, params, cb) {
cb(null);
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb({error:'error'});
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('lalala', callback);
expect(callbackMock.withArgs(callback,
sinon.match.object,
undefined).calledOnce).to.be.true;
});
it('should use fail', function() {
var connection = {
query: function(query, params, cb) {
cb({error:'fuuuu'});
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('test', false, callback);
expect(callbackMock.withArgs(callback,
sinon.match.object,
undefined).calledOnce).to.be.true;
});
it('should use sucess and create memory', function() {
var first = true;
var connection = {
query: function(query, params, cb) {
if(first) {
first = false;
cb({error:'fuuuu'});
} else {
cb(null);
}
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('test', false, true, callback);
expect(callbackMock.withArgs(callback,
null,
sinon.match.object).calledOnce).to.be.true;
});
it('should use fail not create', function() {
var connection = {
query: function(query, params, cb) {
cb({error:'fuuuu'});
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('testing', true, callback);
expect(callbackMock.withArgs(callback,
sinon.match.object).calledOnce).to.be.true;
});
it('should use already created', function() {
var calls = 1;
var connection = {
query: function(query, params, cb) {
switch(calls) {
case 2:
calls++;
cb(false);
break;
default:
calls++;
cb(true);
break;
}
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
jqueue.use('test', callback);
jqueue.use('test', callback);
expect(callbackMock.withArgs(callback,
null,
sinon.match.object).calledOnce).to.be.true;
});
it('should use exception', function() {
var connection = {
query: function(query, params, cb) {
cb({error:'fuuuu'});
},
release : function() {}
};
var dataSource = {
getConnection: function(cb) {
cb(null, connection);
}
};
var jqueue = new Jqueue(dataSource);
var callback = function(){};
try {
jqueue.use('test', callback);
} catch (error) {
expect(error).to.be.eql({});
}
});
});