def test_incoming(self, process_sms_delay_mock, enqueue_directly_mock): incoming('999123', 'inbound test', self.backend.get_api_id()) self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) queued_sms = self.get_queued_sms() self.assertIsNone(queued_sms.domain) self.assertIsNone(queued_sms.couch_recipient_doc_type) self.assertIsNone(queued_sms.couch_recipient) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'inbound test') self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.backend_api, self.backend.get_api_id()) couch_id = queued_sms.couch_id self.assertIsNotNone(couch_id) self.assertBillableDoesNotExist(couch_id) process_sms(queued_sms.pk) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.domain, self.domain) self.assertEqual(reporting_sms.couch_recipient_doc_type, self.contact.doc_type) self.assertEqual(reporting_sms.couch_recipient, self.contact.get_id) self.assertEqual(reporting_sms.phone_number, '+999123') self.assertEqual(reporting_sms.text, 'inbound test') self.assertEqual(reporting_sms.processed, True) self.assertEqual(reporting_sms.error, False) self.assertEqual(reporting_sms.backend_api, self.backend.get_api_id()) self.assertEqual(reporting_sms.couch_id, couch_id) self.assertBillableExists(couch_id)
def test_outgoing_with_error(self, process_sms_delay_mock, enqueue_directly_mock): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) couch_id = queued_sms.couch_id self.assertIsNotNone(couch_id) with patch_error_send() as send_mock: process_sms(queued_sms.pk) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.processed, False) self.assertEqual(reporting_sms.error, True) self.assertEqual(reporting_sms.couch_id, couch_id) self.assertEqual(reporting_sms.backend_api, self.backend.get_api_id()) self.assertEqual(reporting_sms.backend_id, self.backend.couch_id) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(couch_id)
def test_outgoing_failure_indefinite_retry(self, process_sms_delay_mock, enqueue_directly_mock): timestamp = datetime(2016, 1, 1, 12, 0) RETRY_SMS_INDEFINITELY.set(self.domain, True, NAMESPACE_DOMAIN) with patch_datetime_api(timestamp): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) for i in range(settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS): queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.domain, self.domain) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'test outgoing') self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, i) with patch_failed_send() as send_mock, patch_datetime_tasks(timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(queued_sms.couch_id) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) timestamp += timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) timestamp += ( timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INDEFINITELY_INTERVAL) - timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) ) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.domain, self.domain) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'test outgoing') self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS) with patch_successful_send() as send_mock, patch_datetime_tasks(timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.processed, True) self.assertEqual(reporting_sms.error, False) self.assertEqual(reporting_sms.num_processing_attempts, settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS + 1) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableExists(reporting_sms.couch_id)
def test_outgoing_failure_recovery(self, process_sms_delay_mock, enqueue_directly_mock): timestamp = datetime(2016, 1, 1, 12, 0) with patch_datetime_api(timestamp): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, 0) with patch_failed_send() as send_mock, patch_datetime_tasks( timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(queued_sms.couch_id) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) timestamp += timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, 1) with patch_successful_send() as send_mock, patch_datetime_tasks( timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.processed, True) self.assertEqual(reporting_sms.error, False) self.assertEqual(reporting_sms.num_processing_attempts, 2) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableExists(reporting_sms.couch_id)
def test_outgoing_failure(self, process_sms_delay_mock, enqueue_directly_mock): timestamp = datetime(2016, 1, 1, 12, 0) with patch_datetime_api(timestamp): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) for i in range(settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS): queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.domain, self.domain) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'test outgoing') self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, i) with patch_failed_send() as send_mock, patch_datetime_tasks( timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(queued_sms.couch_id) self.assertEqual(send_mock.call_count, 1) if i < (settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS - 1): self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) timestamp += timedelta( minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) else: self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.domain, self.domain) self.assertEqual(reporting_sms.phone_number, '+999123') self.assertEqual(reporting_sms.text, 'test outgoing') self.assertEqual(reporting_sms.processed, False) self.assertEqual(reporting_sms.error, True) self.assertEqual(reporting_sms.num_processing_attempts, settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS) self.assertBillableDoesNotExist(reporting_sms.couch_id)
def test_outgoing_failure_recovery(self, process_sms_delay_mock, enqueue_directly_mock): timestamp = datetime(2016, 1, 1, 12, 0) with patch_datetime_api(timestamp): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, 0) with patch_failed_send() as send_mock, patch_datetime_tasks(timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(queued_sms.couch_id) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) timestamp += timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, 1) with patch_successful_send() as send_mock, patch_datetime_tasks(timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.processed, True) self.assertEqual(reporting_sms.error, False) self.assertEqual(reporting_sms.num_processing_attempts, 2) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableExists(reporting_sms.couch_id)
def test_outgoing_failure_indefinite_retry(self, process_sms_delay_mock, enqueue_directly_mock): timestamp = datetime(2016, 1, 1, 12, 0) update_toggle_cache(RETRY_SMS_INDEFINITELY.slug, self.domain, True, NAMESPACE_DOMAIN) with patch_datetime_api(timestamp): send_sms(self.domain, None, '+999123', 'test outgoing') self.assertEqual(enqueue_directly_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) for i in range(settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS): queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.domain, self.domain) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'test outgoing') self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, i) with patch_failed_send() as send_mock, patch_datetime_tasks( timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableDoesNotExist(queued_sms.couch_id) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 1) self.assertEqual(self.reporting_sms_count, 0) timestamp += timedelta( minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL) timestamp += (timedelta( minutes=settings.SMS_QUEUE_REPROCESS_INDEFINITELY_INTERVAL) - timedelta(minutes=settings.SMS_QUEUE_REPROCESS_INTERVAL)) queued_sms = self.get_queued_sms() self.assertEqual(queued_sms.domain, self.domain) self.assertEqual(queued_sms.phone_number, '+999123') self.assertEqual(queued_sms.text, 'test outgoing') self.assertEqual(queued_sms.datetime_to_process, timestamp) self.assertEqual(queued_sms.processed, False) self.assertEqual(queued_sms.error, False) self.assertEqual(queued_sms.num_processing_attempts, settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS) with patch_successful_send() as send_mock, patch_datetime_tasks( timestamp + timedelta(seconds=1)): process_sms(queued_sms.pk) self.assertEqual(send_mock.call_count, 1) self.assertEqual(self.queued_sms_count, 0) self.assertEqual(self.reporting_sms_count, 1) reporting_sms = self.get_reporting_sms() self.assertEqual(reporting_sms.processed, True) self.assertEqual(reporting_sms.error, False) self.assertEqual(reporting_sms.num_processing_attempts, settings.SMS_QUEUE_MAX_PROCESSING_ATTEMPTS + 1) self.assertEqual(process_sms_delay_mock.call_count, 0) self.assertBillableExists(reporting_sms.couch_id)