diff --git a/lib/grant/code.js b/lib/grant/code.js index 1cabc6f..c79c724 100644 --- a/lib/grant/code.js +++ b/lib/grant/code.js @@ -163,6 +163,7 @@ module.exports = function code(options, issue, extend) { var params = { code: code }; if (txn.req && txn.req.state) { params.state = txn.req.state; } extend(txn, function(err, exparams) { + if (err) { return next(err); } if (exparams) { utils.merge(params, exparams); } complete(function(err) { if (err) { return next(err); } diff --git a/test/grant/code.test.js b/test/grant/code.test.js index 77b80c0..e0bc58b 100644 --- a/test/grant/code.test.js +++ b/test/grant/code.test.js @@ -403,8 +403,6 @@ describe('grant.code', function() { } function extend(txn, done) { - console.log('EXTEND!'); - console.log(txn); if (txn.client.id !== 'c123') { return done(new Error('incorrect txn argument')); } return done(null, { session_state: 'c1a43afe' }); } @@ -642,6 +640,41 @@ describe('grant.code', function() { }); }); + describe('encountering an error while extending response', function() { + var err; + + before(function(done) { + function issue(client, redirectURI, user, done) { + return done(null, 'xyz'); + } + + function extend(txn, done) { + return done(new Error('something went wrong')); + } + + chai.oauth2orize.grant(code(issue, extend)) + .txn(function(txn) { + txn.client = { id: 'cERROR', name: 'Example' }; + txn.redirectURI = 'http://www.example.com/auth/callback'; + txn.req = { + redirectURI: 'http://example.com/auth/callback' + }; + txn.user = { id: 'u123', name: 'Bob' }; + txn.res = { allow: true }; + }) + .next(function(e) { + err = e; + done(); + }) + .decide(); + }); + + it('should error', function() { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal('something went wrong'); + }); + }); + describe('encountering an error while completing transaction', function() { var err;