Skip to content

Commit

Permalink
Add wrap() tests, 100% coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
vkarpov15 committed Dec 31, 2014
1 parent d9ad539 commit 6945be4
Showing 1 changed file with 251 additions and 0 deletions.
251 changes: 251 additions & 0 deletions test/wrap.test.js
@@ -0,0 +1,251 @@
var assert = require('assert');
var Kareem = require('../');

describe('wrap()', function() {
var hooks;

beforeEach(function() {
hooks = new Kareem();
});

it('handles pre errors', function(done) {
hooks.pre('cook', function(done) {
done('error!');
});

hooks.post('cook', function(obj) {
obj.tofu = 'no';
});

var obj = { bacon: 0, eggs: 0 };

var args = [obj];
args.push(function(error, result) {
assert.equal('error!', error);
assert.ok(!result);
assert.equal(undefined, obj.tofu);
done();
});

hooks.wrap(
'cook',
function(o, callback) {
// Should never get called
assert.ok(false);
callback(null, o);
},
obj,
args);
});

it('handles pre errors when no callback defined', function(done) {
hooks.pre('cook', function(done) {
done('error!');
});

hooks.post('cook', function(obj) {
obj.tofu = 'no';
});

var obj = { bacon: 0, eggs: 0 };

var args = [obj];

hooks.wrap(
'cook',
function(o, callback) {
// Should never get called
assert.ok(false);
callback(null, o);
},
obj,
args);

setTimeout(
function() {
done();
},
25);
});

it('handles errors in wrapped function', function(done) {
hooks.pre('cook', function(done) {
done();
});

hooks.post('cook', function(obj) {
obj.tofu = 'no';
});

var obj = { bacon: 0, eggs: 0 };

var args = [obj];
args.push(function(error, result) {
assert.equal('error!', error);
assert.ok(!result);
assert.equal(undefined, obj.tofu);
done();
});

hooks.wrap(
'cook',
function(o, callback) {
callback('error!');
},
obj,
args);
});

it('handles errors in post', function(done) {
hooks.pre('cook', function(done) {
done();
});

hooks.post('cook', function(obj, callback) {
obj.tofu = 'no';
callback('error!');
});

var obj = { bacon: 0, eggs: 0 };

var args = [obj];
args.push(function(error, result) {
assert.equal('error!', error);
assert.ok(!result);
assert.equal('no', obj.tofu);
done();
});

hooks.wrap(
'cook',
function(o, callback) {
callback(null, o);
},
obj,
args);
});

it('works with no args', function(done) {
hooks.pre('cook', function(done) {
done();
});

hooks.post('cook', function(callback) {
obj.tofu = 'no';
callback();
});

var obj = { bacon: 0, eggs: 0 };

var args = [];

hooks.wrap(
'cook',
function(callback) {
callback(null);
},
obj,
args);

setTimeout(
function() {
assert.equal('no', obj.tofu);
done();
},
25);
});

it('handles pre errors with no args', function(done) {
hooks.pre('cook', function(done) {
done('error!');
});

hooks.post('cook', function(callback) {
obj.tofu = 'no';
callback();
});

var obj = { bacon: 0, eggs: 0 };

var args = [];

hooks.wrap(
'cook',
function(callback) {
callback(null);
},
obj,
args);

setTimeout(
function() {
assert.equal(undefined, obj.tofu);
done();
},
25);
});

it('handles wrapped function errors with no args', function(done) {
hooks.pre('cook', function(done) {
obj.waffles = false;
done();
});

hooks.post('cook', function(callback) {
obj.tofu = 'no';
callback();
});

var obj = { bacon: 0, eggs: 0 };

var args = [];

hooks.wrap(
'cook',
function(callback) {
callback('error!');
},
obj,
args);

setTimeout(
function() {
assert.equal(false, obj.waffles);
assert.equal(undefined, obj.tofu);
done();
},
25);
});

it('handles post errors with no args', function(done) {
hooks.pre('cook', function(done) {
obj.waffles = false;
done();
});

hooks.post('cook', function(callback) {
obj.tofu = 'no';
callback('error!');
});

var obj = { bacon: 0, eggs: 0 };

var args = [];

hooks.wrap(
'cook',
function(callback) {
callback();
},
obj,
args);

setTimeout(
function() {
assert.equal(false, obj.waffles);
assert.equal('no', obj.tofu);
done();
},
25);
});
});

0 comments on commit 6945be4

Please sign in to comment.