mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-24 01:11:38 -05:00
update switch provider scheduled task
it now looks at both providers and works out whether to deprioritise one, rather than binary switching from one to the other. If anything has altered the priorities in the last ten minutes it won't take any action. If both providers are slow it also won't take any action.
This commit is contained in:
@@ -15,11 +15,13 @@ from app.celery.scheduled_tasks import (
|
||||
replay_created_notifications,
|
||||
check_precompiled_letter_state,
|
||||
check_templated_letter_state,
|
||||
check_for_missing_rows_in_completed_jobs
|
||||
check_for_missing_rows_in_completed_jobs,
|
||||
switch_current_sms_provider_on_slow_delivery,
|
||||
)
|
||||
from app.config import QueueNames, TaskNames
|
||||
from app.dao.jobs_dao import dao_get_job_by_id
|
||||
from app.dao.notifications_dao import dao_get_scheduled_notifications
|
||||
from app.dao.provider_details_dao import get_provider_details_by_notification_type, get_provider_details_by_identifier
|
||||
from app.models import (
|
||||
JOB_STATUS_IN_PROGRESS,
|
||||
JOB_STATUS_ERROR,
|
||||
@@ -98,13 +100,61 @@ def test_should_update_all_scheduled_jobs_and_put_on_queue(sample_template, mock
|
||||
])
|
||||
|
||||
|
||||
def test_switch_providers_on_slow_delivery_switches_once_then_does_not_switch_if_already_switched(
|
||||
notify_api,
|
||||
mocker,
|
||||
sample_user,
|
||||
sample_template
|
||||
@freeze_time('2017-05-01 14:00:00')
|
||||
def test_switch_current_sms_provider_on_slow_delivery_switches_when_one_provider_is_slow(
|
||||
mocker,
|
||||
restore_provider_details,
|
||||
):
|
||||
raise NotImplementedError # TODO
|
||||
is_slow_dict = {'mmg': False, 'firetext': True}
|
||||
mock_is_slow = mocker.patch('app.celery.scheduled_tasks.is_delivery_slow_for_providers', return_value=is_slow_dict)
|
||||
mock_reduce = mocker.patch('app.celery.scheduled_tasks.dao_reduce_sms_provider_priority')
|
||||
# updated_at times are older than the 10 minute window
|
||||
get_provider_details_by_identifier('mmg').updated_at = datetime(2017, 5, 1, 13, 49)
|
||||
get_provider_details_by_identifier('firetext').updated_at = None
|
||||
|
||||
switch_current_sms_provider_on_slow_delivery()
|
||||
|
||||
mock_is_slow.assert_called_once_with(
|
||||
threshold=0.3,
|
||||
created_at=datetime(2017, 5, 1, 13, 50),
|
||||
delivery_time=timedelta(minutes=4)
|
||||
)
|
||||
mock_reduce.assert_called_once_with('firetext')
|
||||
|
||||
|
||||
@freeze_time('2017-05-01 14:00:00')
|
||||
def test_switch_current_sms_provider_on_slow_delivery_does_nothing_if_recent_changes(
|
||||
mocker,
|
||||
restore_provider_details,
|
||||
):
|
||||
mock_is_slow = mocker.patch('app.celery.scheduled_tasks.is_delivery_slow_for_providers')
|
||||
mock_reduce = mocker.patch('app.celery.scheduled_tasks.dao_reduce_sms_provider_priority')
|
||||
get_provider_details_by_identifier('mmg').updated_at = datetime(2017, 5, 1, 13, 51)
|
||||
|
||||
switch_current_sms_provider_on_slow_delivery()
|
||||
|
||||
assert mock_is_slow.called is False
|
||||
assert mock_reduce.called is False
|
||||
|
||||
|
||||
@freeze_time('2017-05-01 14:00:00')
|
||||
@pytest.mark.parametrize('is_slow_dict', [
|
||||
{'mmg': False, 'firetext': False},
|
||||
{'mmg': True, 'firetext': True},
|
||||
])
|
||||
def test_switch_current_sms_provider_on_slow_delivery_does_nothing_if_no_need(
|
||||
mocker,
|
||||
restore_provider_details,
|
||||
is_slow_dict
|
||||
):
|
||||
mocker.patch('app.celery.scheduled_tasks.is_delivery_slow_for_providers', return_value=is_slow_dict)
|
||||
mock_reduce = mocker.patch('app.celery.scheduled_tasks.dao_reduce_sms_provider_priority')
|
||||
get_provider_details_by_identifier('mmg').updated_at = datetime(2017, 5, 1, 13, 51)
|
||||
|
||||
|
||||
switch_current_sms_provider_on_slow_delivery()
|
||||
|
||||
assert mock_reduce.called is False
|
||||
|
||||
|
||||
@freeze_time("2017-05-01 14:00:00")
|
||||
|
||||
Reference in New Issue
Block a user