Exemple #1
0
def test_ses_callback_should_update_multiple_notification_status_sent(
        client, notify_db, notify_db_session, sample_email_template, mocker):

    send_mock = mocker.patch(
        'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
    )
    create_sample_notification(notify_db,
                               notify_db_session,
                               template=sample_email_template,
                               reference='ref1',
                               sent_at=datetime.utcnow(),
                               status='sending')

    create_sample_notification(notify_db,
                               notify_db_session,
                               template=sample_email_template,
                               reference='ref2',
                               sent_at=datetime.utcnow(),
                               status='sending')

    create_sample_notification(notify_db,
                               notify_db_session,
                               template=sample_email_template,
                               reference='ref3',
                               sent_at=datetime.utcnow(),
                               status='sending')
    create_service_callback_api(service=sample_email_template.service,
                                url="https://original_url.com")
    assert process_ses_response(
        ses_notification_callback(reference='ref1')) is None
    assert process_ses_response(
        ses_notification_callback(reference='ref2')) is None
    assert process_ses_response(
        ses_notification_callback(reference='ref3')) is None
    assert send_mock.called
Exemple #2
0
def test_ses_callback_should_update_notification_status(
        client, notify_db, notify_db_session, sample_email_template, mocker):
    with freeze_time('2001-01-01T12:00:00'):
        mocker.patch('app.statsd_client.incr')
        mocker.patch('app.statsd_client.timing_with_dates')
        send_mock = mocker.patch(
            'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
        )
        notification = create_sample_notification(
            notify_db,
            notify_db_session,
            template=sample_email_template,
            reference='ref',
            status='sending',
            sent_at=datetime.utcnow())
        callback_api = create_service_callback_api(
            service=sample_email_template.service,
            url="https://original_url.com")
        assert get_notification_by_id(notification.id).status == 'sending'

        errors = process_ses_response(
            ses_notification_callback(reference='ref'))
        assert errors is None
        assert get_notification_by_id(notification.id).status == 'delivered'
        statsd_client.timing_with_dates.assert_any_call(
            "callback.ses.elapsed-time", datetime.utcnow(),
            notification.sent_at)
        statsd_client.incr.assert_any_call("callback.ses.delivered")
        updated_notification = Notification.query.get(notification.id)
        encrypted_data = create_delivery_status_callback_data(
            updated_notification, callback_api)
        send_mock.assert_called_once_with(
            [str(notification.id), encrypted_data], queue="service-callbacks")
Exemple #3
0
def test_ses_callback_should_send_on_complaint_to_user_callback_api(
        sample_email_template, mocker):
    send_mock = mocker.patch(
        'app.celery.service_callback_tasks.send_complaint_to_service.apply_async'
    )
    create_service_callback_api(service=sample_email_template.service,
                                url="https://original_url.com",
                                callback_type="complaint")

    notification = create_notification(template=sample_email_template,
                                       reference='ref1')
    response = ses_complaint_callback()
    errors = process_ses_response(response)
    assert errors is None

    assert send_mock.call_count == 1
    assert encryption.decrypt(send_mock.call_args[0][0][0]) == {
        'complaint_date': '2018-06-05T13:59:58.000000Z',
        'complaint_id': str(Complaint.query.one().id),
        'notification_id': str(notification.id),
        'reference': None,
        'service_callback_api_bearer_token': 'some_super_secret',
        'service_callback_api_url': 'https://original_url.com',
        'to': '*****@*****.**'
    }
def process_ses_results(self, response):
    try:
        errors = process_ses_response(response)
        if errors:
            current_app.logger.error(errors)
    except Exception as exc:
        current_app.logger.exception('Error processing SES results')
        self.retry(queue=QueueNames.RETRY)
Exemple #5
0
def test_ses_callback_should_set_status_to_temporary_failure(
        client, notify_db, notify_db_session, sample_email_template, mocker):
    send_mock = mocker.patch(
        'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
    )
    notification = create_sample_notification(notify_db,
                                              notify_db_session,
                                              template=sample_email_template,
                                              reference='ref',
                                              status='sending',
                                              sent_at=datetime.utcnow())
    create_service_callback_api(service=notification.service,
                                url="https://original_url.com")
    assert get_notification_by_id(notification.id).status == 'sending'
    assert process_ses_response(
        ses_soft_bounce_callback(reference='ref')) is None
    assert get_notification_by_id(
        notification.id).status == 'temporary-failure'
    assert send_mock.called
Exemple #6
0
def test_ses_callback_does_not_call_send_delivery_status_if_no_db_entry(
        client, notify_db, notify_db_session, sample_email_template, mocker):
    with freeze_time('2001-01-01T12:00:00'):

        send_mock = mocker.patch(
            'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
        )
        notification = create_sample_notification(
            notify_db,
            notify_db_session,
            template=sample_email_template,
            reference='ref',
            status='sending',
            sent_at=datetime.utcnow())

        assert get_notification_by_id(notification.id).status == 'sending'

        errors = process_ses_response(
            ses_notification_callback(reference='ref'))
        assert errors is None
        assert get_notification_by_id(notification.id).status == 'delivered'

        send_mock.assert_not_called()