mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-26 10:21:33 -05:00
Soon enough every service will have this permission, and they won’t be able to switch it off. So we should clean up our codebase and make it so there’s no dependancy on a row existing in the permissions table. This is the first step of that process for the API. Before we can remove it, we have to stop checking from it. Next step will be to stop inserting the permission, then finally remove it from the database.
123 lines
4.9 KiB
Python
123 lines
4.9 KiB
Python
import uuid
|
|
|
|
import pytest
|
|
from freezegun import freeze_time
|
|
|
|
from app.dao.notifications_dao import get_notification_by_id
|
|
from app.models import EMAIL_TYPE, LETTER_TYPE, UPLOAD_LETTERS
|
|
from app.service.send_notification import send_pdf_letter_notification
|
|
from app.v2.errors import BadRequestError, TooManyRequestsError
|
|
from notifications_utils.s3 import S3ObjectNotFound
|
|
from tests.app.db import create_service
|
|
|
|
|
|
@pytest.mark.parametrize('permissions', [
|
|
[EMAIL_TYPE],
|
|
[UPLOAD_LETTERS],
|
|
])
|
|
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)
|
|
|
|
|
|
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)
|
|
|
|
|
|
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)
|
|
|
|
|
|
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
|
|
|
|
|
|
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)
|
|
|
|
|
|
@freeze_time("2019-08-02 11:00:00")
|
|
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)
|
|
)
|