More Enum goodness.

Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
This commit is contained in:
Cliff Hill
2024-01-18 10:26:40 -05:00
parent 43f18eed6a
commit df866e40f7
26 changed files with 379 additions and 278 deletions

View File

@@ -11,7 +11,7 @@ from notifications_utils.recipients import (
)
from sqlalchemy.exc import SQLAlchemyError
from app.models import SMS_TYPE, Notification, NotificationHistory
from app.models import Notification, NotificationHistory, ServicePermissionType, TemplateType
from app.notifications.process_notifications import (
create_content_for_notification,
persist_notification,
@@ -403,8 +403,8 @@ def test_persist_email_notification_stores_normalised_email(
def test_persist_notification_with_billable_units_stores_correct_info(mocker):
service = create_service(service_permissions=[SMS_TYPE])
template = create_template(service, template_type=SMS_TYPE)
service = create_service(service_permissions=[ServicePermissionType.SMS])
template = create_template(service, template_type=TemplateType.SMS)
mocker.patch("app.dao.templates_dao.dao_get_template_by_id", return_value=template)
persist_notification(
template_id=template.id,

View File

@@ -5,7 +5,7 @@ from unittest import mock
import pytest
from flask import json
from app.models import EMAIL_TYPE, INBOUND_SMS_TYPE, SMS_TYPE, InboundSms
from app.models import InboundSms, ServicePermissionType
from app.notifications.receive_notifications import (
create_inbound_sms_object,
fetch_potential_service,
@@ -72,8 +72,8 @@ def test_receive_notification_returns_received_to_sns(
@pytest.mark.parametrize(
"permissions",
[
[SMS_TYPE],
[INBOUND_SMS_TYPE],
[ServicePermissionType.SMS],
[ServicePermissionType.INBOUND_SMS],
],
)
def test_receive_notification_from_sns_without_permissions_does_not_persist(
@@ -139,9 +139,9 @@ def test_receive_notification_without_permissions_does_not_create_inbound_even_w
@pytest.mark.parametrize(
"permissions,expected_response",
[
([SMS_TYPE, INBOUND_SMS_TYPE], True),
([INBOUND_SMS_TYPE], False),
([SMS_TYPE], False),
([ServicePermissionType.SMS, ServicePermissionType.INBOUND_SMS], True),
([ServicePermissionType.INBOUND_SMS], False),
([ServicePermissionType.SMS], False),
],
)
def test_check_permissions_for_inbound_sms(
@@ -256,12 +256,20 @@ def test_receive_notification_error_if_not_single_matching_service(
create_service_with_inbound_number(
inbound_number="dog",
service_name="a",
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE],
service_permissions=[
ServicePermissionType.EMAIL,
ServicePermissionType.SMS,
ServicePermissionType.INBOUND_SMS,
],
)
create_service_with_inbound_number(
inbound_number="bar",
service_name="b",
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE],
service_permissions=[
ServicePermissionType.EMAIL,
ServicePermissionType.SMS,
ServicePermissionType.INBOUND_SMS
],
)
data = {
@@ -303,7 +311,11 @@ def test_sns_inbound_sms_auth(
create_service_with_inbound_number(
service_name="b",
inbound_number="07111111111",
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE],
service_permissions=[
ServicePermissionType.EMAIL,
ServicePermissionType.SMS,
ServicePermissionType.INBOUND_SMS,
],
)
data = {

View File

@@ -5,7 +5,7 @@ from notifications_utils import SMS_CHAR_COUNT_LIMIT
import app
from app.dao import templates_dao
from app.models import EMAIL_TYPE, KEY_TYPE_NORMAL, SMS_TYPE
from app.models import KEY_TYPE_NORMAL, NotificationType, ServicePermissionType, TemplateType
from app.notifications.process_notifications import create_content_for_notification
from app.notifications.sns_cert_validator import (
VALID_SNS_TOPICS,
@@ -89,7 +89,11 @@ def test_check_application_over_retention_limit_fails(
@pytest.mark.parametrize(
"template_type, notification_type", [(EMAIL_TYPE, EMAIL_TYPE), (SMS_TYPE, SMS_TYPE)]
"template_type, notification_type",
[
(TemplateType.EMAIL, NotificationType.EMAIL),
(TemplateType.SMS, NotificationType.SMS),
]
)
def test_check_template_is_for_notification_type_pass(template_type, notification_type):
assert (
@@ -101,7 +105,11 @@ def test_check_template_is_for_notification_type_pass(template_type, notificatio
@pytest.mark.parametrize(
"template_type, notification_type", [(SMS_TYPE, EMAIL_TYPE), (EMAIL_TYPE, SMS_TYPE)]
"template_type, notification_type",
[
(TemplateType.SMS, NotificationType.EMAIL),
(TemplateType.EMAIL, NotificationType.SMS),
]
)
def test_check_template_is_for_notification_type_fails_when_template_type_does_not_match_notification_type(
template_type, notification_type
@@ -548,11 +556,14 @@ def test_validate_and_format_recipient_fails_when_international_number_and_servi
key_type,
notify_db_session,
):
service = create_service(service_permissions=[SMS_TYPE])
service = create_service(service_permissions=[ServicePermissionType.SMS])
service_model = SerialisedService.from_id(service.id)
with pytest.raises(BadRequestError) as e:
validate_and_format_recipient(
"+20-12-1234-1234", key_type, service_model, SMS_TYPE
"+20-12-1234-1234",
key_type,
service_model,
NotificationType.SMS,
)
assert e.value.status_code == 400
assert e.value.message == "Cannot send to international mobile numbers"
@@ -565,14 +576,14 @@ def test_validate_and_format_recipient_succeeds_with_international_numbers_if_se
):
service_model = SerialisedService.from_id(sample_service_full_permissions.id)
result = validate_and_format_recipient(
"+4407513332413", key_type, service_model, SMS_TYPE
"+4407513332413", key_type, service_model, NotificationType.SMS
)
assert result == "+447513332413"
def test_validate_and_format_recipient_fails_when_no_recipient():
with pytest.raises(BadRequestError) as e:
validate_and_format_recipient(None, "key_type", "service", "SMS_TYPE")
validate_and_format_recipient(None, "key_type", "service", "NotificationType.SMS")
assert e.value.status_code == 400
assert e.value.message == "Recipient can't be empty"
@@ -586,7 +597,7 @@ def test_check_service_email_reply_to_where_email_reply_to_is_found(sample_servi
reply_to_address = create_reply_to_email(sample_service, "test@test.com")
assert (
check_service_email_reply_to_id(
sample_service.id, reply_to_address.id, EMAIL_TYPE
sample_service.id, reply_to_address.id, NotificationType.EMAIL
)
== "test@test.com"
)
@@ -597,7 +608,7 @@ def test_check_service_email_reply_to_id_where_service_id_is_not_found(
):
reply_to_address = create_reply_to_email(sample_service, "test@test.com")
with pytest.raises(BadRequestError) as e:
check_service_email_reply_to_id(fake_uuid, reply_to_address.id, EMAIL_TYPE)
check_service_email_reply_to_id(fake_uuid, reply_to_address.id, NotificationType.EMAIL)
assert e.value.status_code == 400
assert (
e.value.message
@@ -611,7 +622,7 @@ def test_check_service_email_reply_to_id_where_reply_to_id_is_not_found(
sample_service, fake_uuid
):
with pytest.raises(BadRequestError) as e:
check_service_email_reply_to_id(sample_service.id, fake_uuid, EMAIL_TYPE)
check_service_email_reply_to_id(sample_service.id, fake_uuid, NotificationType.EMAIL)
assert e.value.status_code == 400
assert (
e.value.message
@@ -628,10 +639,11 @@ def test_check_service_sms_sender_id_where_sms_sender_id_is_none(notification_ty
def test_check_service_sms_sender_id_where_sms_sender_id_is_found(sample_service):
sms_sender = create_service_sms_sender(service=sample_service, sms_sender="123456")
assert (
check_service_sms_sender_id(sample_service.id, sms_sender.id, SMS_TYPE)
== "123456"
)
assert check_service_sms_sender_id(
sample_service.id,
sms_sender.id,
NotificationType.SMS,
) == "123456"
def test_check_service_sms_sender_id_where_service_id_is_not_found(
@@ -639,7 +651,7 @@ def test_check_service_sms_sender_id_where_service_id_is_not_found(
):
sms_sender = create_service_sms_sender(service=sample_service, sms_sender="123456")
with pytest.raises(BadRequestError) as e:
check_service_sms_sender_id(fake_uuid, sms_sender.id, SMS_TYPE)
check_service_sms_sender_id(fake_uuid, sms_sender.id, NotificationType.SMS)
assert e.value.status_code == 400
assert (
e.value.message
@@ -653,7 +665,7 @@ def test_check_service_sms_sender_id_where_sms_sender_is_not_found(
sample_service, fake_uuid
):
with pytest.raises(BadRequestError) as e:
check_service_sms_sender_id(sample_service.id, fake_uuid, SMS_TYPE)
check_service_sms_sender_id(sample_service.id, fake_uuid, NotificationType.SMS)
assert e.value.status_code == 400
assert (
e.value.message
@@ -671,14 +683,14 @@ def test_check_reply_to_with_empty_reply_to(sample_service, notification_type):
def test_check_reply_to_email_type(sample_service):
reply_to_address = create_reply_to_email(sample_service, "test@test.com")
assert (
check_reply_to(sample_service.id, reply_to_address.id, EMAIL_TYPE)
check_reply_to(sample_service.id, reply_to_address.id, NotificationType.EMAIL)
== "test@test.com"
)
def test_check_reply_to_sms_type(sample_service):
sms_sender = create_service_sms_sender(service=sample_service, sms_sender="123456")
assert check_reply_to(sample_service.id, sms_sender.id, SMS_TYPE) == "123456"
assert check_reply_to(sample_service.id, sms_sender.id, NotificationType.SMS) == "123456"
def test_check_if_service_can_send_files_by_email_raises_if_no_contact_link_set(