1 var assert = require('assert');
2 var Kareem = require('../');
4 describe('execPre', function() {
7 beforeEach(function() {
11 it('handles errors with multiple pres', function(done) {
14 hooks.pre('cook', function(done) {
19 hooks.pre('cook', function(done) {
24 hooks.pre('cook', function(done) {
29 hooks.execPre('cook', null, function(err) {
30 assert.equal('error!', err);
31 assert.equal(2, Object.keys(execed).length);
32 assert.ok(execed.first);
33 assert.ok(execed.second);
38 it('handles async errors', function(done) {
41 hooks.pre('cook', true, function(next, done) {
52 hooks.pre('cook', true, function(next, done) {
63 hooks.execPre('cook', null, function(err) {
64 assert.equal('error!', err);
65 assert.equal(2, Object.keys(execed).length);
66 assert.ok(execed.first);
67 assert.ok(execed.second);
72 it('handles async errors in next()', function(done) {
75 hooks.pre('cook', true, function(next, done) {
86 hooks.pre('cook', true, function(next, done) {
91 done('another error!');
96 hooks.execPre('cook', null, function(err) {
97 assert.equal('error!', err);
98 assert.equal(2, Object.keys(execed).length);
99 assert.ok(execed.first);
100 assert.ok(execed.second);
105 it('handles async errors in next() when already done', function(done) {
108 hooks.pre('cook', true, function(next, done) {
112 done('other error!');
119 hooks.pre('cook', true, function(next, done) {
120 execed.second = true;
124 done('another error!');
129 hooks.execPre('cook', null, function(err) {
130 assert.equal('other error!', err);
131 assert.equal(2, Object.keys(execed).length);
132 assert.ok(execed.first);
133 assert.ok(execed.second);
138 it('returns correct error when async pre errors', function(done) {
141 hooks.pre('cook', true, function(next, done) {
145 done('other error!');
152 hooks.pre('cook', function(next) {
153 execed.second = true;
161 hooks.execPre('cook', null, function(err) {
162 assert.equal('other error!', err);
163 assert.equal(2, Object.keys(execed).length);
164 assert.ok(execed.first);
165 assert.ok(execed.second);
170 it('lets async pres run when fully sync pres are done', function(done) {
173 hooks.pre('cook', true, function(next, done) {
184 hooks.pre('cook', function() {
185 execed.second = true;
188 hooks.execPre('cook', null, function(err) {
190 assert.equal(2, Object.keys(execed).length);
191 assert.ok(execed.first);
192 assert.ok(execed.second);
197 it('allows passing arguments to the next pre', function(done) {
200 hooks.pre('cook', function(next) {
205 hooks.pre('cook', function(next, p) {
206 execed.second = true;
207 assert.equal(p, 'test');
211 hooks.pre('cook', function(next, p) {
217 hooks.execPre('cook', null, function(err) {
219 assert.equal(3, Object.keys(execed).length);
220 assert.ok(execed.first);
221 assert.ok(execed.second);
222 assert.ok(execed.third);
228 describe('execPreSync', function() {
231 beforeEach(function() {
232 hooks = new Kareem();
235 it('executes hooks synchronously', function() {
238 hooks.pre('cook', function() {
242 hooks.pre('cook', function() {
243 execed.second = true;
246 hooks.execPreSync('cook', null);
247 assert.ok(execed.first);
248 assert.ok(execed.second);
251 it('works with no hooks specified', function() {
252 assert.doesNotThrow(function() {
253 hooks.execPreSync('cook', null);