mirror of
https://github.com/GSA/notifications-api.git
synced 2026-05-30 19:08:33 -04:00
- Refactor v2 post_notification to use a single method for sms and email.
- Added the `simulate` notification logic to version 2. We have 3 email addresses and phone numbers that are used to simulate a successful post to /notifications. This was missed out of the version 2 endpoint. - Added a test to template_dao to check for the default value of normal for new templates - in v2 get_notifications, casted the path param to a uuid, if not uuid abort(404)
This commit is contained in:
@@ -31,6 +31,7 @@ def test_create_template(sample_service, sample_user, template_type, subject):
|
||||
assert Template.query.count() == 1
|
||||
assert len(dao_get_all_templates_for_service(sample_service.id)) == 1
|
||||
assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template'
|
||||
assert dao_get_all_templates_for_service(sample_service.id)[0].process_type == 'normal'
|
||||
|
||||
|
||||
def test_update_template(sample_service, sample_user):
|
||||
|
||||
@@ -710,8 +710,8 @@ def test_should_delete_notification_and_return_error_if_sqs_fails(
|
||||
|
||||
@pytest.mark.parametrize('to_email', [
|
||||
'simulate-delivered@notifications.service.gov.uk',
|
||||
'simulate-permanent-failure@notifications.service.gov.uk',
|
||||
'simulate-temporary-failure@notifications.service.gov.uk'
|
||||
'simulate-delivered-2@notifications.service.gov.uk',
|
||||
'simulate-delivered-3@notifications.service.gov.uk'
|
||||
])
|
||||
def test_should_not_persist_notification_or_send_email_if_simulated_email(
|
||||
client,
|
||||
|
||||
@@ -10,7 +10,9 @@ from collections import namedtuple
|
||||
from app.models import Template, Notification, NotificationHistory
|
||||
from app.notifications import SendNotificationToQueueError
|
||||
from app.notifications.process_notifications import (create_content_for_notification,
|
||||
persist_notification, send_notification_to_queue)
|
||||
persist_notification,
|
||||
send_notification_to_queue,
|
||||
simulated_recipient)
|
||||
from app.v2.errors import BadRequestError
|
||||
|
||||
|
||||
@@ -193,3 +195,24 @@ def test_send_notification_to_queue_throws_exception_deletes_notification(sample
|
||||
|
||||
assert Notification.query.count() == 0
|
||||
assert NotificationHistory.query.count() == 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize("to_address, notification_type, expected",
|
||||
[("+447700900000", "sms", True),
|
||||
("+447700900111", "sms", True),
|
||||
("+447700900222", "sms", True),
|
||||
("simulate-delivered@notifications.service.gov.uk", "email", True),
|
||||
("simulate-delivered-2@notifications.service.gov.uk", "email", True),
|
||||
("simulate-delivered-3@notifications.service.gov.uk", "email", True),
|
||||
("07515896969", "sms", False),
|
||||
("valid_email@test.com", "email", False)])
|
||||
def test_simulated_recipient(notify_api, to_address, notification_type, expected):
|
||||
# The values where the expected = 'research-mode' are listed in the config['SIMULATED_EMAIL_ADDRESSES']
|
||||
# and config['SIMULATED_SMS_NUMBERS']. These values should result in using the research mode queue.
|
||||
# SIMULATED_EMAIL_ADDRESSES = ('simulate-delivered@notifications.service.gov.uk',
|
||||
# 'simulate-delivered-2@notifications.service.gov.uk',
|
||||
# 'simulate-delivered-2@notifications.service.gov.uk')
|
||||
# SIMULATED_SMS_NUMBERS = ('+447700900000', '+447700900111', '+447700900222')
|
||||
|
||||
actual = simulated_recipient(to_address, notification_type)
|
||||
assert actual == expected
|
||||
|
||||
@@ -13,34 +13,43 @@ from tests import create_authorization_header
|
||||
from tests.app.conftest import sample_notification as create_sample_notification
|
||||
|
||||
|
||||
def test_get_sms_notification_by_id(notify_api, sample_notification):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
auth_header = create_authorization_header(service_id=sample_notification.service_id)
|
||||
def test_get_sms_notification_by_id(client, sample_notification):
|
||||
auth_header = create_authorization_header(service_id=sample_notification.service_id)
|
||||
|
||||
response = client.get(
|
||||
'/notifications/{}'.format(sample_notification.id),
|
||||
headers=[auth_header])
|
||||
response = client.get(
|
||||
'/notifications/{}'.format(sample_notification.id),
|
||||
headers=[auth_header])
|
||||
|
||||
assert response.status_code == 200
|
||||
notification = json.loads(response.get_data(as_text=True))['data']['notification']
|
||||
assert notification['status'] == 'created'
|
||||
assert notification['template'] == {
|
||||
'id': str(sample_notification.template.id),
|
||||
'name': sample_notification.template.name,
|
||||
'template_type': sample_notification.template.template_type,
|
||||
'version': 1
|
||||
}
|
||||
assert notification['to'] == '+447700900855'
|
||||
assert notification['service'] == str(sample_notification.service_id)
|
||||
assert notification['body'] == "This is a template:\nwith a newline"
|
||||
assert not notification.get('subject')
|
||||
assert response.status_code == 200
|
||||
notification = json.loads(response.get_data(as_text=True))['data']['notification']
|
||||
assert notification['status'] == 'created'
|
||||
assert notification['template'] == {
|
||||
'id': str(sample_notification.template.id),
|
||||
'name': sample_notification.template.name,
|
||||
'template_type': sample_notification.template.template_type,
|
||||
'version': 1
|
||||
}
|
||||
assert notification['to'] == '+447700900855'
|
||||
assert notification['service'] == str(sample_notification.service_id)
|
||||
assert notification['body'] == "This is a template:\nwith a newline"
|
||||
assert not notification.get('subject')
|
||||
|
||||
|
||||
def test_get_sms_notification_by_invalid_id(client, sample_notification):
|
||||
auth_header = create_authorization_header(service_id=sample_notification.service_id)
|
||||
|
||||
response = client.get(
|
||||
'/notifications/{}'.format("not_a_valid_id"),
|
||||
headers=[auth_header])
|
||||
|
||||
assert response.status_code == 405
|
||||
|
||||
|
||||
def test_get_email_notification_by_id(notify_api, notify_db, notify_db_session, sample_email_template):
|
||||
|
||||
email_notification = create_sample_notification(notify_db,
|
||||
notify_db_session,
|
||||
to_field="sample_email@example.com",
|
||||
service=sample_email_template.service,
|
||||
template=sample_email_template,
|
||||
status='sending')
|
||||
@@ -62,7 +71,7 @@ def test_get_email_notification_by_id(notify_api, notify_db, notify_db_session,
|
||||
'template_type': email_notification.template.template_type,
|
||||
'version': 1
|
||||
}
|
||||
assert notification['to'] == '+447700900855'
|
||||
assert notification['to'] == 'sample_email@example.com'
|
||||
assert notification['service'] == str(email_notification.service_id)
|
||||
assert response.status_code == 200
|
||||
assert notification['body'] == sample_email_template.content
|
||||
|
||||
@@ -166,3 +166,43 @@ def test_post_email_notification_returns_404_and_missing_template(notify_api, sa
|
||||
assert error_json['status_code'] == 400
|
||||
assert error_json['errors'] == [{"error": "BadRequestError",
|
||||
"message": 'Template not found'}]
|
||||
|
||||
|
||||
@pytest.mark.parametrize('recipient, notification_type', [
|
||||
('simulate-delivered@notifications.service.gov.uk', 'email'),
|
||||
('simulate-delivered-2@notifications.service.gov.uk', 'email'),
|
||||
('simulate-delivered-3@notifications.service.gov.uk', 'email'),
|
||||
('07700 900000', 'sms'),
|
||||
('07700 900111', 'sms'),
|
||||
('07700 900222', 'sms')
|
||||
])
|
||||
def test_should_not_persist_notification_or_send_notification_if_simulated_recipient(
|
||||
client,
|
||||
recipient,
|
||||
notification_type,
|
||||
sample_email_template,
|
||||
sample_template,
|
||||
mocker):
|
||||
apply_async = mocker.patch('app.celery.provider_tasks.deliver_{}.apply_async'.format(notification_type))
|
||||
|
||||
if notification_type == 'sms':
|
||||
data = {
|
||||
'phone_number': recipient,
|
||||
'template_id': str(sample_template.id)
|
||||
}
|
||||
else:
|
||||
data = {
|
||||
'email_address': recipient,
|
||||
'template_id': str(sample_email_template.id)
|
||||
}
|
||||
|
||||
auth_header = create_authorization_header(service_id=sample_email_template.service_id)
|
||||
|
||||
response = client.post(
|
||||
path='/v2/notifications/{}'.format(notification_type),
|
||||
data=json.dumps(data),
|
||||
headers=[('Content-Type', 'application/json'), auth_header])
|
||||
|
||||
assert response.status_code == 201
|
||||
apply_async.assert_not_called()
|
||||
assert Notification.query.count() == 0
|
||||
|
||||
Reference in New Issue
Block a user