Fix support for remote hooks returning a Promise

Fix beforeRemote/afterRemote to correctly return promises returned
by the user-provided hook callback.
This commit is contained in:
Tim van der Staaij 2016-09-15 23:33:56 +02:00 committed by Miroslav Bajtoš
parent f9a58083ae
commit c58bff6c3d
2 changed files with 28 additions and 2 deletions

View File

@ -197,7 +197,7 @@ module.exports = function(registry) {
this._runWhenAttachedToApp(function(app) {
var remotes = app.remotes();
remotes.before(className + '.' + name, function(ctx, next) {
fn(ctx, ctx.result, next);
return fn(ctx, ctx.result, next);
});
});
};
@ -208,7 +208,7 @@ module.exports = function(registry) {
this._runWhenAttachedToApp(function(app) {
var remotes = app.remotes();
remotes.after(className + '.' + name, function(ctx, next) {
fn(ctx, ctx.result, next);
return fn(ctx, ctx.result, next);
});
});
};

View File

@ -301,6 +301,32 @@ describe.onServer('Remote Methods', function() {
done();
});
});
it('Does not stop the hook chain after returning a promise', function(done) {
var hooksCalled = [];
User.beforeRemote('create', function() {
hooksCalled.push('first');
return Promise.resolve();
});
User.beforeRemote('create', function(ctx, user, next) {
hooksCalled.push('second');
next();
});
// invoke save
request(app)
.post('/users')
.send({ data: { first: 'foo', last: 'bar' }})
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if (err) return done(err);
expect(hooksCalled).to.eql(['first', 'second']);
done();
});
});
});
describe('Model.afterRemote(name, fn)', function() {