Skip to content

Commit fc70b49

Browse files
committed
Adding support for unique_user_constraint and parameter_not_found errors. intercom#97
1 parent 493b3da commit fc70b49

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

intercom/errors.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ class UnexpectedError(IntercomError):
5959
'bad_request': BadRequestError,
6060
'missing_parameter': BadRequestError,
6161
'parameter_invalid': BadRequestError,
62+
'parameter_not_found': BadRequestError,
6263
'not_found': ResourceNotFound,
6364
'rate_limit_exceeded': RateLimitExceeded,
6465
'service_unavailable': ServiceUnavailableError,
6566
'conflict': MultipleMatchingUsersError,
67+
'unique_user_constraint': MultipleMatchingUsersError
6668
}

intercom/request.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,13 @@ def raise_application_errors_on_failure(cls, error_list_details, http_code): #
127127
error_details, http_code)
128128
error_class = errors.UnexpectedError
129129
else:
130-
message = error_details['message']
130+
message = error_details.get('message')
131131
raise error_class(message, error_context)
132132

133133
@classmethod
134134
def message_for_unexpected_error_with_type(cls, error_details, http_code): # noqa
135-
error_type = error_details['type']
136-
message = error_details['message']
135+
error_type = error_details.get('type')
136+
message = error_details.get('message')
137137
return "The error of type '%s' is not recognized. It occurred with the message: %s and http_code: '%s'. Please contact Intercom with these details." % (error_type, message, http_code) # noqa
138138

139139
@classmethod

tests/unit/test_request.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,42 @@ def it_raises_a_multiple_matching_users_error(self):
225225
with assert_raises(intercom.MultipleMatchingUsersError):
226226
Intercom.get('/users')
227227

228+
@istest
229+
def it_handles_no_error_type(self):
230+
payload = {
231+
'errors': [
232+
{
233+
'code': 'unique_user_constraint',
234+
'message': 'User already exists.'
235+
}
236+
],
237+
'request_id': '00000000-0000-0000-0000-000000000000',
238+
'type': 'error.list'
239+
}
240+
content = json.dumps(payload).encode('utf-8')
241+
resp = mock_response(content)
242+
with patch('requests.request') as mock_method:
243+
mock_method.return_value = resp
244+
with assert_raises(intercom.MultipleMatchingUsersError):
245+
Intercom.get('/users')
246+
247+
payload = {
248+
'errors': [
249+
{
250+
'code': 'parameter_not_found',
251+
'message': 'missing data parameter'
252+
}
253+
],
254+
'request_id': None,
255+
'type': 'error.list'
256+
}
257+
content = json.dumps(payload).encode('utf-8')
258+
resp = mock_response(content)
259+
with patch('requests.request') as mock_method:
260+
mock_method.return_value = resp
261+
with assert_raises(intercom.BadRequestError):
262+
Intercom.get('/users')
263+
228264
@istest
229265
def it_handles_empty_responses(self):
230266
resp = mock_response('', status_code=202)

0 commit comments

Comments
 (0)