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
Beispiel #2
0
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))