Ejemplo n.º 1
0
def test_collate_letter_pdfs_to_be_sent(notify_api, sample_letter_template, mocker, time_to_run_task):
    with freeze_time("2020-02-17 18:00:00"):
        create_notification(
            template=sample_letter_template,
            status='created',
            reference='ref0',
            created_at=(datetime.now() - timedelta(hours=2))
        )

        create_notification(
            template=sample_letter_template,
            status='created',
            reference='ref1',
            created_at=(datetime.now() - timedelta(hours=3))
        )

        create_notification(
            template=sample_letter_template,
            status='created',
            reference='ref2',
            created_at=(datetime.now() - timedelta(days=2))
        )

    mocker.patch('app.celery.tasks.s3.head_s3_object', side_effect=[
        {'ContentLength': 2},
        {'ContentLength': 1},
        {'ContentLength': 3},
    ])

    mock_celery = mocker.patch('app.celery.letters_pdf_tasks.notify_celery.send_task')

    with set_config_values(notify_api, {'MAX_LETTER_PDF_COUNT_PER_ZIP': 2}):
        with freeze_time(time_to_run_task):
            collate_letter_pdfs_to_be_sent()

    assert len(mock_celery.call_args_list) == 2
    assert mock_celery.call_args_list[0] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-16/NOTIFY.REF2.D.2.C.C.20200215180000.PDF',
                '2020-02-17/NOTIFY.REF1.D.2.C.C.20200217150000.PDF'
            ],
            'upload_filename': 'NOTIFY.2020-02-17.001.k3x_WqC5KhB6e2DWv9Ma.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[1] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-17/NOTIFY.REF0.D.2.C.C.20200217160000.PDF'
            ],
            'upload_filename': 'NOTIFY.2020-02-17.002.J85cUw-FWlKuAIOcwdLS.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
Ejemplo n.º 2
0
def test_collate_letter_pdfs_to_be_sent(notify_api, notify_db_session, mocker,
                                        time_to_run_task):
    with freeze_time("2020-02-17 18:00:00"):
        service_1 = create_service(
            service_name="service 1",
            service_id='f2fe37b0-1301-11eb-aba9-4c3275916899')
        letter_template_1 = create_template(service_1,
                                            template_type=LETTER_TYPE)
        # second class
        create_notification(template=letter_template_1,
                            status='created',
                            reference='ref0',
                            created_at=(datetime.now() - timedelta(hours=2)))
        create_notification(template=letter_template_1,
                            status='created',
                            reference='ref1',
                            created_at=(datetime.now() - timedelta(hours=3)))
        create_notification(template=letter_template_1,
                            status='created',
                            reference='ref2',
                            created_at=(datetime.now() - timedelta(days=2)))

        # first class
        create_notification(template=letter_template_1,
                            status='created',
                            reference='first_class',
                            created_at=(datetime.now() - timedelta(hours=4)),
                            postage="first")

        # international
        create_notification(template=letter_template_1,
                            status='created',
                            reference='international',
                            created_at=(datetime.now() - timedelta(days=3)),
                            postage="europe")
        create_notification(template=letter_template_1,
                            status='created',
                            reference='international',
                            created_at=(datetime.now() - timedelta(days=4)),
                            postage="rest-of-world")

        # different service second class
        service_2 = create_service(
            service_name="service 2",
            service_id='3a5cea08-29fd-4bb9-b582-8dedd928b149')
        letter_template_2 = create_template(service_2,
                                            template_type=LETTER_TYPE)
        create_notification(template=letter_template_2,
                            status='created',
                            reference='another_service',
                            created_at=(datetime.now() - timedelta(hours=2)))

    mocker.patch('app.celery.tasks.s3.head_s3_object',
                 side_effect=[
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 2
                     },
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 3
                     },
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 1
                     },
                 ])

    mock_celery = mocker.patch(
        'app.celery.letters_pdf_tasks.notify_celery.send_task')

    with set_config_values(notify_api, {'MAX_LETTER_PDF_COUNT_PER_ZIP': 2}):
        with freeze_time(time_to_run_task):
            collate_letter_pdfs_to_be_sent()

    assert len(mock_celery.call_args_list) == 6
    assert mock_celery.call_args_list[0] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-17/NOTIFY.FIRST_CLASS.D.1.C.C.20200217140000.PDF'],
            'upload_filename':
            f'NOTIFY.2020-02-17.1.001.kHh01fdUxT9iEIYUt5Wx.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[1] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-17/NOTIFY.ANOTHER_SERVICE.D.2.C.C.20200217160000.PDF'],
            'upload_filename':
            f'NOTIFY.2020-02-17.2.001.MezXnKP3IvNZEoMsSlVo.{service_2.id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[2] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-16/NOTIFY.REF2.D.2.C.C.20200215180000.PDF',
                '2020-02-17/NOTIFY.REF1.D.2.C.C.20200217150000.PDF'
            ],
            'upload_filename':
            f'NOTIFY.2020-02-17.2.002.k3x_WqC5KhB6e2DWv9Ma.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[3] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-17/NOTIFY.REF0.D.2.C.C.20200217160000.PDF'],
            'upload_filename':
            f'NOTIFY.2020-02-17.2.003.J85cUw-FWlKuAIOcwdLS.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[4] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-15/NOTIFY.INTERNATIONAL.D.E.C.C.20200214180000.PDF'],
            'upload_filename':
            f'NOTIFY.2020-02-17.E.001.4YajCZzgzIl7zf8bjWK2.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[5] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-14/NOTIFY.INTERNATIONAL.D.N.C.C.20200213180000.PDF',
            ],
            'upload_filename':
            f'NOTIFY.2020-02-17.N.001.eSvP8Ph6EBKhh3k7BSA2.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
Ejemplo n.º 3
0
def test_collate_letter_pdfs_to_be_sent(
    notify_api, notify_db_session, mocker, time_to_run_task, letter_volumes_email_template
):
    with freeze_time("2020-02-17 18:00:00"):
        service_1 = create_service(service_name="service 1", service_id='f2fe37b0-1301-11eb-aba9-4c3275916899')
        letter_template_1 = create_template(service_1, template_type=LETTER_TYPE)
        # second class
        create_notification(
            template=letter_template_1,
            status='created',
            reference='ref0',
            created_at=(datetime.now() - timedelta(hours=2))
        )
        create_notification(
            template=letter_template_1,
            status='created',
            reference='ref1',
            created_at=(datetime.now() - timedelta(hours=3))
        )
        create_notification(
            template=letter_template_1,
            status='created',
            reference='ref2',
            created_at=(datetime.now() - timedelta(days=2))
        )

        # first class
        create_notification(
            template=letter_template_1,
            status='created',
            reference='first_class',
            created_at=(datetime.now() - timedelta(hours=4)),
            postage="first"
        )

        # international
        create_notification(
            template=letter_template_1,
            status='created',
            reference='international',
            created_at=(datetime.now() - timedelta(days=3)),
            postage="europe"
        )
        create_notification(
            template=letter_template_1,
            status='created',
            reference='international',
            created_at=(datetime.now() - timedelta(days=4)),
            postage="rest-of-world"
        )

        # different service second class
        service_2 = create_service(service_name="service 2", service_id='3a5cea08-29fd-4bb9-b582-8dedd928b149')
        letter_template_2 = create_template(service_2, template_type=LETTER_TYPE)
        create_notification(
            template=letter_template_2,
            status='created',
            reference='another_service',
            created_at=(datetime.now() - timedelta(hours=2))
        )

    bucket_name = current_app.config['LETTERS_PDF_BUCKET_NAME']
    s3 = boto3.client('s3', region_name='eu-west-1')
    s3.create_bucket(
        Bucket=bucket_name,
        CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'}
    )

    filenames = [
        '2020-02-17/NOTIFY.FIRST_CLASS.D.1.C.C.20200217140000.PDF',
        '2020-02-16/NOTIFY.REF2.D.2.C.C.20200215180000.PDF',
        '2020-02-17/NOTIFY.REF1.D.2.C.C.20200217150000.PDF',
        '2020-02-17/NOTIFY.REF0.D.2.C.C.20200217160000.PDF',
        '2020-02-15/NOTIFY.INTERNATIONAL.D.E.C.C.20200214180000.PDF',
        '2020-02-14/NOTIFY.INTERNATIONAL.D.N.C.C.20200213180000.PDF',
        '2020-02-17/NOTIFY.ANOTHER_SERVICE.D.2.C.C.20200217160000.PDF'
    ]

    for filename in filenames:
        s3.put_object(Bucket=bucket_name, Key=filename, Body=b'f')

    mock_celery = mocker.patch('app.celery.letters_pdf_tasks.notify_celery.send_task')
    mock_send_email_to_dvla = mocker.patch(
        'app.celery.letters_pdf_tasks.send_letters_volume_email_to_dvla'
    )

    with set_config_values(notify_api, {'MAX_LETTER_PDF_COUNT_PER_ZIP': 2}):
        with freeze_time(time_to_run_task):
            collate_letter_pdfs_to_be_sent()

    mock_send_email_to_dvla.assert_called_once_with([
        (1, 1, 'europe'), (1, 1, 'first'), (1, 1, 'rest-of-world'), (4, 4, 'second')
    ], datetime(2020, 2, 17).date())

    assert len(mock_celery.call_args_list) == 6
    assert mock_celery.call_args_list[0] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-17/NOTIFY.FIRST_CLASS.D.1.C.C.20200217140000.PDF'
            ],
            'upload_filename': f'NOTIFY.2020-02-17.1.001.kHh01fdUxT9iEIYUt5Wx.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[1] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': ['2020-02-17/NOTIFY.ANOTHER_SERVICE.D.2.C.C.20200217160000.PDF'],
            'upload_filename': f'NOTIFY.2020-02-17.2.001.MezXnKP3IvNZEoMsSlVo.{service_2.id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[2] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-16/NOTIFY.REF2.D.2.C.C.20200215180000.PDF',
                '2020-02-17/NOTIFY.REF1.D.2.C.C.20200217150000.PDF'
            ],
            'upload_filename': f'NOTIFY.2020-02-17.2.002.k3x_WqC5KhB6e2DWv9Ma.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[3] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-17/NOTIFY.REF0.D.2.C.C.20200217160000.PDF'
            ],
            'upload_filename': f'NOTIFY.2020-02-17.2.003.J85cUw-FWlKuAIOcwdLS.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[4] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-15/NOTIFY.INTERNATIONAL.D.E.C.C.20200214180000.PDF'
            ],
            'upload_filename': f'NOTIFY.2020-02-17.E.001.4YajCZzgzIl7zf8bjWK2.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
    assert mock_celery.call_args_list[5] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-14/NOTIFY.INTERNATIONAL.D.N.C.C.20200213180000.PDF',
            ],
            'upload_filename': f'NOTIFY.2020-02-17.N.001.eSvP8Ph6EBKhh3k7BSA2.{letter_template_1.service_id}.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib'
    )
def test_collate_letter_pdfs_to_be_sent(notify_api, sample_letter_template,
                                        mocker, time_to_run_task):
    with freeze_time("2020-02-17 18:00:00"):
        # second class
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='ref0',
                            created_at=(datetime.now() - timedelta(hours=2)))
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='ref1',
                            created_at=(datetime.now() - timedelta(hours=3)))
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='ref2',
                            created_at=(datetime.now() - timedelta(days=2)))

        # first class
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='first_class',
                            created_at=(datetime.now() - timedelta(hours=4)),
                            postage="first")

        # international
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='international',
                            created_at=(datetime.now() - timedelta(days=3)),
                            postage="europe")
        create_notification(template=sample_letter_template,
                            status='created',
                            reference='international',
                            created_at=(datetime.now() - timedelta(days=4)),
                            postage="rest-of-world")

    mocker.patch('app.celery.tasks.s3.head_s3_object',
                 side_effect=[
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 2
                     },
                     {
                         'ContentLength': 1
                     },
                     {
                         'ContentLength': 3
                     },
                     {
                         'ContentLength': 1
                     },
                 ])

    mock_celery = mocker.patch(
        'app.celery.letters_pdf_tasks.notify_celery.send_task')

    with set_config_values(notify_api, {'MAX_LETTER_PDF_COUNT_PER_ZIP': 2}):
        with freeze_time(time_to_run_task):
            collate_letter_pdfs_to_be_sent()

    assert len(mock_celery.call_args_list) == 5
    assert mock_celery.call_args_list[0] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-17/NOTIFY.FIRST_CLASS.D.1.C.C.20200217140000.PDF'],
            'upload_filename':
            'NOTIFY.2020-02-17.1.001.kHh01fdUxT9iEIYUt5Wx.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[1] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-16/NOTIFY.REF2.D.2.C.C.20200215180000.PDF',
                '2020-02-17/NOTIFY.REF1.D.2.C.C.20200217150000.PDF'
            ],
            'upload_filename':
            'NOTIFY.2020-02-17.2.001.k3x_WqC5KhB6e2DWv9Ma.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[2] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-17/NOTIFY.REF0.D.2.C.C.20200217160000.PDF'],
            'upload_filename':
            'NOTIFY.2020-02-17.2.002.J85cUw-FWlKuAIOcwdLS.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[3] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip':
            ['2020-02-15/NOTIFY.INTERNATIONAL.D.E.C.C.20200214180000.PDF'],
            'upload_filename':
            'NOTIFY.2020-02-17.E.001.4YajCZzgzIl7zf8bjWK2.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')
    assert mock_celery.call_args_list[4] == call(
        name='zip-and-send-letter-pdfs',
        kwargs={
            'filenames_to_zip': [
                '2020-02-14/NOTIFY.INTERNATIONAL.D.N.C.C.20200213180000.PDF',
            ],
            'upload_filename':
            'NOTIFY.2020-02-17.N.001.eSvP8Ph6EBKhh3k7BSA2.ZIP'
        },
        queue='process-ftp-tasks',
        compression='zlib')