diff --git a/.travis.yml b/.travis.yml index 6951df50ec..991f3405fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ node_js: - '6' addons: code_climate: - repo_token: c2aa7db42f71ed803abb928688f20dfe3d2d397fe9b5d6392cf65aacbc6382ed + repo_token: 9840b8b56f6d10209b3478d41f7ba5102d02981435df129bb18554a529359c62 before_script: - 'npm install -g codeclimate-test-reporter' after_script: diff --git a/changelog.md b/changelog.md index 5b175938e8..6a790f6279 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Change Log +## [v3.1.3](https://github.com/feathersjs/feathers/tree/v3.1.3) (2018-02-16) +[Full Changelog](https://github.com/feathersjs/feathers/compare/v3.1.2...v3.1.3) + +**Merged pull requests:** + +- Update events to the latest version 🚀 [\#810](https://github.com/feathersjs/feathers/pull/810) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) + ## [v3.1.2](https://github.com/feathersjs/feathers/tree/v3.1.2) (2018-02-10) [Full Changelog](https://github.com/feathersjs/feathers/compare/v3.1.1...v3.1.2) diff --git a/lib/hooks.js b/lib/hooks.js index 8d95958d69..d2de15ad1e 100644 --- a/lib/hooks.js +++ b/lib/hooks.js @@ -98,7 +98,7 @@ const hookMixin = exports.hookMixin = function hookMixin (service) { const hookChain = errorHooks.concat(finallyHooks); // A shallow copy of the hook object - const errorHookObject = Object.assign({}, error.hook || hookObject, { + const errorHookObject = Object.assign({}, error.hook, hookObject, { type: 'error', result: null, original: error.hook, diff --git a/lib/version.js b/lib/version.js index 5116c67cd3..0ab3bc654f 100644 --- a/lib/version.js +++ b/lib/version.js @@ -1 +1 @@ -module.exports = '3.1.3'; +module.exports = '3.1.4'; diff --git a/package-lock.json b/package-lock.json index f4636daca8..64c03b314c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@feathersjs/feathers", - "version": "3.1.3", + "version": "3.1.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3f3c13d503..3a624aa794 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@feathersjs/feathers", "description": "A REST and realtime API layer for modern applications.", - "version": "3.1.3", + "version": "3.1.4", "homepage": "http://feathersjs.com", "repository": { "type": "git", diff --git a/test/hooks/error.test.js b/test/hooks/error.test.js index 3b2535503a..cd9c3bc64a 100644 --- a/test/hooks/error.test.js +++ b/test/hooks/error.test.js @@ -223,4 +223,48 @@ describe('`error` hooks', () => { .catch(error => assert.equal(error.message, errorMessage)); }); }); + + it('Error in before hook causes inter-service calls to have wrong hook context (https://github.com/feathersjs/feathers/issues/841)', () => { + const app = feathers(); + + let service1Params, service2Params; + + app.use('/service1', { + find () { + return Promise.resolve({ message: 'service1 success' }); + } + }); + + app.service('service1').hooks({ + before (context) { + service1Params = context.params; + return Promise.reject(new Error('Error in service1 before hook')); + } + }); + + app.use('/service2', { + find (params) { + return app.service('/service1').find({}).then(() => { + return { message: 'service2 success' }; + }); + } + }); + + app.service('service2').hooks({ + before (context) { + service2Params = context.params; + context.params.foo = 'bar'; + }, + error (context) { + assert.ok(service1Params !== context.params); + assert.ok(service2Params === context.params); + assert.equal(context.path, 'service2'); + assert.equal(context.params.foo, 'bar'); + } + }); + + return app.service('/service2').find().catch(error => { + assert.equal(error.message, 'Error in service1 before hook'); + }); + }); });