def test_switch_providers_on_slow_delivery_switches_once_then_does_not_switch_if_already_switched( notify_api, mocker, prepare_current_provider, sample_user, sample_template): mocker.patch('app.provider_details.switch_providers.get_user_by_id', return_value=sample_user) starting_provider = get_current_provider('sms') _create_slow_delivery_notification(sample_template, starting_provider.identifier) _create_slow_delivery_notification(sample_template, starting_provider.identifier) with set_config_values(notify_api, {'SWITCH_SLOW_SMS_PROVIDER_ENABLED': True}): switch_current_sms_provider_on_slow_delivery() new_provider = get_current_provider('sms') _create_slow_delivery_notification(sample_template, new_provider.identifier) _create_slow_delivery_notification(sample_template, new_provider.identifier) switch_current_sms_provider_on_slow_delivery() final_provider = get_current_provider('sms') assert new_provider.identifier != starting_provider.identifier assert new_provider.priority < starting_provider.priority assert final_provider.identifier == new_provider.identifier
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
def test_switch_providers_on_slow_delivery_does_nothing_if_toggle_is_off( notify_api, mocker, prepare_current_provider, sample_user, sample_template): mocker.patch('app.provider_details.switch_providers.get_user_by_id', return_value=sample_user) starting_provider = get_current_provider('sms') _create_slow_delivery_notification(sample_template, starting_provider.identifier) _create_slow_delivery_notification(sample_template, starting_provider.identifier) with set_config_values(notify_api, {'SWITCH_SLOW_SMS_PROVIDER_ENABLED': False}): switch_current_sms_provider_on_slow_delivery() new_provider = get_current_provider('sms') assert new_provider.identifier == starting_provider.identifier
def test_switch_current_sms_provider_on_slow_delivery_switches_when_one_provider_is_slow( mocker, restore_provider_details, ): 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', time_threshold=timedelta(minutes=10))