예제 #1
0
def test_send_pdf_letter_notification_validates_created_by(
    sample_service_full_permissions, fake_uuid, sample_user
):
    post_data = {'filename': 'valid.pdf', 'created_by': sample_user.id, 'file_id': fake_uuid, 'postage': 'first',
                 'recipient_address': 'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'}

    with pytest.raises(BadRequestError):
        send_pdf_letter_notification(sample_service_full_permissions.id, post_data)
예제 #2
0
def test_send_pdf_letter_notification_raises_error_if_service_does_not_have_permission(
    notify_db_session,
    fake_uuid,
    permissions,
):
    service = create_service(service_permissions=permissions)
    post_data = {'filename': 'valid.pdf', 'created_by': fake_uuid, 'file_id': fake_uuid, 'postage': 'first',
                 'recipient_address': 'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'}

    with pytest.raises(BadRequestError):
        send_pdf_letter_notification(service.id, post_data)
예제 #3
0
def test_send_pdf_letter_notification_validates_created_by(
        sample_service_full_permissions, fake_uuid, sample_user):
    post_data = {
        'filename': 'valid.pdf',
        'created_by': sample_user.id,
        'file_id': fake_uuid
    }

    with pytest.raises(BadRequestError):
        send_pdf_letter_notification(sample_service_full_permissions.id,
                                     post_data)
def test_send_pdf_letter_notification_validates_created_by(
        sample_service_full_permissions, fake_uuid, sample_user):
    post_data = {
        "filename": "valid.pdf",
        "created_by": sample_user.id,
        "file_id": fake_uuid,
    }

    with pytest.raises(BadRequestError):
        send_pdf_letter_notification(sample_service_full_permissions.id,
                                     post_data)
예제 #5
0
def test_send_pdf_letter_notification_raises_error_when_pdf_is_not_in_transient_letter_bucket(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
    notify_user,
):
    user = sample_service_full_permissions.users[0]
    post_data = {'filename': 'valid.pdf', 'created_by': user.id, 'file_id': fake_uuid, 'postage': 'first',
                 'recipient_address': 'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'}
    mocker.patch('app.service.send_notification.utils_s3download', side_effect=S3ObjectNotFound({}, ''))

    with pytest.raises(S3ObjectNotFound):
        send_pdf_letter_notification(sample_service_full_permissions.id, post_data)
예제 #6
0
def test_send_pdf_letter_notification_raises_error_if_service_in_trial_mode(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
):
    sample_service_full_permissions.restricted = True
    user = sample_service_full_permissions.users[0]
    post_data = {'filename': 'valid.pdf', 'created_by': user.id, 'file_id': fake_uuid,
                 'recipient_address': 'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'}

    with pytest.raises(BadRequestError) as e:
        send_pdf_letter_notification(sample_service_full_permissions.id, post_data)
    assert 'trial mode' in e.value.message
예제 #7
0
def test_send_pdf_letter_notification_raises_error_if_service_is_over_daily_message_limit(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
):
    mocker.patch(
        'app.service.send_notification.check_service_over_daily_message_limit',
        side_effect=TooManyRequestsError(10))
    post_data = {'filename': 'valid.pdf', 'created_by': fake_uuid, 'file_id': fake_uuid, 'postage': 'first',
                 'recipient_address': 'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'}

    with pytest.raises(TooManyRequestsError):
        send_pdf_letter_notification(sample_service_full_permissions.id, post_data)
예제 #8
0
def test_send_pdf_letter_notification_raises_error_if_service_does_not_have_permission(
    notify_db_session,
    fake_uuid,
    permissions,
):
    service = create_service(service_permissions=permissions)
    post_data = {
        'filename': 'valid.pdf',
        'created_by': fake_uuid,
        'file_id': fake_uuid
    }

    with pytest.raises(BadRequestError):
        send_pdf_letter_notification(service.id, post_data)
예제 #9
0
def test_send_pdf_letter_notification_raises_error_if_service_is_over_daily_message_limit(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
):
    mocker.patch(
        'app.service.send_notification.check_service_over_daily_message_limit',
        side_effect=TooManyRequestsError(10))
    post_data = {
        'filename': 'valid.pdf',
        'created_by': fake_uuid,
        'file_id': fake_uuid
    }

    with pytest.raises(TooManyRequestsError):
        send_pdf_letter_notification(sample_service_full_permissions.id,
                                     post_data)
예제 #10
0
def test_send_pdf_letter_notification_raises_error_if_service_in_trial_mode(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
):
    sample_service_full_permissions.restricted = True
    user = sample_service_full_permissions.users[0]
    post_data = {
        'filename': 'valid.pdf',
        'created_by': user.id,
        'file_id': fake_uuid
    }

    with pytest.raises(BadRequestError) as e:
        send_pdf_letter_notification(sample_service_full_permissions.id,
                                     post_data)
    assert 'trial mode' in e.value.message
예제 #11
0
def test_send_pdf_letter_notification_raises_error_when_pdf_is_not_in_transient_letter_bucket(
    mocker,
    sample_service_full_permissions,
    fake_uuid,
    notify_user,
):
    user = sample_service_full_permissions.users[0]
    post_data = {
        'filename': 'valid.pdf',
        'created_by': user.id,
        'file_id': fake_uuid
    }
    mocker.patch('app.service.send_notification.utils_s3download',
                 side_effect=S3ObjectNotFound({}, ''))

    with pytest.raises(S3ObjectNotFound):
        send_pdf_letter_notification(sample_service_full_permissions.id,
                                     post_data)
예제 #12
0
def test_send_pdf_letter_notification_creates_notification_and_moves_letter(
    mocker,
    sample_service_full_permissions,
    notify_user,
):
    user = sample_service_full_permissions.users[0]
    filename = 'valid.pdf'
    file_id = uuid.uuid4()
    post_data = {
        'filename': filename,
        'created_by': user.id,
        'file_id': file_id,
        'postage': 'second',
        'recipient_address':
        'Bugs%20Bunny%0A123%20Main%20Street%0ALooney%20Town'
    }

    mocker.patch('app.service.send_notification.utils_s3download')
    mocker.patch('app.service.send_notification.get_page_count',
                 return_value=1)
    s3_mock = mocker.patch(
        'app.service.send_notification.move_uploaded_pdf_to_letters_bucket')

    result = send_pdf_letter_notification(sample_service_full_permissions.id,
                                          post_data)

    notification = get_notification_by_id(file_id)

    assert notification.id == file_id
    assert notification.api_key_id is None
    assert notification.client_reference == filename
    assert notification.created_by_id == user.id
    assert notification.postage == 'second'
    assert notification.notification_type == LETTER_TYPE
    assert notification.billable_units == 1
    assert notification.to == "Bugs Bunny\n123 Main Street\nLooney Town"

    assert notification.service_id == sample_service_full_permissions.id

    assert result == {'id': str(notification.id)}

    s3_mock.assert_called_once_with(
        'service-{}/{}.pdf'.format(sample_service_full_permissions.id,
                                   file_id),
        '2019-08-02/NOTIFY.{}.D.2.C.C.20190802110000.PDF'.format(
            notification.reference))
def test_send_pdf_letter_notification_creates_notification_and_moves_letter(
    mocker,
    sample_service_full_permissions,
    notify_user,
):
    user = sample_service_full_permissions.users[0]
    filename = "valid.pdf"
    file_id = uuid.uuid4()
    post_data = {
        "filename": filename,
        "created_by": user.id,
        "file_id": file_id
    }

    mocker.patch("app.service.send_notification.utils_s3download")
    mocker.patch("app.service.send_notification.get_page_count",
                 return_value=1)
    s3_mock = mocker.patch(
        "app.service.send_notification.move_uploaded_pdf_to_letters_bucket")

    result = send_pdf_letter_notification(sample_service_full_permissions.id,
                                          post_data)

    notification = get_notification_by_id(file_id)

    assert notification.id == file_id
    assert notification.api_key_id is None
    assert notification.client_reference == filename
    assert notification.created_by_id == user.id
    assert notification.postage == "second"
    assert notification.notification_type == LETTER_TYPE
    assert notification.billable_units == 1
    assert notification.to == filename
    assert notification.service_id == sample_service_full_permissions.id

    assert result == {"id": str(notification.id)}

    s3_mock.assert_called_once_with(
        "service-{}/{}.pdf".format(sample_service_full_permissions.id,
                                   file_id),
        "2019-08-02/NOTIFY.{}.D.2.C.C.20190802110000.PDF".format(
            notification.reference),
    )
예제 #14
0
def create_pdf_letter(service_id):
    resp = send_pdf_letter_notification(service_id, request.get_json())
    return jsonify(resp), 201
예제 #15
0
def create_pdf_letter(service_id):
    data = validate(request.get_json(), send_pdf_letter_request)
    resp = send_pdf_letter_notification(service_id, data)
    return jsonify(resp), 201