Merge pull request #1248 from GSA/notify-apy-283

Need to remove priority logic
This commit is contained in:
Cliff Hill
2024-08-16 12:36:55 -04:00
committed by GitHub
14 changed files with 36 additions and 214 deletions

View File

@@ -2,11 +2,9 @@ from datetime import datetime, timedelta
import pytest
from freezegun import freeze_time
from sqlalchemy.sql import desc
from app import notification_provider_clients
from app.dao.provider_details_dao import (
_adjust_provider_priority,
_get_sms_providers_for_update,
dao_get_provider_stats,
dao_update_provider_details,
@@ -16,7 +14,6 @@ from app.dao.provider_details_dao import (
)
from app.enums import NotificationType, TemplateType
from app.models import ProviderDetails, ProviderDetailsHistory
from app.utils import utc_now
from tests.app.db import create_ft_billing, create_service, create_template
from tests.conftest import set_config
@@ -33,9 +30,6 @@ def set_primary_sms_provider(identifier):
get_alternative_sms_provider(identifier)
)
primary_provider.priority = 10
secondary_provider.priority = 20
dao_update_provider_details(primary_provider)
dao_update_provider_details(secondary_provider)
@@ -55,18 +49,6 @@ def test_can_get_sms_international_providers(notify_db_session):
assert all(prov.supports_international for prov in sms_providers)
def test_can_get_sms_providers_in_order_of_priority(notify_db_session):
providers = get_provider_details_by_notification_type(NotificationType.SMS, False)
priorities = [provider.priority for provider in providers]
assert priorities == sorted(priorities)
def test_can_get_email_providers_in_order_of_priority(notify_db_session):
providers = get_provider_details_by_notification_type(NotificationType.EMAIL)
assert providers[0].identifier == "ses"
def test_can_get_email_providers(notify_db_session):
assert len(get_provider_details_by_notification_type(NotificationType.EMAIL)) == 1
types = [
@@ -146,61 +128,6 @@ def test_get_alternative_sms_provider_fails_if_unrecognised():
get_alternative_sms_provider("ses")
@freeze_time("2016-01-01 00:30")
def test_adjust_provider_priority_sets_priority(
restore_provider_details,
notify_user,
sns_provider,
):
# need to update these manually to avoid triggering the `onupdate` clause of the updated_at column
ProviderDetails.query.filter(ProviderDetails.identifier == "sns").update(
{"updated_at": datetime.min}
)
_adjust_provider_priority(sns_provider, 50)
assert sns_provider.updated_at == utc_now()
assert sns_provider.created_by.id == notify_user.id
assert sns_provider.priority == 50
@freeze_time("2016-01-01 00:30")
def test_adjust_provider_priority_adds_history(
restore_provider_details,
notify_user,
sns_provider,
):
# need to update these manually to avoid triggering the `onupdate` clause of the updated_at column
ProviderDetails.query.filter(ProviderDetails.identifier == "sns").update(
{"updated_at": datetime.min}
)
old_provider_history_rows = (
ProviderDetailsHistory.query.filter(
ProviderDetailsHistory.id == sns_provider.id
)
.order_by(desc(ProviderDetailsHistory.version))
.all()
)
_adjust_provider_priority(sns_provider, 50)
updated_provider_history_rows = (
ProviderDetailsHistory.query.filter(
ProviderDetailsHistory.id == sns_provider.id
)
.order_by(desc(ProviderDetailsHistory.version))
.all()
)
assert len(updated_provider_history_rows) - len(old_provider_history_rows) == 1
assert (
updated_provider_history_rows[0].version - old_provider_history_rows[0].version
== 1
)
assert updated_provider_history_rows[0].priority == 50
@freeze_time("2016-01-01 01:00")
def test_get_sms_providers_for_update_returns_providers(restore_provider_details):
ProviderDetails.query.filter(ProviderDetails.identifier == "sns").update(

View File

@@ -42,7 +42,6 @@ def test_get_provider_contains_correct_fields(client, sample_template):
"created_by_name",
"display_name",
"identifier",
"priority",
"notification_type",
"active",
"updated_at",
@@ -53,24 +52,6 @@ def test_get_provider_contains_correct_fields(client, sample_template):
assert allowed_keys == set(json_resp[0].keys())
def test_should_be_able_to_update_priority(client, restore_provider_details):
provider = ProviderDetails.query.first()
update_resp = client.post(
"/provider-details/{}".format(provider.id),
headers=[
("Content-Type", "application/json"),
create_admin_authorization_header(),
],
data=json.dumps({"priority": 5}),
)
assert update_resp.status_code == 200
update_json = json.loads(update_resp.get_data(as_text=True))["provider_details"]
assert update_json["identifier"] == provider.identifier
assert update_json["priority"] == 5
assert provider.priority == 5
def test_should_be_able_to_update_status(client, restore_provider_details):
provider = ProviderDetails.query.first()
@@ -124,7 +105,6 @@ def test_get_provider_versions_contains_correct_fields(client, notify_db_session
"created_by",
"display_name",
"identifier",
"priority",
"notification_type",
"active",
"version",

View File

@@ -11,7 +11,7 @@ from app.dao import notifications_dao
from app.dao.api_key_dao import save_model_api_key
from app.dao.services_dao import dao_update_service
from app.dao.templates_dao import dao_get_all_templates_for_service, dao_update_template
from app.enums import KeyType, NotificationType, TemplateProcessType, TemplateType
from app.enums import KeyType, NotificationType, TemplateType
from app.errors import InvalidRequest, RateLimitError
from app.models import ApiKey, Notification, NotificationHistory, Template
from app.service.send_notification import send_one_off_notification
@@ -1113,49 +1113,6 @@ def test_create_template_raises_invalid_request_when_content_too_large(
}
@pytest.mark.parametrize(
"notification_type,send_to",
[
(NotificationType.SMS, "2028675309"),
(
NotificationType.EMAIL,
"sample@email.com",
),
],
)
def test_send_notification_uses_priority_queue_when_template_is_marked_as_priority(
client,
sample_service,
mocker,
notification_type,
send_to,
):
sample = create_template(
sample_service,
template_type=notification_type,
process_type=TemplateProcessType.PRIORITY,
)
mocked = mocker.patch(
f"app.celery.provider_tasks.deliver_{notification_type}.apply_async"
)
data = {"to": send_to, "template": str(sample.id)}
auth_header = create_service_authorization_header(service_id=sample.service_id)
response = client.post(
path=f"/notifications/{notification_type}",
data=json.dumps(data),
headers=[("Content-Type", "application/json"), auth_header],
)
response_data = json.loads(response.data)["data"]
notification_id = response_data["notification"]["id"]
assert response.status_code == 201
mocked.assert_called_once_with([notification_id], queue="priority-tasks")
@pytest.mark.parametrize(
"notification_type, send_to",
[

View File

@@ -3,14 +3,12 @@ from unittest.mock import Mock
import pytest
from app.config import QueueNames
from app.dao.service_guest_list_dao import dao_add_and_commit_guest_list_contacts
from app.enums import (
KeyType,
NotificationType,
RecipientType,
ServicePermissionType,
TemplateProcessType,
TemplateType,
)
from app.errors import BadRequestError
@@ -161,24 +159,6 @@ def test_send_one_off_notification_calls_persist_correctly_for_email(
)
def test_send_one_off_notification_honors_priority(
notify_db_session, persist_mock, celery_mock
):
service = create_service()
template = create_template(service=service)
template.process_type = TemplateProcessType.PRIORITY
post_data = {
"template_id": str(template.id),
"to": "202-867-5309",
"created_by": str(service.created_by_id),
}
send_one_off_notification(service.id, post_data)
assert celery_mock.call_args[1]["queue"] == QueueNames.PRIORITY
def test_send_one_off_notification_raises_if_invalid_recipient(notify_db_session):
service = create_service()
template = create_template(service=service)

View File

@@ -4,10 +4,9 @@ from app.config import QueueNames
def test_queue_names_all_queues_correct():
# Need to ensure that all_queues() only returns queue names used in API
queues = QueueNames.all_queues()
assert len(queues) == 15
assert len(queues) == 14
assert set(
[
QueueNames.PRIORITY,
QueueNames.PERIODIC,
QueueNames.DATABASE,
QueueNames.SEND_SMS,