Update switch task to use sent_at and newer db helpers

This commit is contained in:
Imdad Ahad
2017-02-24 13:41:32 +00:00
parent eafe8269ef
commit 204d72830f
2 changed files with 44 additions and 70 deletions

View File

@@ -14,7 +14,7 @@ from app.dao.jobs_dao import dao_set_scheduled_jobs_to_pending, dao_get_jobs_old
from app.dao.notifications_dao import ( from app.dao.notifications_dao import (
delete_notifications_created_more_than_a_week_ago, delete_notifications_created_more_than_a_week_ago,
dao_timeout_notifications, dao_timeout_notifications,
get_count_of_slow_delivery_sms_notifications_for_provider is_delivery_slow_for_provider
) )
from app.dao.provider_details_dao import ( from app.dao.provider_details_dao import (
get_current_provider, get_current_provider,
@@ -163,11 +163,10 @@ def switch_current_sms_provider_on_slow_delivery():
if functional_test_provider_service_id and functional_test_provider_template_id: if functional_test_provider_service_id and functional_test_provider_template_id:
current_provider = get_current_provider('sms') current_provider = get_current_provider('sms')
slow_delivery_notifications = get_count_of_slow_delivery_sms_notifications_for_provider( slow_delivery_notifications = is_delivery_slow_for_provider(
provider=current_provider.identifier, provider=current_provider.identifier,
threshold=2, threshold=2,
created_at=current_provider.updated_at, sent_at=max(datetime.utcnow() - timedelta(minutes=10), current_provider.updated_at),
sent_at=datetime.utcnow() - timedelta(minutes=10),
delivery_time=timedelta(minutes=4), delivery_time=timedelta(minutes=4),
service_id=functional_test_provider_service_id, service_id=functional_test_provider_service_id,
template_id=functional_test_provider_template_id template_id=functional_test_provider_template_id
@@ -175,9 +174,8 @@ def switch_current_sms_provider_on_slow_delivery():
if slow_delivery_notifications: if slow_delivery_notifications:
current_app.logger.warning( current_app.logger.warning(
'{} slow delivery notifications detected for provider {}'.format( 'Slow delivery notifications detected for provider {}'.format(
slow_delivery_notifications.total, current_provider.identifier
slow_delivery_notifications.sent_by
) )
) )

View File

@@ -24,43 +24,36 @@ from app.dao.provider_details_dao import (
dao_update_provider_details, dao_update_provider_details,
get_current_provider get_current_provider
) )
from app.models import Service, Template
from app.utils import get_london_midnight_in_utc from app.utils import get_london_midnight_in_utc
from tests.app.db import create_notification, create_service, create_template
from tests.app.conftest import ( from tests.app.conftest import (
sample_notification as create_sample_notification,
sample_job as create_sample_job, sample_job as create_sample_job,
sample_notification_history as create_notification_history, sample_notification_history as create_notification_history
sample_service as create_sample_service,
sample_template as create_sample_template
) )
from tests.conftest import set_config_values from tests.conftest import set_config_values
from unittest.mock import call, patch, PropertyMock from unittest.mock import call, patch, PropertyMock
def _create_slow_delivery_notification(notify_db, notify_db_session, provider='mmg'): def _create_slow_delivery_notification(provider='mmg'):
now = datetime.utcnow() now = datetime.utcnow()
five_minutes_from_now = now + timedelta(minutes=5) five_minutes_from_now = now + timedelta(minutes=5)
service = Service.query.get(current_app.config['FUNCTIONAL_TEST_PROVIDER_SERVICE_ID'])
if not service:
service = create_service(
service_id=current_app.config.get('FUNCTIONAL_TEST_PROVIDER_SERVICE_ID')
)
service = create_sample_service( template = Template.query.get(current_app.config['FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID'])
notify_db, if not template:
notify_db_session, template = create_template(
service_id=current_app.config.get('FUNCTIONAL_TEST_PROVIDER_SERVICE_ID') template_id=current_app.config.get('FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID'),
) service=service
)
template = create_sample_template( create_notification(
notify_db,
notify_db_session,
template_id=current_app.config.get('FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID'),
service=service
)
create_sample_notification(
notify_db,
notify_db_session,
service=service,
template=template, template=template,
status='delivered', status='delivered',
created_at=now,
sent_at=now,
sent_by=provider, sent_by=provider,
updated_at=five_minutes_from_now updated_at=five_minutes_from_now
) )
@@ -116,26 +109,17 @@ def test_update_status_of_notifications_after_timeout(notify_api,
sample_template, sample_template,
mmg_provider): mmg_provider):
with notify_api.test_request_context(): with notify_api.test_request_context():
not1 = create_sample_notification( not1 = create_notification(
notify_db,
notify_db_session,
service=sample_service,
template=sample_template, template=sample_template,
status='sending', status='sending',
created_at=datetime.utcnow() - timedelta( created_at=datetime.utcnow() - timedelta(
seconds=current_app.config.get('SENDING_NOTIFICATIONS_TIMEOUT_PERIOD') + 10)) seconds=current_app.config.get('SENDING_NOTIFICATIONS_TIMEOUT_PERIOD') + 10))
not2 = create_sample_notification( not2 = create_notification(
notify_db,
notify_db_session,
service=sample_service,
template=sample_template, template=sample_template,
status='created', status='created',
created_at=datetime.utcnow() - timedelta( created_at=datetime.utcnow() - timedelta(
seconds=current_app.config.get('SENDING_NOTIFICATIONS_TIMEOUT_PERIOD') + 10)) seconds=current_app.config.get('SENDING_NOTIFICATIONS_TIMEOUT_PERIOD') + 10))
not3 = create_sample_notification( not3 = create_notification(
notify_db,
notify_db_session,
service=sample_service,
template=sample_template, template=sample_template,
status='pending', status='pending',
created_at=datetime.utcnow() - timedelta( created_at=datetime.utcnow() - timedelta(
@@ -153,10 +137,7 @@ def test_not_update_status_of_notification_before_timeout(notify_api,
sample_template, sample_template,
mmg_provider): mmg_provider):
with notify_api.test_request_context(): with notify_api.test_request_context():
not1 = create_sample_notification( not1 = create_notification(
notify_db,
notify_db_session,
service=sample_service,
template=sample_template, template=sample_template,
status='sending', status='sending',
created_at=datetime.utcnow() - timedelta( created_at=datetime.utcnow() - timedelta(
@@ -294,13 +275,16 @@ def test_send_daily_performance_stats_calls_with_correct_totals(
]) ])
def test_switch_current_sms_provider_on_slow_delivery_does_not_run_if_config_unset(client, mocker): def test_switch_current_sms_provider_on_slow_delivery_does_not_run_if_config_unset(
notify_api,
mocker
):
get_notifications_mock = mocker.patch( get_notifications_mock = mocker.patch(
'app.celery.scheduled_tasks.get_count_of_slow_delivery_sms_notifications_for_provider' 'app.celery.scheduled_tasks.is_delivery_slow_for_provider'
) )
toggle_sms_mock = mocker.patch('app.celery.scheduled_tasks.dao_toggle_sms_provider') toggle_sms_mock = mocker.patch('app.celery.scheduled_tasks.dao_toggle_sms_provider')
with set_config_values(client.application, { with set_config_values(notify_api, {
'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': None, 'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': None,
'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': None 'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': None
}): }):
@@ -311,13 +295,12 @@ def test_switch_current_sms_provider_on_slow_delivery_does_not_run_if_config_uns
def test_switch_providers_on_slow_delivery_runs_if_config_set( def test_switch_providers_on_slow_delivery_runs_if_config_set(
notify_db,
notify_db_session,
notify_api, notify_api,
mocker mocker,
set_provider_updated_at
): ):
get_notifications_mock = mocker.patch( get_notifications_mock = mocker.patch(
'app.celery.scheduled_tasks.get_count_of_slow_delivery_sms_notifications_for_provider', 'app.celery.scheduled_tasks.is_delivery_slow_for_provider',
return_value=[] return_value=[]
) )
@@ -330,9 +313,7 @@ def test_switch_providers_on_slow_delivery_runs_if_config_set(
assert get_notifications_mock.called is True assert get_notifications_mock.called is True
def test_switch_providers_on_slow_delivery_triggers_switch_on_slow_notification_delivery( def test_switch_providers_triggers_on_slow_notification_delivery(
notify_db,
notify_db_session,
notify_api, notify_api,
restore_provider_details, restore_provider_details,
current_sms_provider, current_sms_provider,
@@ -342,9 +323,8 @@ def test_switch_providers_on_slow_delivery_triggers_switch_on_slow_notification_
'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': '7954469d-8c6d-43dc-b8f7-86be2d69f5f3', 'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': '7954469d-8c6d-43dc-b8f7-86be2d69f5f3',
'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7' 'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7'
}): }):
_create_slow_delivery_notification(notify_db, notify_db_session, current_sms_provider.identifier) _create_slow_delivery_notification(current_sms_provider.identifier)
_create_slow_delivery_notification(notify_db, notify_db_session, current_sms_provider.identifier) _create_slow_delivery_notification(current_sms_provider.identifier)
switch_current_sms_provider_on_slow_delivery() switch_current_sms_provider_on_slow_delivery()
new_provider = get_current_provider('sms') new_provider = get_current_provider('sms')
@@ -353,8 +333,6 @@ def test_switch_providers_on_slow_delivery_triggers_switch_on_slow_notification_
def test_switch_providers_on_slow_delivery_does_not_switch_if_already_switched( def test_switch_providers_on_slow_delivery_does_not_switch_if_already_switched(
notify_db,
notify_db_session,
notify_api, notify_api,
restore_provider_details, restore_provider_details,
current_sms_provider, current_sms_provider,
@@ -364,8 +342,8 @@ def test_switch_providers_on_slow_delivery_does_not_switch_if_already_switched(
'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': '7954469d-8c6d-43dc-b8f7-86be2d69f5f3', 'FUNCTIONAL_TEST_PROVIDER_SERVICE_ID': '7954469d-8c6d-43dc-b8f7-86be2d69f5f3',
'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7' 'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7'
}): }):
_create_slow_delivery_notification(notify_db, notify_db_session) _create_slow_delivery_notification()
_create_slow_delivery_notification(notify_db, notify_db_session) _create_slow_delivery_notification()
switch_current_sms_provider_on_slow_delivery() switch_current_sms_provider_on_slow_delivery()
switch_current_sms_provider_on_slow_delivery() switch_current_sms_provider_on_slow_delivery()
@@ -376,8 +354,6 @@ def test_switch_providers_on_slow_delivery_does_not_switch_if_already_switched(
def test_switch_providers_on_slow_delivery_does_not_switch_based_on_older_notifications( def test_switch_providers_on_slow_delivery_does_not_switch_based_on_older_notifications(
notify_db,
notify_db_session,
notify_api, notify_api,
restore_provider_details, restore_provider_details,
current_sms_provider, current_sms_provider,
@@ -397,16 +373,16 @@ def test_switch_providers_on_slow_delivery_does_not_switch_based_on_older_notifi
'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7' 'FUNCTIONAL_TEST_PROVIDER_SMS_TEMPLATE_ID': '331a63e6-f1aa-4588-ad3f-96c268788ae7'
}): }):
# Provider x -> y # Provider x -> y
_create_slow_delivery_notification(notify_db, notify_db_session, current_sms_provider.identifier) _create_slow_delivery_notification(current_sms_provider.identifier)
_create_slow_delivery_notification(notify_db, notify_db_session, current_sms_provider.identifier) _create_slow_delivery_notification(current_sms_provider.identifier)
_create_slow_delivery_notification(notify_db, notify_db_session, current_sms_provider.identifier) _create_slow_delivery_notification(current_sms_provider.identifier)
switch_current_sms_provider_on_slow_delivery() switch_current_sms_provider_on_slow_delivery()
current_provider = get_current_provider('sms') current_provider = get_current_provider('sms')
# Provider y -> x # Provider y -> x
_create_slow_delivery_notification(notify_db, notify_db_session, current_provider.identifier) _create_slow_delivery_notification(current_provider.identifier)
_create_slow_delivery_notification(notify_db, notify_db_session, current_provider.identifier) _create_slow_delivery_notification(current_provider.identifier)
switch_current_sms_provider_on_slow_delivery() switch_current_sms_provider_on_slow_delivery()
# Expect to stay on provider x # Expect to stay on provider x