From 76242f65bcc9e74e8c96708f2a2a5cca92bf295a Mon Sep 17 00:00:00 2001 From: Tim Cuthbertson Date: Mon, 20 Apr 2015 14:03:24 +1000 Subject: [PATCH 1/2] Create a meaningful error from response.error.errors array --- lib/transporters.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/transporters.js b/lib/transporters.js index b572559..21e89cb 100644 --- a/lib/transporters.js +++ b/lib/transporters.js @@ -77,6 +77,14 @@ DefaultTransporter.prototype.wrapCallback_ = function(opt_callback) { if (typeof body.error === 'string') { err = new Error(body.error); err.code = res.statusCode; + + } else if (Array.isArray(body.error.errors)) { + err = new Error(body.error.errors.map( + function(err) { return err.message; } + ).join('\n')); + err.code = body.error.errors[0].code; + err.errors = body.error.errors; + } else { err = new Error(body.error.message); err.code = body.error.code || res.statusCode; From 7cae2f7fb05a687dd29518dc8526b687f7728ee9 Mon Sep 17 00:00:00 2001 From: Tim Cuthbertson Date: Mon, 27 Apr 2015 09:30:32 +1000 Subject: [PATCH 2/2] add test for multiple response errorsg --- test/test.transporters.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/test.transporters.js b/test/test.transporters.js index f26763c..a149478 100644 --- a/test/test.transporters.js +++ b/test/test.transporters.js @@ -41,4 +41,32 @@ describe('Transporters', function() { var re = new RegExp(applicationName + ' ' + defaultUserAgentRE); assert(re.test(opts.headers['User-Agent'])); }); + + it('should create a single error from multiple response errors', function(done) { + var firstError = { + message: 'Error 1', + code: 'ERR1', + }; + var secondError = { + message: 'Error 2', + code: 'ERR2', + }; + nock('http://example.com') + .get('/api') + .reply(200, { + error: { + errors: [ firstError, secondError ] + } + }); + + transporter.request({ + uri: 'http://example.com/api', + }, function(error) { + assert(error.message === 'Error 1\nError 2'); + assert(error.code, 'ERR1'); + assert(error.errors.length, 2); + assert(error.errors[1].code, 'ERR2'); + done(); + }); + }); });