mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-25 00:33:41 -04:00
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ from app.dao.notifications_dao import (
|
|||||||
insert_notification_history_delete_notifications,
|
insert_notification_history_delete_notifications,
|
||||||
move_notifications_to_notification_history,
|
move_notifications_to_notification_history,
|
||||||
)
|
)
|
||||||
from app.enums import KeyType
|
from app.enums import KeyType, NotificationStatus, NotificationType, TemplateType
|
||||||
from app.models import Notification, NotificationHistory
|
from app.models import Notification, NotificationHistory
|
||||||
from tests.app.db import (
|
from tests.app.db import (
|
||||||
create_notification,
|
create_notification,
|
||||||
@@ -23,23 +23,26 @@ def test_move_notifications_does_nothing_if_notification_history_row_already_exi
|
|||||||
notification = create_notification(
|
notification = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=8),
|
created_at=datetime.utcnow() - timedelta(days=8),
|
||||||
status="temporary-failure",
|
status=NotificationStatus.TEMPORARY_FAILURE,
|
||||||
)
|
)
|
||||||
create_notification_history(
|
create_notification_history(
|
||||||
id=notification.id,
|
id=notification.id,
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=8),
|
created_at=datetime.utcnow() - timedelta(days=8),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
|
|
||||||
move_notifications_to_notification_history(
|
move_notifications_to_notification_history(
|
||||||
"email", sample_email_template.service_id, datetime.utcnow(), 1
|
NotificationType.EMAIL,
|
||||||
|
sample_email_template.service_id,
|
||||||
|
datetime.utcnow(),
|
||||||
|
1,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert Notification.query.count() == 0
|
assert Notification.query.count() == 0
|
||||||
history = NotificationHistory.query.all()
|
history = NotificationHistory.query.all()
|
||||||
assert len(history) == 1
|
assert len(history) == 1
|
||||||
assert history[0].status == "delivered"
|
assert history[0].status == NotificationStatus.DELIVERED
|
||||||
|
|
||||||
|
|
||||||
def test_move_notifications_only_moves_notifications_older_than_provided_timestamp(
|
def test_move_notifications_only_moves_notifications_older_than_provided_timestamp(
|
||||||
@@ -59,7 +62,9 @@ def test_move_notifications_only_moves_notifications_older_than_provided_timesta
|
|||||||
old_notification_id = old_notification.id
|
old_notification_id = old_notification.id
|
||||||
|
|
||||||
result = move_notifications_to_notification_history(
|
result = move_notifications_to_notification_history(
|
||||||
"sms", sample_template.service_id, delete_time
|
NotificationType.SMS,
|
||||||
|
sample_template.service_id,
|
||||||
|
delete_time,
|
||||||
)
|
)
|
||||||
assert result == 1
|
assert result == 1
|
||||||
|
|
||||||
@@ -78,12 +83,15 @@ def test_move_notifications_keeps_calling_until_no_more_to_delete_and_then_retur
|
|||||||
timestamp = datetime(2021, 1, 1)
|
timestamp = datetime(2021, 1, 1)
|
||||||
|
|
||||||
result = move_notifications_to_notification_history(
|
result = move_notifications_to_notification_history(
|
||||||
"sms", service_id, timestamp, qry_limit=5
|
NotificationType.SMS,
|
||||||
|
service_id,
|
||||||
|
timestamp,
|
||||||
|
qry_limit=5,
|
||||||
)
|
)
|
||||||
assert result == 11
|
assert result == 11
|
||||||
|
|
||||||
mock_insert.asset_called_with(
|
mock_insert.asset_called_with(
|
||||||
notification_type="sms",
|
notification_type=NotificationType.SMS,
|
||||||
service_id=service_id,
|
service_id=service_id,
|
||||||
timestamp_to_delete_backwards_from=timestamp,
|
timestamp_to_delete_backwards_from=timestamp,
|
||||||
qry_limit=5,
|
qry_limit=5,
|
||||||
@@ -95,17 +103,19 @@ def test_move_notifications_only_moves_for_given_notification_type(sample_servic
|
|||||||
delete_time = datetime(2020, 6, 1, 12)
|
delete_time = datetime(2020, 6, 1, 12)
|
||||||
one_second_before = delete_time - timedelta(seconds=1)
|
one_second_before = delete_time - timedelta(seconds=1)
|
||||||
|
|
||||||
sms_template = create_template(sample_service, "sms")
|
sms_template = create_template(sample_service, TemplateType.SMS)
|
||||||
email_template = create_template(sample_service, "email")
|
email_template = create_template(sample_service, TemplateType.EMAIL)
|
||||||
create_notification(sms_template, created_at=one_second_before)
|
create_notification(sms_template, created_at=one_second_before)
|
||||||
create_notification(email_template, created_at=one_second_before)
|
create_notification(email_template, created_at=one_second_before)
|
||||||
|
|
||||||
result = move_notifications_to_notification_history(
|
result = move_notifications_to_notification_history(
|
||||||
"sms", sample_service.id, delete_time
|
NotificationType.SMS,
|
||||||
|
sample_service.id,
|
||||||
|
delete_time,
|
||||||
)
|
)
|
||||||
assert result == 1
|
assert result == 1
|
||||||
assert {x.notification_type for x in Notification.query} == {"email"}
|
assert {x.notification_type for x in Notification.query} == {NotificationType.EMAIL}
|
||||||
assert NotificationHistory.query.one().notification_type == "sms"
|
assert NotificationHistory.query.one().notification_type == NotificationType.SMS
|
||||||
|
|
||||||
|
|
||||||
def test_move_notifications_only_moves_for_given_service(notify_db_session):
|
def test_move_notifications_only_moves_for_given_service(notify_db_session):
|
||||||
@@ -115,13 +125,17 @@ def test_move_notifications_only_moves_for_given_service(notify_db_session):
|
|||||||
service = create_service(service_name="service")
|
service = create_service(service_name="service")
|
||||||
other_service = create_service(service_name="other")
|
other_service = create_service(service_name="other")
|
||||||
|
|
||||||
template = create_template(service, "sms")
|
template = create_template(service, TemplateType.SMS)
|
||||||
other_template = create_template(other_service, "sms")
|
other_template = create_template(other_service, TemplateType.SMS)
|
||||||
|
|
||||||
create_notification(template, created_at=one_second_before)
|
create_notification(template, created_at=one_second_before)
|
||||||
create_notification(other_template, created_at=one_second_before)
|
create_notification(other_template, created_at=one_second_before)
|
||||||
|
|
||||||
result = move_notifications_to_notification_history("sms", service.id, delete_time)
|
result = move_notifications_to_notification_history(
|
||||||
|
NotificationType.SMS,
|
||||||
|
service.id,
|
||||||
|
delete_time,
|
||||||
|
)
|
||||||
assert result == 1
|
assert result == 1
|
||||||
|
|
||||||
assert NotificationHistory.query.one().service_id == service.id
|
assert NotificationHistory.query.one().service_id == service.id
|
||||||
@@ -132,17 +146,25 @@ def test_move_notifications_just_deletes_test_key_notifications(sample_template)
|
|||||||
delete_time = datetime(2020, 6, 1, 12)
|
delete_time = datetime(2020, 6, 1, 12)
|
||||||
one_second_before = delete_time - timedelta(seconds=1)
|
one_second_before = delete_time - timedelta(seconds=1)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template, created_at=one_second_before, key_type=KeyType.NORMAL
|
template=sample_template,
|
||||||
|
created_at=one_second_before,
|
||||||
|
key_type=KeyType.NORMAL,
|
||||||
)
|
)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template, created_at=one_second_before, key_type=KeyType.TEAM
|
template=sample_template,
|
||||||
|
created_at=one_second_before,
|
||||||
|
key_type=KeyType.TEAM,
|
||||||
)
|
)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template, created_at=one_second_before, key_type=KeyType.TEST
|
template=sample_template,
|
||||||
|
created_at=one_second_before,
|
||||||
|
key_type=KeyType.TEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
result = move_notifications_to_notification_history(
|
result = move_notifications_to_notification_history(
|
||||||
"sms", sample_template.service_id, delete_time
|
NotificationType.SMS,
|
||||||
|
sample_template.service_id,
|
||||||
|
delete_time,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result == 2
|
assert result == 2
|
||||||
@@ -163,58 +185,58 @@ def test_insert_notification_history_delete_notifications(sample_email_template)
|
|||||||
n1 = create_notification(
|
n1 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=4),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
n2 = create_notification(
|
n2 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=20),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=20),
|
||||||
status="permanent-failure",
|
status=NotificationStatus.PERMANENT_FAILURE,
|
||||||
)
|
)
|
||||||
n3 = create_notification(
|
n3 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=30),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=30),
|
||||||
status="temporary-failure",
|
status=NotificationStatus.TEMPORARY_FAILURE,
|
||||||
)
|
)
|
||||||
n4 = create_notification(
|
n4 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=59),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=59),
|
||||||
status="temporary-failure",
|
status=NotificationStatus.TEMPORARY_FAILURE,
|
||||||
)
|
)
|
||||||
n5 = create_notification(
|
n5 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, hours=1),
|
created_at=datetime.utcnow() - timedelta(days=1, hours=1),
|
||||||
status="sending",
|
status=NotificationStatus.SENDING,
|
||||||
)
|
)
|
||||||
n6 = create_notification(
|
n6 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=61),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=61),
|
||||||
status="pending",
|
status=NotificationStatus.PENDING,
|
||||||
)
|
)
|
||||||
n7 = create_notification(
|
n7 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, hours=1, seconds=1),
|
created_at=datetime.utcnow() - timedelta(days=1, hours=1, seconds=1),
|
||||||
status="validation-failed",
|
status=NotificationStatus.VALIDATION_FAILED,
|
||||||
)
|
)
|
||||||
n8 = create_notification(
|
n8 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(days=1, minutes=20),
|
created_at=datetime.utcnow() - timedelta(days=1, minutes=20),
|
||||||
status="created",
|
status=NotificationStatus.CREATED,
|
||||||
)
|
)
|
||||||
# should NOT be deleted - wrong status
|
# should NOT be deleted - wrong status
|
||||||
n9 = create_notification(
|
n9 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=1),
|
created_at=datetime.utcnow() - timedelta(hours=1),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
n10 = create_notification(
|
n10 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=1),
|
created_at=datetime.utcnow() - timedelta(hours=1),
|
||||||
status="technical-failure",
|
status=NotificationStatus.TECHNICAL_FAILURE,
|
||||||
)
|
)
|
||||||
n11 = create_notification(
|
n11 = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=23, minutes=59),
|
created_at=datetime.utcnow() - timedelta(hours=23, minutes=59),
|
||||||
status="created",
|
status=NotificationStatus.CREATED,
|
||||||
)
|
)
|
||||||
|
|
||||||
ids_to_move = sorted([n1.id, n2.id, n3.id, n4.id, n5.id, n6.id, n7.id, n8.id])
|
ids_to_move = sorted([n1.id, n2.id, n3.id, n4.id, n5.id, n6.id, n7.id, n8.id])
|
||||||
@@ -239,17 +261,17 @@ def test_insert_notification_history_delete_notifications_more_notifications_tha
|
|||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() + timedelta(minutes=4),
|
created_at=datetime.utcnow() + timedelta(minutes=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() + timedelta(minutes=20),
|
created_at=datetime.utcnow() + timedelta(minutes=20),
|
||||||
status="permanent-failure",
|
status=NotificationStatus.PERMANENT_FAILURE,
|
||||||
)
|
)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() + timedelta(minutes=30),
|
created_at=datetime.utcnow() + timedelta(minutes=30),
|
||||||
status="temporary-failure",
|
status=NotificationStatus.TEMPORARY_FAILURE,
|
||||||
)
|
)
|
||||||
|
|
||||||
del_count = insert_notification_history_delete_notifications(
|
del_count = insert_notification_history_delete_notifications(
|
||||||
@@ -272,14 +294,16 @@ def test_insert_notification_history_delete_notifications_only_insert_delete_for
|
|||||||
notification_to_move = create_notification(
|
notification_to_move = create_notification(
|
||||||
template=sample_email_template,
|
template=sample_email_template,
|
||||||
created_at=datetime.utcnow() + timedelta(minutes=4),
|
created_at=datetime.utcnow() + timedelta(minutes=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
another_service = create_service(service_name="Another service")
|
another_service = create_service(service_name="Another service")
|
||||||
another_template = create_template(service=another_service, template_type="email")
|
another_template = create_template(
|
||||||
|
service=another_service, template_type=TemplateType.EMAIL
|
||||||
|
)
|
||||||
notification_to_stay = create_notification(
|
notification_to_stay = create_notification(
|
||||||
template=another_template,
|
template=another_template,
|
||||||
created_at=datetime.utcnow() + timedelta(minutes=4),
|
created_at=datetime.utcnow() + timedelta(minutes=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
)
|
)
|
||||||
|
|
||||||
del_count = insert_notification_history_delete_notifications(
|
del_count = insert_notification_history_delete_notifications(
|
||||||
@@ -303,20 +327,20 @@ def test_insert_notification_history_delete_notifications_insert_for_key_type(
|
|||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=4),
|
created_at=datetime.utcnow() - timedelta(hours=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
key_type="normal",
|
key_type=KeyType.NORMAL,
|
||||||
)
|
)
|
||||||
create_notification(
|
create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=4),
|
created_at=datetime.utcnow() - timedelta(hours=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
key_type="team",
|
key_type=KeyType.TEAM,
|
||||||
)
|
)
|
||||||
with_test_key = create_notification(
|
with_test_key = create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
created_at=datetime.utcnow() - timedelta(hours=4),
|
created_at=datetime.utcnow() - timedelta(hours=4),
|
||||||
status="delivered",
|
status=NotificationStatus.DELIVERED,
|
||||||
key_type="test",
|
key_type=KeyType.TEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
del_count = insert_notification_history_delete_notifications(
|
del_count = insert_notification_history_delete_notifications(
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from app.dao.templates_dao import (
|
|||||||
dao_redact_template,
|
dao_redact_template,
|
||||||
dao_update_template,
|
dao_update_template,
|
||||||
)
|
)
|
||||||
|
from app.enums import TemplateProcessType, TemplateType
|
||||||
from app.models import Template, TemplateHistory, TemplateRedacted
|
from app.models import Template, TemplateHistory, TemplateRedacted
|
||||||
from tests.app.db import create_template
|
from tests.app.db import create_template
|
||||||
|
|
||||||
@@ -19,8 +20,8 @@ from tests.app.db import create_template
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"template_type, subject",
|
"template_type, subject",
|
||||||
[
|
[
|
||||||
("sms", None),
|
(TemplateType.SMS, None),
|
||||||
("email", "subject"),
|
(TemplateType.EMAIL, "subject"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_create_template(sample_service, sample_user, template_type, subject):
|
def test_create_template(sample_service, sample_user, template_type, subject):
|
||||||
@@ -43,7 +44,8 @@ def test_create_template(sample_service, sample_user, template_type, subject):
|
|||||||
== "Sample Template"
|
== "Sample Template"
|
||||||
)
|
)
|
||||||
assert (
|
assert (
|
||||||
dao_get_all_templates_for_service(sample_service.id)[0].process_type == "normal"
|
dao_get_all_templates_for_service(sample_service.id)[0].process_type
|
||||||
|
== TemplateProcessType.NORMAL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -61,7 +63,7 @@ def test_create_template_creates_redact_entry(sample_service):
|
|||||||
def test_update_template(sample_service, sample_user):
|
def test_update_template(sample_service, sample_user):
|
||||||
data = {
|
data = {
|
||||||
"name": "Sample Template",
|
"name": "Sample Template",
|
||||||
"template_type": "sms",
|
"template_type": TemplateType.SMS,
|
||||||
"content": "Template content",
|
"content": "Template content",
|
||||||
"service": sample_service,
|
"service": sample_service,
|
||||||
"created_by": sample_user,
|
"created_by": sample_user,
|
||||||
@@ -101,19 +103,19 @@ def test_get_all_templates_for_service(service_factory):
|
|||||||
create_template(
|
create_template(
|
||||||
service=service_1,
|
service=service_1,
|
||||||
template_name="Sample Template 1",
|
template_name="Sample Template 1",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
)
|
)
|
||||||
create_template(
|
create_template(
|
||||||
service=service_1,
|
service=service_1,
|
||||||
template_name="Sample Template 2",
|
template_name="Sample Template 2",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
)
|
)
|
||||||
create_template(
|
create_template(
|
||||||
service=service_2,
|
service=service_2,
|
||||||
template_name="Sample Template 3",
|
template_name="Sample Template 3",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -125,19 +127,19 @@ def test_get_all_templates_for_service(service_factory):
|
|||||||
def test_get_all_templates_for_service_is_alphabetised(sample_service):
|
def test_get_all_templates_for_service_is_alphabetised(sample_service):
|
||||||
create_template(
|
create_template(
|
||||||
template_name="Sample Template 1",
|
template_name="Sample Template 1",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
service=sample_service,
|
service=sample_service,
|
||||||
)
|
)
|
||||||
template_2 = create_template(
|
template_2 = create_template(
|
||||||
template_name="Sample Template 2",
|
template_name="Sample Template 2",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
service=sample_service,
|
service=sample_service,
|
||||||
)
|
)
|
||||||
create_template(
|
create_template(
|
||||||
template_name="Sample Template 3",
|
template_name="Sample Template 3",
|
||||||
template_type="sms",
|
template_type=TemplateType.SMS,
|
||||||
content="Template content",
|
content="Template content",
|
||||||
service=sample_service,
|
service=sample_service,
|
||||||
)
|
)
|
||||||
@@ -259,7 +261,7 @@ def test_create_template_creates_a_history_record_with_current_data(
|
|||||||
assert TemplateHistory.query.count() == 0
|
assert TemplateHistory.query.count() == 0
|
||||||
data = {
|
data = {
|
||||||
"name": "Sample Template",
|
"name": "Sample Template",
|
||||||
"template_type": "email",
|
"template_type": TemplateType.EMAIL,
|
||||||
"subject": "subject",
|
"subject": "subject",
|
||||||
"content": "Template content",
|
"content": "Template content",
|
||||||
"service": sample_service,
|
"service": sample_service,
|
||||||
@@ -288,7 +290,7 @@ def test_update_template_creates_a_history_record_with_current_data(
|
|||||||
assert TemplateHistory.query.count() == 0
|
assert TemplateHistory.query.count() == 0
|
||||||
data = {
|
data = {
|
||||||
"name": "Sample Template",
|
"name": "Sample Template",
|
||||||
"template_type": "email",
|
"template_type": TemplateType.EMAIL,
|
||||||
"subject": "subject",
|
"subject": "subject",
|
||||||
"content": "Template content",
|
"content": "Template content",
|
||||||
"service": sample_service,
|
"service": sample_service,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from datetime import datetime, timedelta
|
|||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
from app.dao.uploads_dao import dao_get_uploads_by_service_id
|
from app.dao.uploads_dao import dao_get_uploads_by_service_id
|
||||||
from app.enums import JobStatus, TemplateType
|
from app.enums import JobStatus, NotificationStatus, NotificationType, TemplateType
|
||||||
from tests.app.db import (
|
from tests.app.db import (
|
||||||
create_job,
|
create_job,
|
||||||
create_notification,
|
create_notification,
|
||||||
@@ -13,7 +13,12 @@ from tests.app.db import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def create_uploaded_letter(letter_template, service, status="created", created_at=None):
|
def create_uploaded_letter(
|
||||||
|
letter_template,
|
||||||
|
service,
|
||||||
|
status=NotificationStatus.CREATED,
|
||||||
|
created_at=None,
|
||||||
|
):
|
||||||
return create_notification(
|
return create_notification(
|
||||||
template=letter_template,
|
template=letter_template,
|
||||||
to_field="file-name",
|
to_field="file-name",
|
||||||
@@ -39,7 +44,9 @@ def create_uploaded_template(service):
|
|||||||
|
|
||||||
@freeze_time("2020-02-02 09:00") # GMT time
|
@freeze_time("2020-02-02 09:00") # GMT time
|
||||||
def test_get_uploads_for_service(sample_template):
|
def test_get_uploads_for_service(sample_template):
|
||||||
create_service_data_retention(sample_template.service, "sms", days_of_retention=9)
|
create_service_data_retention(
|
||||||
|
sample_template.service, NotificationType.SMS, days_of_retention=9
|
||||||
|
)
|
||||||
job = create_job(sample_template, processing_started=datetime.utcnow())
|
job = create_job(sample_template, processing_started=datetime.utcnow())
|
||||||
|
|
||||||
other_service = create_service(service_name="other service")
|
other_service = create_service(service_name="other service")
|
||||||
@@ -55,7 +62,7 @@ def test_get_uploads_for_service(sample_template):
|
|||||||
job.id,
|
job.id,
|
||||||
job.original_file_name,
|
job.original_file_name,
|
||||||
job.notification_count,
|
job.notification_count,
|
||||||
"sms",
|
TemplateType.SMS,
|
||||||
9,
|
9,
|
||||||
job.created_at,
|
job.created_at,
|
||||||
job.scheduled_for,
|
job.scheduled_for,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from types import CodeType
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
@@ -137,7 +138,7 @@ def test_should_not_delete_verification_codes_less_than_one_day_old(sample_user)
|
|||||||
|
|
||||||
def make_verify_code(user, age=None, expiry_age=None, code="12335", code_used=False):
|
def make_verify_code(user, age=None, expiry_age=None, code="12335", code_used=False):
|
||||||
verify_code = VerifyCode(
|
verify_code = VerifyCode(
|
||||||
code_type="sms",
|
code_type=CodeType.SMS,
|
||||||
_code=code,
|
_code=code,
|
||||||
created_at=datetime.utcnow() - (age or timedelta(hours=0)),
|
created_at=datetime.utcnow() - (age or timedelta(hours=0)),
|
||||||
expiry_datetime=datetime.utcnow() - (expiry_age or timedelta(0)),
|
expiry_datetime=datetime.utcnow() - (expiry_age or timedelta(0)),
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from app.dao import notifications_dao
|
|||||||
from app.dao.provider_details_dao import get_provider_details_by_identifier
|
from app.dao.provider_details_dao import get_provider_details_by_identifier
|
||||||
from app.delivery import send_to_providers
|
from app.delivery import send_to_providers
|
||||||
from app.delivery.send_to_providers import get_html_email_options, get_logo_url
|
from app.delivery.send_to_providers import get_html_email_options, get_logo_url
|
||||||
from app.enums import BrandType, KeyType
|
from app.enums import BrandType, KeyType, NotificationStatus
|
||||||
from app.exceptions import NotificationTechnicalFailureException
|
from app.exceptions import NotificationTechnicalFailureException
|
||||||
from app.models import EmailBranding, Notification
|
from app.models import EmailBranding, Notification
|
||||||
from app.serialised_models import SerialisedService
|
from app.serialised_models import SerialisedService
|
||||||
@@ -78,7 +78,7 @@ def test_should_send_personalised_template_to_correct_sms_provider_and_persist(
|
|||||||
db_notification = create_notification(
|
db_notification = create_notification(
|
||||||
template=sample_sms_template_with_html,
|
template=sample_sms_template_with_html,
|
||||||
personalisation={"name": "Jo"},
|
personalisation={"name": "Jo"},
|
||||||
status="created",
|
status=NotificationStatus.CREATED,
|
||||||
reply_to_text=sample_sms_template_with_html.service.get_default_sms_sender(),
|
reply_to_text=sample_sms_template_with_html.service.get_default_sms_sender(),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ def test_should_send_personalised_template_to_correct_sms_provider_and_persist(
|
|||||||
|
|
||||||
notification = Notification.query.filter_by(id=db_notification.id).one()
|
notification = Notification.query.filter_by(id=db_notification.id).one()
|
||||||
|
|
||||||
assert notification.status == "sending"
|
assert notification.status == NotificationStatus.SENDING
|
||||||
assert notification.sent_at <= datetime.utcnow()
|
assert notification.sent_at <= datetime.utcnow()
|
||||||
assert notification.sent_by == "sns"
|
assert notification.sent_by == "sns"
|
||||||
assert notification.billable_units == 1
|
assert notification.billable_units == 1
|
||||||
@@ -137,7 +137,7 @@ def test_should_send_personalised_template_to_correct_email_provider_and_persist
|
|||||||
)
|
)
|
||||||
|
|
||||||
notification = Notification.query.filter_by(id=db_notification.id).one()
|
notification = Notification.query.filter_by(id=db_notification.id).one()
|
||||||
assert notification.status == "sending"
|
assert notification.status == NotificationStatus.SENDING
|
||||||
assert notification.sent_at <= datetime.utcnow()
|
assert notification.sent_at <= datetime.utcnow()
|
||||||
assert notification.sent_by == "ses"
|
assert notification.sent_by == "ses"
|
||||||
assert notification.personalisation == {"name": "Jo"}
|
assert notification.personalisation == {"name": "Jo"}
|
||||||
@@ -175,7 +175,7 @@ def test_send_sms_should_use_template_version_from_notification_not_latest(
|
|||||||
db_notification = create_notification(
|
db_notification = create_notification(
|
||||||
template=sample_template,
|
template=sample_template,
|
||||||
to_field="2028675309",
|
to_field="2028675309",
|
||||||
status="created",
|
status=NotificationStatus.CREATED,
|
||||||
reply_to_text=sample_template.service.get_default_sms_sender(),
|
reply_to_text=sample_template.service.get_default_sms_sender(),
|
||||||
normalised_to="2028675309",
|
normalised_to="2028675309",
|
||||||
)
|
)
|
||||||
@@ -217,7 +217,7 @@ def test_send_sms_should_use_template_version_from_notification_not_latest(
|
|||||||
assert persisted_notification.template_id == expected_template_id
|
assert persisted_notification.template_id == expected_template_id
|
||||||
assert persisted_notification.template_version == version_on_notification
|
assert persisted_notification.template_version == version_on_notification
|
||||||
assert persisted_notification.template_version != t.version
|
assert persisted_notification.template_version != t.version
|
||||||
assert persisted_notification.status == "sending"
|
assert persisted_notification.status == NotificationStatus.SENDING
|
||||||
assert not persisted_notification.personalisation
|
assert not persisted_notification.personalisation
|
||||||
|
|
||||||
|
|
||||||
@@ -225,20 +225,20 @@ def test_should_have_sending_status_if_fake_callback_function_fails(
|
|||||||
sample_notification, mocker
|
sample_notification, mocker
|
||||||
):
|
):
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.delivery.send_to_providers.send_sms_response", side_effect=HTTPError
|
"app.delivery.send_to_providers.send_sms_response", side_effect=HTTPError,
|
||||||
)
|
)
|
||||||
|
|
||||||
sample_notification.key_type = KeyType.TEST
|
sample_notification.key_type = KeyType.TEST
|
||||||
with pytest.raises(HTTPError):
|
with pytest.raises(HTTPError):
|
||||||
send_to_providers.send_sms_to_provider(sample_notification)
|
send_to_providers.send_sms_to_provider(sample_notification)
|
||||||
assert sample_notification.status == "sending"
|
assert sample_notification.status == NotificationStatus.SENDING
|
||||||
assert sample_notification.sent_by == "sns"
|
assert sample_notification.sent_by == "sns"
|
||||||
|
|
||||||
|
|
||||||
def test_should_not_send_to_provider_when_status_is_not_created(
|
def test_should_not_send_to_provider_when_status_is_not_created(
|
||||||
sample_template, mocker
|
sample_template, mocker
|
||||||
):
|
):
|
||||||
notification = create_notification(template=sample_template, status="sending")
|
notification = create_notification(template=sample_template, status=NotificationStatus.SENDING,)
|
||||||
mocker.patch("app.aws_sns_client.send_sms")
|
mocker.patch("app.aws_sns_client.send_sms")
|
||||||
response_mock = mocker.patch("app.delivery.send_to_providers.send_sms_response")
|
response_mock = mocker.patch("app.delivery.send_to_providers.send_sms_response")
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@ def test_send_email_to_provider_should_not_send_to_provider_when_status_is_not_c
|
|||||||
mock_redis = mocker.patch("app.delivery.send_to_providers.redis_store")
|
mock_redis = mocker.patch("app.delivery.send_to_providers.redis_store")
|
||||||
mock_redis.get.return_value = "test@example.com".encode("utf-8")
|
mock_redis.get.return_value = "test@example.com".encode("utf-8")
|
||||||
|
|
||||||
notification = create_notification(template=sample_email_template, status="sending")
|
notification = create_notification(template=sample_email_template, status=NotificationStatus.SENDING)
|
||||||
mocker.patch("app.aws_ses_client.send_email")
|
mocker.patch("app.aws_ses_client.send_email")
|
||||||
mocker.patch("app.delivery.send_to_providers.send_email_response")
|
mocker.patch("app.delivery.send_to_providers.send_email_response")
|
||||||
|
|
||||||
@@ -329,12 +329,10 @@ def test_send_email_should_use_service_reply_to_email(
|
|||||||
)
|
)
|
||||||
create_reply_to_email(service=sample_service, email_address="foo@bar.com")
|
create_reply_to_email(service=sample_service, email_address="foo@bar.com")
|
||||||
|
|
||||||
send_to_providers.send_email_to_provider(
|
send_to_providers.send_email_to_provider(db_notification)
|
||||||
db_notification,
|
|
||||||
)
|
|
||||||
|
|
||||||
app.aws_ses_client.send_email.assert_called_once_with(
|
app.aws_ses_client.send_email.assert_called_once_with(
|
||||||
ANY, ANY, ANY, body=ANY, html_body=ANY, reply_to_address="foo@bar.com"
|
ANY, ANY, ANY, body=ANY, html_body=ANY, reply_to_address="foo@bar.com",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -393,7 +391,7 @@ def test_get_html_email_renderer_with_branding_details_and_render_govuk_banner_o
|
|||||||
def test_get_html_email_renderer_prepends_logo_path(notify_api):
|
def test_get_html_email_renderer_prepends_logo_path(notify_api):
|
||||||
Service = namedtuple("Service", ["email_branding"])
|
Service = namedtuple("Service", ["email_branding"])
|
||||||
EmailBranding = namedtuple(
|
EmailBranding = namedtuple(
|
||||||
"EmailBranding", ["brand_type", "colour", "name", "logo", "text"]
|
"EmailBranding", ["brand_type", "colour", "name", "logo", "text"],
|
||||||
)
|
)
|
||||||
|
|
||||||
email_branding = EmailBranding(
|
email_branding = EmailBranding(
|
||||||
@@ -417,7 +415,7 @@ def test_get_html_email_renderer_prepends_logo_path(notify_api):
|
|||||||
def test_get_html_email_renderer_handles_email_branding_without_logo(notify_api):
|
def test_get_html_email_renderer_handles_email_branding_without_logo(notify_api):
|
||||||
Service = namedtuple("Service", ["email_branding"])
|
Service = namedtuple("Service", ["email_branding"])
|
||||||
EmailBranding = namedtuple(
|
EmailBranding = namedtuple(
|
||||||
"EmailBranding", ["brand_type", "colour", "name", "logo", "text"]
|
"EmailBranding", ["brand_type", "colour", "name", "logo", "text"],
|
||||||
)
|
)
|
||||||
|
|
||||||
email_branding = EmailBranding(
|
email_branding = EmailBranding(
|
||||||
@@ -473,9 +471,9 @@ def test_get_logo_url_works_for_different_environments(base_url, expected_url):
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"starting_status, expected_status",
|
"starting_status, expected_status",
|
||||||
[
|
[
|
||||||
("delivered", "delivered"),
|
(NotificationStatus.DELIVERED, NotificationStatus.DELIVERED),
|
||||||
("created", "sending"),
|
(NotificationStatus.CREATED, NotificationStatus.SENDING),
|
||||||
("technical-failure", "technical-failure"),
|
(NotificationStatus.TECHNICAL_FAILURE, NotificationStatus.TECHNICAL_FAILURE),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_update_notification_to_sending_does_not_update_status_from_a_final_status(
|
def test_update_notification_to_sending_does_not_update_status_from_a_final_status(
|
||||||
@@ -498,19 +496,19 @@ def __update_notification(notification_to_update, research_mode, expected_status
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"research_mode,key_type, billable_units, expected_status",
|
"research_mode,key_type, billable_units, expected_status",
|
||||||
[
|
[
|
||||||
(True, KeyType.NORMAL, 0, "delivered"),
|
(True, KeyType.NORMAL, 0, NotificationStatus.DELIVERED),
|
||||||
(False, KeyType.NORMAL, 1, "sending"),
|
(False, KeyType.NORMAL, 1, NotificationStatus.SENDING),
|
||||||
(False, KeyType.TEST, 0, "sending"),
|
(False, KeyType.TEST, 0, NotificationStatus.SENDING),
|
||||||
(True, KeyType.TEST, 0, "sending"),
|
(True, KeyType.TEST, 0, NotificationStatus.SENDING),
|
||||||
(True, KeyType.TEAM, 0, "delivered"),
|
(True, KeyType.TEAM, 0, NotificationStatus.DELIVERED),
|
||||||
(False, KeyType.TEAM, 1, "sending"),
|
(False, KeyType.TEAM, 1, NotificationStatus.SENDING),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_should_update_billable_units_and_status_according_to_research_mode_and_key_type(
|
def test_should_update_billable_units_and_status_according_to_research_mode_and_key_type(
|
||||||
sample_template, mocker, research_mode, key_type, billable_units, expected_status
|
sample_template, mocker, research_mode, key_type, billable_units, expected_status
|
||||||
):
|
):
|
||||||
notification = create_notification(
|
notification = create_notification(
|
||||||
template=sample_template, billable_units=0, status="created", key_type=key_type
|
template=sample_template, billable_units=0, status=NotificationStatus.CREATED, key_type=key_type,
|
||||||
)
|
)
|
||||||
mocker.patch("app.aws_sns_client.send_sms")
|
mocker.patch("app.aws_sns_client.send_sms")
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
@@ -557,7 +555,7 @@ def test_should_send_sms_to_international_providers(
|
|||||||
template=sample_template,
|
template=sample_template,
|
||||||
to_field="+6011-17224412",
|
to_field="+6011-17224412",
|
||||||
personalisation={"name": "Jo"},
|
personalisation={"name": "Jo"},
|
||||||
status="created",
|
status=NotificationStatus.CREATED,
|
||||||
international=True,
|
international=True,
|
||||||
reply_to_text=sample_template.service.get_default_sms_sender(),
|
reply_to_text=sample_template.service.get_default_sms_sender(),
|
||||||
normalised_to="601117224412",
|
normalised_to="601117224412",
|
||||||
@@ -576,7 +574,7 @@ def test_should_send_sms_to_international_providers(
|
|||||||
international=True,
|
international=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert notification_international.status == "sending"
|
assert notification_international.status == NotificationStatus.SENDING
|
||||||
assert notification_international.sent_by == "sns"
|
assert notification_international.sent_by == "sns"
|
||||||
|
|
||||||
|
|
||||||
@@ -625,15 +623,13 @@ def test_send_email_to_provider_uses_reply_to_from_notification(
|
|||||||
mocker.patch("app.aws_ses_client.send_email", return_value="reference")
|
mocker.patch("app.aws_ses_client.send_email", return_value="reference")
|
||||||
|
|
||||||
db_notification = create_notification(
|
db_notification = create_notification(
|
||||||
template=sample_email_template, reply_to_text="test@test.com"
|
template=sample_email_template, reply_to_text="test@test.com",
|
||||||
)
|
)
|
||||||
|
|
||||||
send_to_providers.send_email_to_provider(
|
send_to_providers.send_email_to_provider(db_notification)
|
||||||
db_notification,
|
|
||||||
)
|
|
||||||
|
|
||||||
app.aws_ses_client.send_email.assert_called_once_with(
|
app.aws_ses_client.send_email.assert_called_once_with(
|
||||||
ANY, ANY, ANY, body=ANY, html_body=ANY, reply_to_address="test@test.com"
|
ANY, ANY, ANY, body=ANY, html_body=ANY, reply_to_address="test@test.com",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ from datetime import datetime, timedelta
|
|||||||
import pytest
|
import pytest
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
|
from app.enums import NotificationType
|
||||||
from tests.app.db import (
|
from tests.app.db import (
|
||||||
create_inbound_sms,
|
create_inbound_sms,
|
||||||
create_service,
|
create_service,
|
||||||
@@ -131,7 +132,7 @@ def test_post_to_get_most_recent_inbound_sms_for_service_limits_to_a_week(
|
|||||||
def test_post_to_get_inbound_sms_for_service_respects_data_retention(
|
def test_post_to_get_inbound_sms_for_service_respects_data_retention(
|
||||||
admin_request, sample_service, days_of_retention, too_old_date, returned_date
|
admin_request, sample_service, days_of_retention, too_old_date, returned_date
|
||||||
):
|
):
|
||||||
create_service_data_retention(sample_service, "sms", days_of_retention)
|
create_service_data_retention(sample_service, NotificationType.SMS, days_of_retention,)
|
||||||
create_inbound_sms(sample_service, created_at=too_old_date)
|
create_inbound_sms(sample_service, created_at=too_old_date)
|
||||||
returned_inbound = create_inbound_sms(sample_service, created_at=returned_date)
|
returned_inbound = create_inbound_sms(sample_service, created_at=returned_date)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user