def test_create_pdf_for_templated_letter_boto_error( mocker, client, data_for_create_pdf_for_templated_letter_task): # handle boto error while uploading file mocker.patch('app.celery.tasks.s3upload', side_effect=BotoClientError({}, 'operation-name')) mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task') mock_logger = mocker.patch('app.celery.tasks.current_app.logger.info') mock_logger_exception = mocker.patch( 'app.celery.tasks.current_app.logger.exception') encrypted_data = current_app.encryption_client.encrypt( data_for_create_pdf_for_templated_letter_task) create_pdf_for_templated_letter(encrypted_data) assert not mock_celery.called mock_logger.assert_called_once_with( "Creating a pdf for notification with id abc-123") mock_logger_exception.assert_called_once_with( "Error uploading MY_LETTER.PDF to pdf bucket for notification abc-123")
def test_create_pdf_for_templated_letter_html_error( mocker, data_for_create_pdf_for_templated_letter_task, client): encrypted_data = current_app.encryption_client.encrypt( data_for_create_pdf_for_templated_letter_task) weasyprint_html = mocker.Mock() expected_exc = WeasyprintError() weasyprint_html.write_pdf.side_effect = expected_exc mocker.patch('app.celery.tasks.HTML', mocker.Mock(return_value=weasyprint_html)) mock_retry = mocker.patch( 'app.celery.tasks.create_pdf_for_templated_letter.retry', side_effect=Retry) with pytest.raises(Retry): create_pdf_for_templated_letter(encrypted_data) mock_retry.assert_called_once_with(exc=expected_exc, queue=QueueNames.SANITISE_LETTERS)
def test_create_pdf_for_templated_letter_happy_path( mocker, client, data_for_create_pdf_for_templated_letter_task, key_type, bucket_name, logo_filename): # create a pdf for templated letter using data from API, upload the pdf to the final S3 bucket, # and send data back to API so that it can update notification status and billable units. 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.info') mock_logger_exception = mocker.patch( 'app.celery.tasks.current_app.logger.exception') data_for_create_pdf_for_templated_letter_task[ "logo_filename"] = logo_filename data_for_create_pdf_for_templated_letter_task["key_type"] = key_type encrypted_data = current_app.encryption_client.encrypt( data_for_create_pdf_for_templated_letter_task) create_pdf_for_templated_letter(encrypted_data) mock_upload.assert_called_once_with( filedata=mocker.ANY, region=current_app.config['AWS_REGION'], bucket_name=current_app.config[bucket_name], file_location='MY_LETTER.PDF', ) mock_celery.assert_called_once_with( kwargs={ "notification_id": 'abc-123', "page_count": 1 }, name='update-billable-units-for-letter', queue='letter-tasks') mock_logger.assert_has_calls([ call("Creating a pdf for notification with id abc-123"), call( f"Uploaded letters PDF MY_LETTER.PDF to {current_app.config[bucket_name]} for notification id abc-123" ) ]) mock_logger_exception.assert_not_called()