diff --git a/app/notifications/validators.py b/app/notifications/validators.py index a591d3c0d..f8e1722ca 100644 --- a/app/notifications/validators.py +++ b/app/notifications/validators.py @@ -85,7 +85,16 @@ def service_has_permission(notify_type, permissions): def check_service_has_permission(notify_type, permissions): if not service_has_permission(notify_type, permissions): raise BadRequestError(message="Service is not allowed to send {}".format( - get_public_notify_type_text(notify_type, plural=True))) + get_public_notify_type_text(notify_type, plural=True) + )) + + +def check_if_service_can_send_files_by_email(service_contact_link, service_id): + if not service_contact_link: + raise BadRequestError( + message=f"Send files by email has not been set up - add contact details for your service at " + f"{current_app.config['ADMIN_BASE_URL']}/services/{service_id}/service-settings/send-files-by-email" + ) def check_service_can_schedule_notification(permissions, scheduled_for): diff --git a/app/v2/notifications/post_notifications.py b/app/v2/notifications/post_notifications.py index c37d67d19..04aae8776 100644 --- a/app/v2/notifications/post_notifications.py +++ b/app/v2/notifications/post_notifications.py @@ -16,7 +16,6 @@ from app.models import ( SMS_TYPE, EMAIL_TYPE, LETTER_TYPE, - UPLOAD_DOCUMENT, PRIORITY, KEY_TYPE_TEST, KEY_TYPE_TEAM, @@ -35,13 +34,14 @@ from app.notifications.process_notifications import ( simulated_recipient ) from app.notifications.validators import ( - validate_and_format_recipient, + check_if_service_can_send_files_by_email, check_rate_limiting, check_service_can_schedule_notification, - check_service_has_permission, - validate_template, check_service_email_reply_to_id, - check_service_sms_sender_id + check_service_has_permission, + check_service_sms_sender_id, + validate_and_format_recipient, + validate_template, ) from app.schema_validation import validate from app.v2.errors import BadRequestError @@ -235,7 +235,10 @@ def process_document_uploads(personalisation_data, service, simulated=False): personalisation_data = personalisation_data.copy() - check_service_has_permission(UPLOAD_DOCUMENT, authenticated_service.permissions) + check_if_service_can_send_files_by_email( + service_contact_link=authenticated_service.contact_link, + service_id=authenticated_service.id + ) for key in file_keys: if simulated: diff --git a/tests/app/notifications/test_validators.py b/tests/app/notifications/test_validators.py index 49ea02ca3..f4ee4c6ee 100644 --- a/tests/app/notifications/test_validators.py +++ b/tests/app/notifications/test_validators.py @@ -8,6 +8,7 @@ from app.dao import templates_dao from app.models import SMS_TYPE, EMAIL_TYPE, LETTER_TYPE from app.notifications.process_notifications import create_content_for_notification from app.notifications.validators import ( + check_if_service_can_send_files_by_email, check_notification_content_is_not_empty, check_service_over_daily_message_limit, check_template_is_for_notification_type, @@ -528,3 +529,24 @@ def test_check_reply_to_sms_type(sample_service): def test_check_reply_to_letter_type(sample_service): letter_contact = create_letter_contact(service=sample_service, contact_block='123456') assert check_reply_to(sample_service.id, letter_contact.id, LETTER_TYPE) == '123456' + + +def test_check_if_service_can_send_files_by_email_raises_if_no_contact_link_set(sample_service): + with pytest.raises(BadRequestError) as e: + check_if_service_can_send_files_by_email( + service_contact_link=sample_service.contact_link, + service_id=sample_service.id + ) + + message = f"Send files by email has not been set up - add contact details for your service at " \ + f"http://localhost:6012/services/{sample_service.id}/service-settings/send-files-by-email" + assert e.value.status_code == 400 + assert e.value.message == message + + +def test_check_if_service_can_send_files_by_email_passes_if_contact_link_set(sample_service): + sample_service.contact_link = 'contact.me@gov.uk' + check_if_service_can_send_files_by_email( + service_contact_link=sample_service.contact_link, + service_id=sample_service.id + ) diff --git a/tests/app/v2/notifications/test_post_notifications.py b/tests/app/v2/notifications/test_post_notifications.py index 02cab3c15..ee4d46104 100644 --- a/tests/app/v2/notifications/test_post_notifications.py +++ b/tests/app/v2/notifications/test_post_notifications.py @@ -11,7 +11,6 @@ from app.models import ( NOTIFICATION_CREATED, SCHEDULE_NOTIFICATIONS, SMS_TYPE, - UPLOAD_DOCUMENT, INTERNATIONAL_SMS_TYPE ) from flask import json, current_app @@ -775,7 +774,8 @@ def test_post_email_notification_with_archived_reply_to_id_returns_400(client, s def test_post_notification_with_document_upload(client, notify_db_session, mocker): - service = create_service(service_permissions=[EMAIL_TYPE, UPLOAD_DOCUMENT]) + service = create_service(service_permissions=[EMAIL_TYPE]) + service.contact_link = 'contact.me@gov.uk' template = create_template( service=service, template_type='email', @@ -822,7 +822,8 @@ def test_post_notification_with_document_upload(client, notify_db_session, mocke def test_post_notification_with_document_upload_simulated(client, notify_db_session, mocker): - service = create_service(service_permissions=[EMAIL_TYPE, UPLOAD_DOCUMENT]) + service = create_service(service_permissions=[EMAIL_TYPE]) + service.contact_link = 'contact.me@gov.uk' template = create_template( service=service, template_type='email',