diff --git a/app/aws/mocks.py b/app/aws/mocks.py index 719817d9ac..60f19653e5 100644 --- a/app/aws/mocks.py +++ b/app/aws/mocks.py @@ -230,7 +230,7 @@ def pinpoint_delivered_callback(reference=None, timestamp=1467074434, destinatio "isoCountryCode": "CA", "mcc": "302", "mnc": "610", - "carrierName": "Bell Cellular Inc. / Aliant Telecom", + "carrierName": "Bell", "messageId": reference, "messageRequestTimestamp": timestamp, "messageEncoding": "GSM", @@ -254,6 +254,7 @@ def pinpoint_shortcode_delivered_callback(reference=None, timestamp=1467074434, "originationPhoneNumber": "555555", "destinationPhoneNumber": destination, "isoCountryCode": "CA", + "carrierName": "Bell", "messageId": reference, "messageRequestTimestamp": timestamp, "messageEncoding": "GSM", @@ -268,6 +269,28 @@ def pinpoint_shortcode_delivered_callback(reference=None, timestamp=1467074434, return _pinpoint_callback(body) +def pinpoint_delivered_callback_missing_sms_data(reference=None, timestamp=1467074434, destination="+1XXX5550100"): + body = { + "eventType": "TEXT_DELIVERED", + "eventVersion": "1.0", + "eventTimestamp": timestamp, + "isFinal": True, + "originationPhoneNumber": "+13655550100", + "destinationPhoneNumber": destination, + "messageId": reference, + "messageRequestTimestamp": timestamp, + "messageEncoding": "GSM", + "messageType": "TRANSACTIONAL", + "messageStatus": "DELIVERED", + "messageStatusDescription": "Message has been accepted by phone", + "totalMessageParts": 1, + "totalMessagePrice": 0.00581, + "totalCarrierFee": 0.006, + } + + return _pinpoint_callback(body) + + # Note that 1467074434 = 2016-06-28 00:40:34.558 UTC def pinpoint_failed_callback(provider_response, reference=None, timestamp=1467074434, destination="+1XXX5550100"): body = { diff --git a/migrations/versions/0461_add_pinpoint_fields.py b/migrations/versions/0461_add_pinpoint_fields.py index 88b362a99f..610d27b4c6 100644 --- a/migrations/versions/0461_add_pinpoint_fields.py +++ b/migrations/versions/0461_add_pinpoint_fields.py @@ -7,7 +7,6 @@ """ import sqlalchemy as sa from alembic import op -from sqlalchemy.dialects import postgresql revision = "0461_add_pinpoint_fields" down_revision = "0460_new_service_columns" diff --git a/tests/app/celery/test_process_pinpoint_receipts_tasks.py b/tests/app/celery/test_process_pinpoint_receipts_tasks.py index ee432d0a84..633f6086f3 100644 --- a/tests/app/celery/test_process_pinpoint_receipts_tasks.py +++ b/tests/app/celery/test_process_pinpoint_receipts_tasks.py @@ -6,6 +6,7 @@ from app import statsd_client from app.aws.mocks import ( pinpoint_delivered_callback, + pinpoint_delivered_callback_missing_sms_data, pinpoint_failed_callback, pinpoint_shortcode_delivered_callback, pinpoint_successful_callback, @@ -30,7 +31,7 @@ @pytest.mark.parametrize( - "callback,expected_response,origination_phone_number", + "callback, expected_response, origination_phone_number", [ (pinpoint_delivered_callback, "Message has been accepted by phone", "+13655550100"), (pinpoint_shortcode_delivered_callback, "Message has been accepted by phone carrier", "555555"), @@ -61,6 +62,7 @@ def test_process_pinpoint_results_delivered( assert float(get_notification_by_id(notification.id).sms_total_message_price) == 0.00581 assert float(get_notification_by_id(notification.id).sms_total_carrier_fee) == 0.006 assert get_notification_by_id(notification.id).sms_iso_country_code == "CA" + assert get_notification_by_id(notification.id).sms_carrier_name == "Bell" assert get_notification_by_id(notification.id).sms_message_encoding == "GSM" assert get_notification_by_id(notification.id).sms_origination_phone_number == origination_phone_number @@ -88,6 +90,30 @@ def test_process_pinpoint_results_succeeded(sample_template, notify_db, notify_d assert get_notification_by_id(notification.id).provider_response is None +def test_process_pinpoint_results_missing_sms_data(sample_template, notify_db, notify_db_session, mocker): + mock_callback_task = mocker.patch("app.notifications.callbacks._check_and_queue_callback_task") + + notification = create_sample_notification( + notify_db, + notify_db_session, + template=sample_template, + reference="ref", + status=NOTIFICATION_SENT, + sent_by="pinpoint", + sent_at=datetime.utcnow(), + ) + assert get_notification_by_id(notification.id).status == NOTIFICATION_SENT + + process_pinpoint_results(pinpoint_delivered_callback_missing_sms_data(reference="ref")) + + assert mock_callback_task.called_once_with(get_notification_by_id(notification.id)) + assert get_notification_by_id(notification.id).status == NOTIFICATION_DELIVERED + assert float(get_notification_by_id(notification.id).sms_total_message_price) == 0.00581 + assert float(get_notification_by_id(notification.id).sms_total_carrier_fee) == 0.006 + assert get_notification_by_id(notification.id).sms_iso_country_code is None + assert get_notification_by_id(notification.id).sms_carrier_name is None + + @pytest.mark.parametrize( "provider_response, expected_status, should_log_warning, should_save_provider_response", [