intkeygenerator
Version:
int secuential primarykey generator for SQL Server
95 lines (88 loc) • 2.91 kB
JavaScript
var keyGenerator = require('../keyGenerator');
var chai = require('chai')
, expect = chai.expect
, should = chai.should();
var nextRangeStart = 0;
function setCallbackRange(){
keyGenerator.setRangeReservationCallback(function (size, callback) {
var next = nextRangeStart;
nextRangeStart += size;
callback(null, next);
});
}
describe('keygenerator', function(){
beforeEach(function() {
keyGenerator.reset();
nextRangeStart = 0;
setCallbackRange();
});
it('keyGenerator exporta un callback para pasarle la funcion que asigna los rangos.', function (){
expect(keyGenerator.setRangeReservationCallback).to.exist;
});
it('la funcion callback para generar suministrar rangos se puede asignar una sola vez.', function (){
expect(function(){ keyGenerator.setRangeReservationCallback(function () { } )}).to.throw();
});
it('la funcion callback, al llamarla repetidamente, retorna la escala del valor size.', function (done){
keyGenerator.getBlock(20, function(err, value){
var rango = value;
rango.should.be.equal(0);
});
keyGenerator.getBlock(20, function(err, value){
var rango = value;
rango.should.be.equal(20);
});
keyGenerator.getBlock(20, function(err, value){
var rango = value;
rango.should.be.equal(40);
});
keyGenerator.getBlock(20, function(err, value){
var rango = value;
rango.should.be.equal(60);
done();
});
});
it('next debe retornar numeros secuenciales', function (done){
keyGenerator.next(function(err, value){
value.should.be.equal(1);
keyGenerator.next(function(err, value){
value.should.be.equal(2);
keyGenerator.next(function(err, value){
value.should.be.equal(3);
keyGenerator.next(function(err, value){
value.should.be.equal(4);
done();
});
});
});
});
});
it('Cuando se entregan todos los numeros del bloque asignado debe solicitar un nuevo bloque', function(done){
keyGenerator.getBlock(5, function (err, value) {});
for (var i = 1; i <= 5 ; i++){
keyGenerator.next(function(err, value){});
};
keyGenerator.next(function(err, value){
value.should.be.equal(6);
done();
});
});
it('Si pido 2 bloques debe retornar numeros del segundo bloque', function(done){
keyGenerator.getBlock(5, function (err, value) {});
keyGenerator.getBlock(5, function (err, value) {});
keyGenerator.next(function(err, value){
value.should.be.equal(6);
done();
});
});
it('si el callback para reservar un rango tiene error, value debe ser null', function(done){
keyGenerator.reset();
keyGenerator.setRangeReservationCallback(function (size, callback) {
callback(new Error('Un error'), null);
});
keyGenerator.next(function(err, value){
expect(err).to.exist;
expect(value).to.not.exist;
done();
});
});
});