diff --git a/app/inbound_sms/rest.py b/app/inbound_sms/rest.py index 893bfc174..1bc3dec07 100644 --- a/app/inbound_sms/rest.py +++ b/app/inbound_sms/rest.py @@ -1,5 +1,4 @@ from flask import Blueprint, jsonify, request -# from notifications_utils.recipients import try_validate_and_format_phone_number from app.dao.inbound_sms_dao import ( dao_count_inbound_sms_for_service, @@ -16,6 +15,9 @@ from app.inbound_sms.inbound_sms_schemas import ( ) from app.schema_validation import validate +# from notifications_utils.recipients import try_validate_and_format_phone_number + + inbound_sms = Blueprint( 'inbound_sms', __name__, diff --git a/tests/app/delivery/test_send_to_providers.py b/tests/app/delivery/test_send_to_providers.py index 316e24e84..cf4f9676c 100644 --- a/tests/app/delivery/test_send_to_providers.py +++ b/tests/app/delivery/test_send_to_providers.py @@ -6,8 +6,6 @@ from unittest.mock import ANY import pytest from flask import current_app -from notifications_utils.recipients import validate_and_format_phone_number -from requests import HTTPError import app # from app import firetext_client, mmg_client, notification_provider_clients @@ -27,16 +25,17 @@ from app.models import ( Notification, ) from app.serialised_models import SerialisedService -from tests.app.db import ( +from tests.app.db import ( # create_service,; create_service_with_defined_sms_sender,; create_template, create_email_branding, create_notification, create_reply_to_email, - create_service, create_service_sms_sender, - create_service_with_defined_sms_sender, - create_template, ) +# from notifications_utils.recipients import validate_and_format_phone_number +# from requests import HTTPError + + def setup_function(_function): # pytest will run this function before each test. It makes sure the @@ -117,39 +116,39 @@ def test_provider_to_use_raises_if_no_active_providers(mocker, restore_provider_ send_to_providers.provider_to_use('sms', international=True) -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_send_personalised_template_to_correct_sms_provider_and_persist( - sample_sms_template_with_html, - mocker -): - db_notification = create_notification(template=sample_sms_template_with_html, - to_field="+447234123123", personalisation={"name": "Jo"}, - status='created', - reply_to_text=sample_sms_template_with_html.service.get_default_sms_sender(), - normalised_to="447234123123" - ) +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_send_personalised_template_to_correct_sms_provider_and_persist( +# sample_sms_template_with_html, +# mocker +# ): +# db_notification = create_notification(template=sample_sms_template_with_html, +# to_field="+447234123123", personalisation={"name": "Jo"}, +# status='created', +# reply_to_text=sample_sms_template_with_html.service.get_default_sms_sender(), +# normalised_to="447234123123" +# ) - mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.mmg_client.send_sms') - send_to_providers.send_sms_to_provider( - db_notification - ) +# send_to_providers.send_sms_to_provider( +# db_notification +# ) - mmg_client.send_sms.assert_called_once_with( - to="447234123123", - content="Sample service: Hello Jo\nHere is some HTML & entities", - reference=str(db_notification.id), - sender=current_app.config['FROM_NUMBER'], - international=False - ) +# mmg_client.send_sms.assert_called_once_with( +# to="447234123123", +# content="Sample service: Hello Jo\nHere is some HTML & entities", +# reference=str(db_notification.id), +# sender=current_app.config['FROM_NUMBER'], +# international=False +# ) - 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.sent_at <= datetime.utcnow() - assert notification.sent_by == 'mmg' - assert notification.billable_units == 1 - assert notification.personalisation == {"name": "Jo"} +# assert notification.status == 'sending' +# assert notification.sent_at <= datetime.utcnow() +# assert notification.sent_by == 'mmg' +# assert notification.billable_units == 1 +# assert notification.personalisation == {"name": "Jo"} @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") @@ -217,145 +216,145 @@ def test_should_not_send_sms_message_when_service_is_inactive_notification_is_in assert Notification.query.get(sample_notification.id).status == 'technical-failure' -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_send_sms_should_use_template_version_from_notification_not_latest( - sample_template, - mocker): - db_notification = create_notification(template=sample_template, to_field='+447234123123', status='created', - reply_to_text=sample_template.service.get_default_sms_sender(), - normalised_to='447234123123') +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_send_sms_should_use_template_version_from_notification_not_latest( +# sample_template, +# mocker): +# db_notification = create_notification(template=sample_template, to_field='+447234123123', status='created', +# reply_to_text=sample_template.service.get_default_sms_sender(), +# normalised_to='447234123123') - mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.mmg_client.send_sms') - version_on_notification = sample_template.version - expected_template_id = sample_template.id +# version_on_notification = sample_template.version +# expected_template_id = sample_template.id - # Change the template - from app.dao.templates_dao import ( - dao_get_template_by_id, - dao_update_template, - ) - sample_template.content = sample_template.content + " another version of the template" - dao_update_template(sample_template) - t = dao_get_template_by_id(sample_template.id) - assert t.version > version_on_notification +# # Change the template +# from app.dao.templates_dao import ( +# dao_get_template_by_id, +# dao_update_template, +# ) +# sample_template.content = sample_template.content + " another version of the template" +# dao_update_template(sample_template) +# t = dao_get_template_by_id(sample_template.id) +# assert t.version > version_on_notification - send_to_providers.send_sms_to_provider( - db_notification - ) +# send_to_providers.send_sms_to_provider( +# db_notification +# ) - mmg_client.send_sms.assert_called_once_with( - to=validate_and_format_phone_number("+447234123123"), - content="Sample service: This is a template:\nwith a newline", - reference=str(db_notification.id), - sender=current_app.config['FROM_NUMBER'], - international=False - ) +# mmg_client.send_sms.assert_called_once_with( +# to=validate_and_format_phone_number("+447234123123"), +# content="Sample service: This is a template:\nwith a newline", +# reference=str(db_notification.id), +# sender=current_app.config['FROM_NUMBER'], +# international=False +# ) - t = dao_get_template_by_id(expected_template_id) +# t = dao_get_template_by_id(expected_template_id) - persisted_notification = notifications_dao.get_notification_by_id(db_notification.id) - assert persisted_notification.to == db_notification.to - assert persisted_notification.template_id == expected_template_id - assert persisted_notification.template_version == version_on_notification - assert persisted_notification.template_version != t.version - assert persisted_notification.status == 'sending' - assert not persisted_notification.personalisation +# persisted_notification = notifications_dao.get_notification_by_id(db_notification.id) +# assert persisted_notification.to == db_notification.to +# assert persisted_notification.template_id == expected_template_id +# assert persisted_notification.template_version == version_on_notification +# assert persisted_notification.template_version != t.version +# assert persisted_notification.status == 'sending' +# assert not persisted_notification.personalisation -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -@pytest.mark.parametrize('research_mode,key_type', [ - (True, KEY_TYPE_NORMAL), - (False, KEY_TYPE_TEST) -]) -def test_should_call_send_sms_response_task_if_research_mode( - notify_db_session, sample_service, sample_notification, mocker, research_mode, key_type -): - mocker.patch('app.mmg_client.send_sms') - mocker.patch('app.delivery.send_to_providers.send_sms_response') +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# @pytest.mark.parametrize('research_mode,key_type', [ +# (True, KEY_TYPE_NORMAL), +# (False, KEY_TYPE_TEST) +# ]) +# def test_should_call_send_sms_response_task_if_research_mode( +# notify_db_session, sample_service, sample_notification, mocker, research_mode, key_type +# ): +# mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.delivery.send_to_providers.send_sms_response') - if research_mode: - sample_service.research_mode = True - notify_db_session.add(sample_service) - notify_db_session.commit() +# if research_mode: +# sample_service.research_mode = True +# notify_db_session.add(sample_service) +# notify_db_session.commit() - sample_notification.key_type = key_type +# sample_notification.key_type = key_type - send_to_providers.send_sms_to_provider( - sample_notification - ) - assert not mmg_client.send_sms.called +# send_to_providers.send_sms_to_provider( +# sample_notification +# ) +# assert not mmg_client.send_sms.called - app.delivery.send_to_providers.send_sms_response.assert_called_once_with( - 'mmg', str(sample_notification.id), sample_notification.to - ) +# app.delivery.send_to_providers.send_sms_response.assert_called_once_with( +# 'mmg', str(sample_notification.id), sample_notification.to +# ) - persisted_notification = notifications_dao.get_notification_by_id(sample_notification.id) - assert persisted_notification.to == sample_notification.to - assert persisted_notification.template_id == sample_notification.template_id - assert persisted_notification.status == 'sending' - assert persisted_notification.sent_at <= datetime.utcnow() - assert persisted_notification.sent_by == 'mmg' - assert not persisted_notification.personalisation +# persisted_notification = notifications_dao.get_notification_by_id(sample_notification.id) +# assert persisted_notification.to == sample_notification.to +# assert persisted_notification.template_id == sample_notification.template_id +# assert persisted_notification.status == 'sending' +# assert persisted_notification.sent_at <= datetime.utcnow() +# assert persisted_notification.sent_by == 'mmg' +# assert not persisted_notification.personalisation -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_have_sending_status_if_fake_callback_function_fails(sample_notification, mocker): - mocker.patch('app.delivery.send_to_providers.send_sms_response', side_effect=HTTPError) +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_have_sending_status_if_fake_callback_function_fails(sample_notification, mocker): +# mocker.patch('app.delivery.send_to_providers.send_sms_response', side_effect=HTTPError) - sample_notification.key_type = KEY_TYPE_TEST +# sample_notification.key_type = KEY_TYPE_TEST - with pytest.raises(HTTPError): - send_to_providers.send_sms_to_provider( - sample_notification - ) - assert sample_notification.status == 'sending' - assert sample_notification.sent_by == 'mmg' +# with pytest.raises(HTTPError): +# send_to_providers.send_sms_to_provider( +# sample_notification +# ) +# assert sample_notification.status == 'sending' +# assert sample_notification.sent_by == 'mmg' -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_not_send_to_provider_when_status_is_not_created( - sample_template, - mocker -): - notification = create_notification(template=sample_template, status='sending') - mocker.patch('app.mmg_client.send_sms') - response_mock = mocker.patch('app.delivery.send_to_providers.send_sms_response') +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_not_send_to_provider_when_status_is_not_created( +# sample_template, +# mocker +# ): +# notification = create_notification(template=sample_template, status='sending') +# mocker.patch('app.mmg_client.send_sms') +# response_mock = mocker.patch('app.delivery.send_to_providers.send_sms_response') - send_to_providers.send_sms_to_provider( - notification - ) +# send_to_providers.send_sms_to_provider( +# notification +# ) - app.mmg_client.send_sms.assert_not_called() - response_mock.assert_not_called() +# app.mmg_client.send_sms.assert_not_called() +# response_mock.assert_not_called() -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_send_sms_with_downgraded_content(notify_db_session, mocker): - # é, o, and u are in GSM. - # ī, grapes, tabs, zero width space and ellipsis are not - # ó isn't in GSM, but it is in the welsh alphabet so will still be sent - msg = "a é ī o u 🍇 foo\tbar\u200bbaz((misc))…" - placeholder = '∆∆∆abc' - gsm_message = "?ódz Housing Service: a é i o u ? foo barbaz???abc..." - service = create_service(service_name='Łódź Housing Service') - template = create_template(service, content=msg) - db_notification = create_notification( - template=template, - personalisation={'misc': placeholder} - ) +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_send_sms_with_downgraded_content(notify_db_session, mocker): +# # é, o, and u are in GSM. +# # ī, grapes, tabs, zero width space and ellipsis are not +# # ó isn't in GSM, but it is in the welsh alphabet so will still be sent +# msg = "a é ī o u 🍇 foo\tbar\u200bbaz((misc))…" +# placeholder = '∆∆∆abc' +# gsm_message = "?ódz Housing Service: a é i o u ? foo barbaz???abc..." +# service = create_service(service_name='Łódź Housing Service') +# template = create_template(service, content=msg) +# db_notification = create_notification( +# template=template, +# personalisation={'misc': placeholder} +# ) - mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.mmg_client.send_sms') - send_to_providers.send_sms_to_provider(db_notification) +# send_to_providers.send_sms_to_provider(db_notification) - mmg_client.send_sms.assert_called_once_with( - to=ANY, - content=gsm_message, - reference=ANY, - sender=ANY, - international=False - ) +# mmg_client.send_sms.assert_called_once_with( +# to=ANY, +# content=gsm_message, +# reference=ANY, +# sender=ANY, +# international=False +# ) @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") @@ -595,22 +594,22 @@ def test_should_not_update_notification_if_research_mode_on_exception( assert update_mock.called -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -@pytest.mark.parametrize("starting_status, expected_status", [ - ("delivered", "delivered"), - ("created", "sending"), - ("technical-failure", "technical-failure"), -]) -def test_update_notification_to_sending_does_not_update_status_from_a_final_status( - sample_service, notify_db_session, starting_status, expected_status -): - template = create_template(sample_service) - notification = create_notification(template=template, status=starting_status) - send_to_providers.update_notification_to_sending( - notification, - notification_provider_clients.get_client_by_name_and_type("mmg", "sms") - ) - assert notification.status == expected_status +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# @pytest.mark.parametrize("starting_status, expected_status", [ +# ("delivered", "delivered"), +# ("created", "sending"), +# ("technical-failure", "technical-failure"), +# ]) +# def test_update_notification_to_sending_does_not_update_status_from_a_final_status( +# sample_service, notify_db_session, starting_status, expected_status +# ): +# template = create_template(sample_service) +# notification = create_notification(template=template, status=starting_status) +# send_to_providers.update_notification_to_sending( +# notification, +# notification_provider_clients.get_client_by_name_and_type("mmg", "sms") +# ) +# assert notification.status == expected_status def __update_notification(notification_to_update, research_mode, expected_status): @@ -668,116 +667,116 @@ def test_should_set_notification_billable_units_and_reduces_provider_priority_if mock_reduce.assert_called_once_with('mmg', time_threshold=timedelta(minutes=1)) -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_send_sms_to_international_providers( - sample_template, - sample_user, - mocker -): - mocker.patch('app.mmg_client.send_sms') - mocker.patch('app.firetext_client.send_sms') +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_send_sms_to_international_providers( +# sample_template, +# sample_user, +# mocker +# ): +# mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.firetext_client.send_sms') - # set firetext to active - get_provider_details_by_identifier('firetext').priority = 100 - get_provider_details_by_identifier('mmg').priority = 0 +# # set firetext to active +# get_provider_details_by_identifier('firetext').priority = 100 +# get_provider_details_by_identifier('mmg').priority = 0 - notification_international = create_notification( - template=sample_template, - to_field="+6011-17224412", - personalisation={"name": "Jo"}, - status='created', - international=True, - reply_to_text=sample_template.service.get_default_sms_sender(), - normalised_to='601117224412' - ) +# notification_international = create_notification( +# template=sample_template, +# to_field="+6011-17224412", +# personalisation={"name": "Jo"}, +# status='created', +# international=True, +# reply_to_text=sample_template.service.get_default_sms_sender(), +# normalised_to='601117224412' +# ) - send_to_providers.send_sms_to_provider( - notification_international - ) +# send_to_providers.send_sms_to_provider( +# notification_international +# ) - mmg_client.send_sms.assert_called_once_with( - to="601117224412", - content=ANY, - reference=str(notification_international.id), - sender=current_app.config['FROM_NUMBER'], - international=True - ) +# mmg_client.send_sms.assert_called_once_with( +# to="601117224412", +# content=ANY, +# reference=str(notification_international.id), +# sender=current_app.config['FROM_NUMBER'], +# international=True +# ) - assert notification_international.status == 'sent' - assert notification_international.sent_by == 'mmg' +# assert notification_international.status == 'sent' +# assert notification_international.sent_by == 'mmg' -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -def test_should_send_non_international_sms_to_default_provider( - sample_template, - sample_user, - mocker -): - mocker.patch('app.mmg_client.send_sms') - mocker.patch('app.firetext_client.send_sms') +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# def test_should_send_non_international_sms_to_default_provider( +# sample_template, +# sample_user, +# mocker +# ): +# mocker.patch('app.mmg_client.send_sms') +# mocker.patch('app.firetext_client.send_sms') - # set firetext to active - get_provider_details_by_identifier('firetext').priority = 100 - get_provider_details_by_identifier('mmg').priority = 0 +# # set firetext to active +# get_provider_details_by_identifier('firetext').priority = 100 +# get_provider_details_by_identifier('mmg').priority = 0 - notification_uk = create_notification( - template=sample_template, - to_field="+447234123999", - personalisation={"name": "Jo"}, - status='created', - international=False, - reply_to_text=sample_template.service.get_default_sms_sender(), - normalised_to="447234123999" - ) +# notification_uk = create_notification( +# template=sample_template, +# to_field="+447234123999", +# personalisation={"name": "Jo"}, +# status='created', +# international=False, +# reply_to_text=sample_template.service.get_default_sms_sender(), +# normalised_to="447234123999" +# ) - send_to_providers.send_sms_to_provider( - notification_uk - ) +# send_to_providers.send_sms_to_provider( +# notification_uk +# ) - firetext_client.send_sms.assert_called_once_with( - to="447234123999", - content=ANY, - reference=str(notification_uk.id), - sender=current_app.config['FROM_NUMBER'], - international=False - ) +# firetext_client.send_sms.assert_called_once_with( +# to="447234123999", +# content=ANY, +# reference=str(notification_uk.id), +# sender=current_app.config['FROM_NUMBER'], +# international=False +# ) - assert notification_uk.status == 'sending' - assert notification_uk.sent_by == 'firetext' +# assert notification_uk.status == 'sending' +# assert notification_uk.sent_by == 'firetext' -@pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") -@pytest.mark.parametrize('sms_sender, expected_sender, prefix_sms, expected_content', [ - ('foo', 'foo', False, 'bar'), - ('foo', 'foo', True, 'Sample service: bar'), - # if 40604 is actually in DB then treat that as if entered manually - ('40604', '40604', False, 'bar'), - # 'testing' is the FROM_NUMBER during unit tests - ('testing', 'testing', True, 'Sample service: bar'), - ('testing', 'testing', False, 'bar'), -]) -def test_should_handle_sms_sender_and_prefix_message( - mocker, - sms_sender, - prefix_sms, - expected_sender, - expected_content, - notify_db_session -): - mocker.patch('app.mmg_client.send_sms') - service = create_service_with_defined_sms_sender(sms_sender_value=sms_sender, prefix_sms=prefix_sms) - template = create_template(service, content='bar') - notification = create_notification(template, reply_to_text=sms_sender) +# @pytest.mark.skip(reason="Needs updating for TTS: Update with new providers") +# @pytest.mark.parametrize('sms_sender, expected_sender, prefix_sms, expected_content', [ +# ('foo', 'foo', False, 'bar'), +# ('foo', 'foo', True, 'Sample service: bar'), +# # if 40604 is actually in DB then treat that as if entered manually +# ('40604', '40604', False, 'bar'), +# # 'testing' is the FROM_NUMBER during unit tests +# ('testing', 'testing', True, 'Sample service: bar'), +# ('testing', 'testing', False, 'bar'), +# ]) +# def test_should_handle_sms_sender_and_prefix_message( +# mocker, +# sms_sender, +# prefix_sms, +# expected_sender, +# expected_content, +# notify_db_session +# ): +# mocker.patch('app.mmg_client.send_sms') +# service = create_service_with_defined_sms_sender(sms_sender_value=sms_sender, prefix_sms=prefix_sms) +# template = create_template(service, content='bar') +# notification = create_notification(template, reply_to_text=sms_sender) - send_to_providers.send_sms_to_provider(notification) +# send_to_providers.send_sms_to_provider(notification) - mmg_client.send_sms.assert_called_once_with( - content=expected_content, - sender=expected_sender, - to=ANY, - reference=ANY, - international=False - ) +# mmg_client.send_sms.assert_called_once_with( +# content=expected_content, +# sender=expected_sender, +# to=ANY, +# reference=ANY, +# international=False +# ) def test_send_email_to_provider_uses_reply_to_from_notification(