def test_update_letter_notifications_statuses_persisted(
        notify_api, mocker, sample_letter_template):
    sent_letter = create_notification(sample_letter_template,
                                      reference='ref-foo',
                                      status=NOTIFICATION_SENDING,
                                      billable_units=1)
    failed_letter = create_notification(sample_letter_template,
                                        reference='ref-bar',
                                        status=NOTIFICATION_SENDING,
                                        billable_units=2)
    create_service_callback_api(service=sample_letter_template.service,
                                url="https://original_url.com")
    valid_file = '{}|Sent|1|Unsorted\n{}|Failed|2|Sorted'.format(
        sent_letter.reference, failed_letter.reference)
    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)

    with pytest.raises(expected_exception=DVLAException) as e:
        update_letter_notifications_statuses(
            filename='NOTIFY-20170823160812-RSP.TXT')

    assert sent_letter.status == NOTIFICATION_DELIVERED
    assert sent_letter.billable_units == 1
    assert sent_letter.updated_at
    assert failed_letter.status == NOTIFICATION_TEMPORARY_FAILURE
    assert failed_letter.billable_units == 2
    assert failed_letter.updated_at
    assert "DVLA response file: {filename} has failed letters with notification.reference {failures}".format(
        filename="NOTIFY-20170823160812-RSP.TXT",
        failures=[format(failed_letter.reference)]) in str(e.value)
Ejemplo n.º 2
0
def test_update_letter_notifications_statuses_persists_daily_sorted_letter_count(
        notify_api, mocker, sample_letter_template):
    sent_letter_1 = create_notification(sample_letter_template,
                                        reference='ref-foo',
                                        status=NOTIFICATION_SENDING)
    sent_letter_2 = create_notification(sample_letter_template,
                                        reference='ref-bar',
                                        status=NOTIFICATION_SENDING)
    valid_file = '{}|Sent|1|Unsorted\n{}|Sent|2|Sorted'.format(
        sent_letter_1.reference, sent_letter_2.reference)

    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)
    persist_letter_count_mock = mocker.patch(
        'app.celery.tasks.persist_daily_sorted_letter_counts')

    # 2017-08-23 16:08:12 UTC is 2017-08-24 02:08:12 AEST
    update_letter_notifications_statuses(
        filename='NOTIFY-20170823160812-RSP.TXT')

    persist_letter_count_mock.assert_called_once_with(
        day=date(2017, 8, 24),
        file_name='NOTIFY-20170823160812-RSP.TXT',
        sorted_letter_counts={
            'Unsorted': 1,
            'Sorted': 1
        })
Ejemplo n.º 3
0
def test_update_letter_notifications_statuses_raises_for_invalid_format(
        notify_api, mocker):
    invalid_file = "ref-foo|Sent|1|Unsorted\nref-bar|Sent|2"
    mocker.patch("app.celery.tasks.s3.get_s3_file", return_value=invalid_file)

    with pytest.raises(DVLAException) as e:
        update_letter_notifications_statuses(
            filename="NOTIFY-20170823160812-RSP.TXT")
    assert "DVLA response file: {} has an invalid format".format(
        "NOTIFY-20170823160812-RSP.TXT") in str(e)
def test_update_letter_notifications_statuses_calls_with_correct_bucket_location(
        notify_api, mocker):
    s3_mock = mocker.patch('app.celery.tasks.s3.get_s3_object')

    with set_config(notify_api, 'NOTIFY_EMAIL_DOMAIN', 'foo.bar'):
        update_letter_notifications_statuses(
            filename='NOTIFY-20170823160812-RSP.TXT')
        s3_mock.assert_called_with(
            '{}-ftp'.format(current_app.config['NOTIFY_EMAIL_DOMAIN']),
            'NOTIFY-20170823160812-RSP.TXT')
Ejemplo n.º 5
0
def test_update_letter_notifications_statuses_calls_with_correct_bucket_location(
        notify_api, mocker):
    s3_mock = mocker.patch("app.celery.tasks.s3.get_s3_object")

    with set_config(notify_api, "NOTIFY_EMAIL_DOMAIN", "foo.bar"):
        update_letter_notifications_statuses(
            filename="NOTIFY-20170823160812-RSP.TXT")
        s3_mock.assert_called_with(
            "{}-ftp".format(current_app.config["NOTIFY_EMAIL_DOMAIN"]),
            "NOTIFY-20170823160812-RSP.TXT",
        )
Ejemplo n.º 6
0
def test_update_letter_notifications_statuses_builds_updates_from_content(
        notify_api, mocker):
    valid_file = "ref-foo|Sent|1|Unsorted\nref-bar|Sent|2|Sorted"
    mocker.patch("app.celery.tasks.s3.get_s3_file", return_value=valid_file)
    update_mock = mocker.patch("app.celery.tasks.process_updates_from_file")

    update_letter_notifications_statuses(
        filename="NOTIFY-20170823160812-RSP.TXT")

    update_mock.assert_called_with(
        "ref-foo|Sent|1|Unsorted\nref-bar|Sent|2|Sorted")
def test_update_letter_notifications_statuses_raises_dvla_exception(
        notify_api, mocker, sample_letter_template):
    valid_file = 'ref-foo|Failed|1|Unsorted'
    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)
    create_notification(sample_letter_template,
                        reference='ref-foo',
                        status=NOTIFICATION_SENDING,
                        billable_units=0)

    with pytest.raises(DVLAException) as e:
        update_letter_notifications_statuses(filename="failed.txt")
    failed = ["ref-foo"]
    assert "DVLA response file: {filename} has failed letters with notification.reference {failures}".format(
        filename="failed.txt", failures=failed) in str(e.value)
def test_update_letter_notification_statuses_when_notification_does_not_exist_updates_notification_history(
        sample_letter_template, mocker):
    valid_file = 'ref-foo|Sent|1|Unsorted'
    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)
    notification = create_notification_history(sample_letter_template,
                                               reference='ref-foo',
                                               status=NOTIFICATION_SENDING,
                                               billable_units=1)

    update_letter_notifications_statuses(
        filename="NOTIFY-20170823160812-RSP.TXT")

    updated_history = NotificationHistory.query.filter_by(
        id=notification.id).one()
    assert updated_history.status == NOTIFICATION_DELIVERED
def test_update_letter_notifications_does_not_call_send_callback_if_no_db_entry(
        notify_api, mocker, sample_letter_template):
    sent_letter = create_notification(sample_letter_template,
                                      reference='ref-foo',
                                      status=NOTIFICATION_SENDING,
                                      billable_units=0)
    valid_file = '{}|Sent|1|Unsorted\n'.format(sent_letter.reference)
    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)

    send_mock = mocker.patch(
        'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
    )

    update_letter_notifications_statuses(
        filename='NOTIFY-20170823160812-RSP.TXT')
    send_mock.assert_not_called()
Ejemplo n.º 10
0
def test_update_letter_notifications_statuses_raises_error_for_unknown_sorted_status(
        notify_api, mocker, sample_letter_template):
    sent_letter_1 = create_notification(sample_letter_template,
                                        reference='ref-foo',
                                        status=NOTIFICATION_SENDING)
    sent_letter_2 = create_notification(sample_letter_template,
                                        reference='ref-bar',
                                        status=NOTIFICATION_SENDING)
    valid_file = '{}|Sent|1|Unsorted\n{}|Sent|2|Error'.format(
        sent_letter_1.reference, sent_letter_2.reference)

    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)

    with pytest.raises(DVLAException) as e:
        update_letter_notifications_statuses(
            filename='NOTIFY-20170823160812-RSP.TXT')

    assert "DVLA response file: {filename} contains unknown Sorted status {unknown_status}".format(
        filename="NOTIFY-20170823160812-RSP.TXT",
        unknown_status="{'Error'}") in str(e)
Ejemplo n.º 11
0
def test_update_letter_notifications_statuses_persists_daily_sorted_letter_count_with_no_sorted_values(
        notify_api, mocker, sample_letter_template, notify_db_session):
    sent_letter_1 = create_notification(sample_letter_template,
                                        reference='ref-foo',
                                        status=NOTIFICATION_SENDING)
    sent_letter_2 = create_notification(sample_letter_template,
                                        reference='ref-bar',
                                        status=NOTIFICATION_SENDING)
    valid_file = '{}|Sent|1|Unsorted\n{}|Sent|2|Unsorted'.format(
        sent_letter_1.reference, sent_letter_2.reference)
    mocker.patch('app.celery.tasks.s3.get_s3_file', return_value=valid_file)

    update_letter_notifications_statuses(
        filename='NOTIFY-20170823160812-RSP.TXT')

    daily_sorted_letter = dao_get_daily_sorted_letter_by_billing_day(
        date(2017, 8, 23))

    assert daily_sorted_letter.unsorted_count == 2
    assert daily_sorted_letter.sorted_count == 0