示例#1
0
def test_sanitise_international_letters(
    mocker,
    client,
    extra_args,
    expected_error,
):
    mocker.patch('app.celery.tasks.s3download',
                 return_value=BytesIO(bad_postcode))
    mock_upload = mocker.patch('app.celery.tasks.s3upload')
    mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task')

    sanitise_and_upload_letter('abc-123', 'filename.pdf', **extra_args)

    encrypted_task_args = current_app.encryption_client.encrypt({
        'page_count':
        1,
        'message':
        expected_error,
        'invalid_pages': [1],
        'validation_status':
        'failed',
        'filename':
        'filename.pdf',
        'notification_id':
        'abc-123',
        'address':
        None,
    })

    assert not mock_upload.called
    mock_celery.assert_called_once_with(args=(encrypted_task_args, ),
                                        name='process-sanitised-letter',
                                        queue='letter-tasks')
示例#2
0
def test_sanitise_invalid_letter(mocker, client):
    file_with_content_in_margins = BytesIO(no_colour)

    mocker.patch('app.celery.tasks.s3download',
                 return_value=file_with_content_in_margins)
    mock_upload = mocker.patch('app.celery.tasks.s3upload')
    mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task')

    sanitise_and_upload_letter('abc-123', 'filename.pdf')

    encrypted_task_args = current_app.encryption_client.encrypt({
        'page_count':
        2,
        'message':
        'content-outside-printable-area',
        'invalid_pages': [1, 2],
        'validation_status':
        'failed',
        'filename':
        'filename.pdf',
        'notification_id':
        'abc-123',
        'address':
        None
    })

    assert not mock_upload.called
    mock_celery.assert_called_once_with(args=(encrypted_task_args, ),
                                        name='process-sanitised-letter',
                                        queue='letter-tasks')
示例#3
0
def test_sanitise_letter_which_fails_redaction(mocker, client):
    letter = BytesIO(repeated_address_block)

    mocker.patch('app.celery.tasks.s3download', return_value=letter)
    mock_redact_address = mocker.patch(
        'app.celery.tasks.copy_redaction_failed_pdf')
    mock_upload = mocker.patch('app.celery.tasks.s3upload')
    mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task')

    sanitise_and_upload_letter('abc-123', 'filename.pdf')

    sanitisation_data = {
        'page_count': 1,
        'message': None,
        'invalid_pages': None,
        'validation_status': 'passed',
        'filename': 'filename.pdf',
        'notification_id': 'abc-123',
        'address': 'Queen Elizabeth\nBuckingham Palace\nLondon\nSW1 1AA',
    }
    encrypted_task_args = current_app.encryption_client.encrypt(
        sanitisation_data)

    mock_redact_address.assert_called_once_with('filename.pdf')
    assert mock_upload.called
    mock_celery.assert_called_once_with(args=(encrypted_task_args, ),
                                        name='process-sanitised-letter',
                                        queue='letter-tasks')
示例#4
0
def test_sanitise_and_upload_letter_raises_a_boto_error(mocker, client):
    mocker.patch('app.celery.tasks.s3download',
                 side_effect=BotoClientError({}, 'operation-name'))
    mock_upload = mocker.patch('app.celery.tasks.s3upload')
    mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task')
    mock_logger = mocker.patch('app.celery.tasks.current_app.logger.exception')

    filename = 'filename.pdf'
    notification_id = 'abc-123'

    sanitise_and_upload_letter(notification_id, filename)

    assert not mock_upload.called
    assert not mock_celery.called
    mock_logger.assert_called_once_with(
        'Error downloading {} from scan bucket or uploading to sanitise bucket for notification {}'
        .format(filename, notification_id))
示例#5
0
def test_sanitise_and_upload_valid_letter(mocker, client):
    valid_file = BytesIO(blank_with_address)

    mocker.patch('app.celery.tasks.s3download', return_value=valid_file)
    mock_upload = mocker.patch('app.celery.tasks.s3upload')
    mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task')
    mock_redact_address = mocker.patch(
        'app.celery.tasks.copy_redaction_failed_pdf')
    mock_backup_original = mocker.patch('app.celery.tasks.copy_s3_object')

    sanitise_and_upload_letter('abc-123', 'filename.pdf')

    mock_upload.assert_called_once_with(
        filedata=mocker.ANY,
        region=current_app.config['AWS_REGION'],
        bucket_name=current_app.config['SANITISED_LETTER_BUCKET_NAME'],
        file_location='filename.pdf',
    )

    encrypted_task_args = current_app.encryption_client.encrypt({
        'page_count':
        1,
        'message':
        None,
        'invalid_pages':
        None,
        'validation_status':
        'passed',
        'filename':
        'filename.pdf',
        'notification_id':
        'abc-123',
        'address':
        'Queen Elizabeth\nBuckingham Palace\nLondon\nSW1 1AA'
    })

    mock_celery.assert_called_once_with(args=(encrypted_task_args, ),
                                        name='process-sanitised-letter',
                                        queue='letter-tasks')
    assert not mock_redact_address.called

    mock_backup_original.assert_called_once_with(
        current_app.config['LETTERS_SCAN_BUCKET_NAME'], 'filename.pdf',
        current_app.config['PRECOMPILED_ORIGINALS_BACKUP_LETTER_BUCKET_NAME'],
        'filename.pdf')