Skip to content

Commit a93fda1

Browse files
committed
Merge pull request #923 from stephenplusplus/spp--util-more-helpful-errors
core: use error message from response body
2 parents 9cd6e99 + cc7cd01 commit a93fda1

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

lib/common/util.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,16 @@ util.noop = noop;
115115
var ApiError = createErrorClass('ApiError', function(errorBody) {
116116
this.errors = errorBody.errors;
117117
this.code = errorBody.code;
118-
this.message = errorBody.message || 'Error during request.';
118+
this.message = errorBody.message;
119119
this.response = errorBody.response;
120+
121+
if (!this.message) {
122+
if (errorBody.errors && errorBody.errors.length === 1) {
123+
this.message = errorBody.errors[0].message;
124+
} else {
125+
this.message = 'Error during request.';
126+
}
127+
}
120128
});
121129

122130
/**

test/common/util.js

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,63 @@ describe('common/util', function() {
127127
assert.strictEqual(apiError.response, error.response);
128128
});
129129

130-
it('should build ApiError with default status message', function() {
130+
it('should detect ApiError message from response body', function() {
131+
var errorMessage = 'API error message';
132+
131133
var error = {
132-
errors: [],
134+
errors: [ new Error(errorMessage) ],
133135
code: 100,
134136
response: { a: 'b', c: 'd' }
135137
};
136138

137139
var apiError = new util.ApiError(error);
138140

139-
assert.strictEqual(apiError.message, 'Error during request.');
141+
assert.strictEqual(apiError.message, errorMessage);
142+
});
143+
144+
it('should favor an explicit message over response body', function() {
145+
var errorMessage = 'API error message';
146+
var expectedErrorMessage = 'Custom error message';
147+
148+
var error = {
149+
errors: [ new Error(errorMessage) ],
150+
code: 100,
151+
response: { a: 'b', c: 'd' },
152+
message: expectedErrorMessage
153+
};
154+
155+
var apiError = new util.ApiError(error);
156+
157+
assert.strictEqual(apiError.message, expectedErrorMessage);
158+
});
159+
160+
it('should use default message if there are no errors', function() {
161+
var expectedErrorMessage = 'Error during request.';
162+
163+
var error = {
164+
code: 100,
165+
response: { a: 'b', c: 'd' },
166+
message: expectedErrorMessage
167+
};
168+
169+
var apiError = new util.ApiError(error);
170+
171+
assert.strictEqual(apiError.message, expectedErrorMessage);
172+
});
173+
174+
it('should use default message if too many errors', function() {
175+
var expectedErrorMessage = 'Error during request.';
176+
177+
var error = {
178+
errors: [ new Error(), new Error() ],
179+
code: 100,
180+
response: { a: 'b', c: 'd' },
181+
message: expectedErrorMessage
182+
};
183+
184+
var apiError = new util.ApiError(error);
185+
186+
assert.strictEqual(apiError.message, expectedErrorMessage);
140187
});
141188
});
142189

0 commit comments

Comments
 (0)