randomly choose from providers based on priority

todo: make sure if they don't add up to 100 we do something sensible,
especially if they're both 0.
This commit is contained in:
Leo Hemsted
2019-10-14 15:01:08 +01:00
parent 4fd6f33af2
commit 6f38cbbcf1
5 changed files with 74 additions and 41 deletions

View File

@@ -26,7 +26,7 @@ from app.dao.notifications_dao import (
get_notification_with_personalisation,
get_notifications_for_job,
get_notifications_for_service,
is_delivery_slow_for_provider,
is_delivery_slow_for_providers,
set_scheduled_notification_to_processed,
update_notification_status_by_id,
update_notification_status_by_reference,
@@ -957,7 +957,7 @@ def test_should_exclude_test_key_notifications_by_default(
]
)
@freeze_time("2018-12-04 12:00:00.000000")
def test_is_delivery_slow_for_provider(
def test_is_delivery_slow_for_providers(
notify_db_session,
sample_template,
normal_sending,
@@ -992,7 +992,11 @@ def test_is_delivery_slow_for_provider(
for _ in range(slow_delivered):
slow_notification(status='delivered')
assert is_delivery_slow_for_provider(datetime.utcnow(), "mmg", threshold, timedelta(minutes=4)) is expected_result
result = is_delivery_slow_for_providers(datetime.utcnow(), threshold, timedelta(minutes=4))
assert result == {
'firetext': False,
'mmg': expected_result
}
@pytest.mark.parametrize("options,expected_result", [
@@ -1008,22 +1012,23 @@ def test_is_delivery_slow_for_provider(
])
@freeze_time("2018-12-04 12:00:00.000000")
def test_delivery_is_delivery_slow_for_provider_filters_out_notifications_it_should_not_count(
def test_delivery_is_delivery_slow_for_providers_filters_out_notifications_it_should_not_count(
notify_db_session,
sample_template,
options,
expected_result
):
create_notification_with = {
create_slow_notification_with = {
"template": sample_template,
"sent_at": datetime.now() - timedelta(minutes=5),
"updated_at": datetime.now(),
}
create_notification_with.update(options)
create_slow_notification_with.update(options)
create_notification(
**create_notification_with
**create_slow_notification_with
)
assert is_delivery_slow_for_provider(datetime.utcnow(), "mmg", 0.1, timedelta(minutes=4)) is expected_result
result = is_delivery_slow_for_providers(datetime.utcnow(), 0.1, timedelta(minutes=4))
assert result['mmg'] == expected_result
def test_dao_get_notifications_by_to_field(sample_template):

View File

@@ -40,7 +40,7 @@ def test_should_return_highest_priority_active_provider(restore_provider_details
first = providers[0]
second = providers[1]
assert send_to_providers.provider_to_use('sms', '1234').name == first.identifier
assert send_to_providers.provider_to_use('sms').name == first.identifier
first.priority = 20
second.priority = 10
@@ -48,7 +48,7 @@ def test_should_return_highest_priority_active_provider(restore_provider_details
provider_details_dao.dao_update_provider_details(first)
provider_details_dao.dao_update_provider_details(second)
assert send_to_providers.provider_to_use('sms', '1234').name == second.identifier
assert send_to_providers.provider_to_use('sms').name == second.identifier
first.priority = 10
first.active = False
@@ -57,12 +57,12 @@ def test_should_return_highest_priority_active_provider(restore_provider_details
provider_details_dao.dao_update_provider_details(first)
provider_details_dao.dao_update_provider_details(second)
assert send_to_providers.provider_to_use('sms', '1234').name == second.identifier
assert send_to_providers.provider_to_use('sms').name == second.identifier
first.active = True
provider_details_dao.dao_update_provider_details(first)
assert send_to_providers.provider_to_use('sms', '1234').name == first.identifier
assert send_to_providers.provider_to_use('sms').name == first.identifier
def test_should_send_personalised_template_to_correct_sms_provider_and_persist(