def test_get_sms_status(app_, mock_twilio_get): with mock_twilio_get: from notifications_delivery.clients.sms.twilio import TwilioClient twilio_client = TwilioClient(app_.config) msg_id = "123" status = twilio_client.status(msg_id) twilio_client.client.messages.get.assert_called_with(msg_id)
def test_get_sms_status_failed(app_, mock_twilio_get_exception): with mock_twilio_get_exception: from notifications_delivery.clients.sms.twilio import ( TwilioClient, SmsClientException) twilio_client = TwilioClient(app_.config) msg_id = "123" try: status = twilio_client.status(msg_id) pytest.fail("Failed to raise SmsClientException") except SmsClientException as e: pass
def test_send_sms(app_, mock_twilio_create, sms_template_notification, sms_content): with mock_twilio_create: from notifications_delivery.clients.sms.twilio import TwilioClient twilio_client = TwilioClient(app_.config) request_id = twilio_client.send_sms(sms_template_notification, sms_content) assert request_id twilio_client.client.messages.create.assert_called_with( to=sms_template_notification['to'], body=sms_content, from_=twilio_client.from_number)
def test_send_sms_failed(app_, mock_twilio_create_exception, sms_template_notification, sms_content): with mock_twilio_create_exception: from notifications_delivery.clients.sms.twilio import ( TwilioClient, SmsClientException) twilio_client = TwilioClient(app_.config) from twilio.rest import TwilioRestClient try: message_id = twilio_client.send_sms(sms_template_notification, sms_content) pytest.fail("Failed to raise SmsClientException") except SmsClientException as e: pass
def process_all_queues(config, queue_name_prefix): """ For each queue on the aws account process one message. """ logger = _set_up_logger(config) twilio_client = TwilioClient(config) aws_ses_client = AwsSesClient(region=config['AWS_REGION']) notify_beta_client = ApiClient( base_url=config['API_HOST_NAME'], client_id=config['DELIVERY_CLIENT_USER_NAME'], secret=config['DELIVERY_CLIENT_SECRET']) queues = _get_all_queues(config, queue_name_prefix) for queue in queues: try: messages = queue.receive_messages( MaxNumberOfMessages=config['PROCESSOR_MAX_NUMBER_OF_MESSAGES'], VisibilityTimeout=config['PROCESSOR_VISIBILITY_TIMEOUT'], MessageAttributeNames=config['NOTIFICATION_ATTRIBUTES']) for message in messages: logger.info("Processing message {}".format( _get_message_id(message))) to_delete = True try: _process_message(config, message, twilio_client, aws_ses_client, notify_beta_client) except ProcessingError as e: msg = ("Failed prcessing message from queue {}." " The message will not be returned to the queue." ).format(queue.url) logger.error(msg) logger.exception(e) to_delete = True except ExternalConnectionError as e: msg = ( "Failed prcessing message from queue {}." " The message will be returned to the queue.").format( queue.url) logger.error(msg) logger.exception(e) to_delete = False if to_delete: message.delete() logger.info("Deleted message {}".format( _get_message_id(message))) except Exception as e: logger.error( "Unexpected exception processing message from queue {}".format( queue.url)) logger.exception(e)