mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-01 15:46:07 -05:00
Upload pre-compiled letter PDF to S3
Pre-compiled letter endpoint uploads PDF contents to S3 directly instead of creating a letter task to generate PDF using template preview. This moves some of the utility functions used by existing letter celery tasks to app.letters.utils, so that they can be reused by the API endpoint.
This commit is contained in:
@@ -16,9 +16,9 @@ from app.celery.letters_pdf_tasks import (
|
||||
get_letters_pdf,
|
||||
collate_letter_pdfs_for_day,
|
||||
group_letters,
|
||||
letter_in_created_state,
|
||||
get_letter_pdf_filename,
|
||||
letter_in_created_state
|
||||
)
|
||||
from app.letters.utils import get_letter_pdf_filename
|
||||
from app.models import Notification, NOTIFICATION_SENDING
|
||||
|
||||
from tests.conftest import set_config_values
|
||||
@@ -106,7 +106,7 @@ def test_get_letters_pdf_calculates_billing_units(
|
||||
@freeze_time("2017-12-04 17:31:00")
|
||||
def test_create_letters_pdf_calls_s3upload(mocker, sample_letter_notification):
|
||||
mocker.patch('app.celery.letters_pdf_tasks.get_letters_pdf', return_value=(b'\x00\x01', '1'))
|
||||
mock_s3 = mocker.patch('app.celery.letters_pdf_tasks.s3upload')
|
||||
mock_s3 = mocker.patch('app.letters.utils.s3upload')
|
||||
|
||||
create_letters_pdf(sample_letter_notification.id)
|
||||
|
||||
@@ -126,7 +126,7 @@ def test_create_letters_pdf_calls_s3upload(mocker, sample_letter_notification):
|
||||
|
||||
def test_create_letters_pdf_sets_billable_units(mocker, sample_letter_notification):
|
||||
mocker.patch('app.celery.letters_pdf_tasks.get_letters_pdf', return_value=(b'\x00\x01', 1))
|
||||
mocker.patch('app.celery.letters_pdf_tasks.s3upload')
|
||||
mocker.patch('app.letters.utils.s3upload')
|
||||
|
||||
create_letters_pdf(sample_letter_notification.id)
|
||||
noti = Notification.query.filter(Notification.reference == sample_letter_notification.reference).one()
|
||||
@@ -150,7 +150,7 @@ def test_create_letters_pdf_handles_request_errors(mocker, sample_letter_notific
|
||||
|
||||
def test_create_letters_pdf_handles_s3_errors(mocker, sample_letter_notification):
|
||||
mocker.patch('app.celery.letters_pdf_tasks.get_letters_pdf', return_value=(b'\x00\x01', 1))
|
||||
mock_s3 = mocker.patch('app.celery.letters_pdf_tasks.s3upload', side_effect=ClientError({}, 'operation_name'))
|
||||
mock_s3 = mocker.patch('app.letters.utils.s3upload', side_effect=ClientError({}, 'operation_name'))
|
||||
mock_retry = mocker.patch('app.celery.letters_pdf_tasks.create_letters_pdf.retry')
|
||||
|
||||
create_letters_pdf(sample_letter_notification.id)
|
||||
|
||||
@@ -697,11 +697,11 @@ def test_post_email_notification_with_invalid_reply_to_id_returns_400(client, sa
|
||||
assert 'BadRequestError' in resp_json['errors'][0]['error']
|
||||
|
||||
|
||||
def test_post_precompiled_letter_notification_returns_201(client, sample_service, mocker):
|
||||
mocker.patch('app.celery.letters_pdf_tasks.create_letters_pdf.apply_async')
|
||||
def test_post_precompiled_letter_notification_returns_201(client, sample_service, notify_user, mocker):
|
||||
s3mock = mocker.patch('app.v2.notifications.post_notifications.upload_letter_pdf')
|
||||
data = {
|
||||
"reference": "letter-reference",
|
||||
"content": "abcdefgh"
|
||||
"content": "bGV0dGVyLWNvbnRlbnQ="
|
||||
}
|
||||
auth_header = create_authorization_header(service_id=sample_service.id)
|
||||
response = client.post(
|
||||
@@ -711,6 +711,8 @@ def test_post_precompiled_letter_notification_returns_201(client, sample_service
|
||||
|
||||
assert response.status_code == 201, response.get_data(as_text=True)
|
||||
|
||||
s3mock.assert_called_once_with(ANY, b'letter-content')
|
||||
|
||||
resp_json = json.loads(response.get_data(as_text=True))
|
||||
assert resp_json == {
|
||||
'content': {'body': None, 'subject': 'Pre-compiled PDF'},
|
||||
|
||||
Reference in New Issue
Block a user