def it_handles_no_error_type(self): payload = { 'errors': [ { 'code': 'unique_user_constraint', 'message': 'User already exists.' } ], 'request_id': '00000000-0000-0000-0000-000000000000', 'type': 'error.list' } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.MultipleMatchingUsersError): Intercom.get('/users') payload = { 'errors': [ { 'code': 'parameter_not_found', 'message': 'missing data parameter' } ], 'request_id': None, 'type': 'error.list' } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.BadRequestError): Intercom.get('/users')
def find(cls, **params): from intercom import Intercom collection = utils.resource_class_to_collection_name(cls) if 'id' in params: response = Intercom.get("/%s/%s" % (collection, params['id'])) else: response = Intercom.get("/%s" % (collection), **params) if response is None: raise HttpError('Http Error - No response entity returned') return cls(**response)
def it_raises_a_service_unavailable_error(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'service_unavailable', 'message': 'Zzzzz.' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.ServiceUnavailableError): Intercom.get('/users')
def it_raises_resource_not_found_by_type(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'not_found', 'message': 'Waaaaally?' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.ResourceNotFound): Intercom.get('/users')
def it_raises_rate_limit_exceeded(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'rate_limit_exceeded', 'message': 'Fair use please.' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.RateLimitExceeded): Intercom.get('/users')
def it_raises_a_multiple_matching_users_error(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'conflict', 'message': 'Two many cooks.' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.MultipleMatchingUsersError): Intercom.get('/users')
def it_raises_a_multiple_matching_users_error_when_receiving_a_conflict(self): # noqa payload = { 'type': 'error.list', 'errors': [ { 'code': 'conflict', 'message': 'Multiple existing users match this email address - must be more specific using user_id' # noqa } ] } # create bytes content content = json.dumps(payload).encode('utf-8') # create mock response resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(MultipleMatchingUsersError): Intercom.get('/users')
def it_raises_an_authentication_error(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'unauthorized', 'message': 'Your name\'s not down.' } ] } for code in ['unauthorized', 'forbidden']: payload['errors'][0]['type'] = code content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.AuthenticationError): Intercom.get('/users')
def it_raises_an_unexpected_untyped_error(self): payload = { 'type': 'error.list', 'errors': [ { 'message': 'UNIVAC' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp try: Intercom.get('/users') self.fail('UnexpectedError not raised.') except (UnexpectedError) as err: ok_("An unexpected error occured." in err.message) eq_(err.context['application_error_code'], None)
def it_raises_a_bad_request_error(self): payload = { 'type': 'error.list', 'errors': [ { 'type': None, 'message': 'email is required' } ] } for code in ['missing_parameter', 'parameter_invalid', 'bad_request']: payload['errors'][0]['type'] = code content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(intercom.BadRequestError): Intercom.get('/users')
def it_raises_a_multiple_matching_users_error_when_receiving_a_conflict( self): # noqa payload = { 'type': 'error.list', 'errors': [{ 'code': 'conflict', 'message': 'Multiple existing users match this email address - must be more specific using user_id' # noqa }] } # create bytes content content = json.dumps(payload).encode('utf-8') # create mock response resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp with assert_raises(MultipleMatchingUsersError): Intercom.get('/users')
def it_raises_an_unexpected_typed_error(self): payload = { 'type': 'error.list', 'errors': [ { 'type': 'hopper', 'message': 'The first compiler.' } ] } content = json.dumps(payload).encode('utf-8') resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp try: Intercom.get('/users') self.fail('UnexpectedError not raised.') except (UnexpectedError) as err: ok_("The error of type 'hopper' is not recognized" in err.message) # noqa eq_(err.context['http_code'], 200) eq_(err.context['application_error_code'], 'hopper')
def load(self): from intercom import Intercom cls = self.__class__ collection = utils.resource_class_to_collection_name(cls) if hasattr(self, 'id'): response = Intercom.get("/%s/%s" % (collection, self.id)) else: raise Exception( "Cannot load %s as it does not have a valid id." % (cls)) if response is None: raise HttpError('Http Error - No response entity returned') return cls(**response)
def load(self): from intercom import Intercom cls = self.__class__ collection = utils.resource_class_to_collection_name(cls) if hasattr(self, 'id'): response = Intercom.get("/%s/%s" % (collection, self.id)) else: raise Exception("Cannot load %s as it does not have a valid id." % (cls)) if response is None: raise HttpError('Http Error - No response entity returned') return cls(**response)
def get_page(self, url, params={}): # get a page of results from intercom import Intercom # if there is no url stop iterating if url is None: raise StopIteration response = Intercom.get(url, **params) if response is None: raise HttpError('Http Error - No response entity returned') collection = response[self.collection] # if there are no resources in the response stop iterating if collection is None: raise StopIteration # create the resource iterator self.resources = iter(collection) # grab the next page URL if one exists self.next_page = self.extract_next_link(response)
def count(cls): from intercom import Intercom response = Intercom.get("/counts/") return response[utils.resource_class_to_name(cls)]['count']