mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-01 07:35:34 -05:00
merge from main
This commit is contained in:
@@ -7,11 +7,7 @@ from celery.exceptions import MaxRetriesExceededError
|
||||
|
||||
import app
|
||||
from app.celery import provider_tasks
|
||||
from app.celery.provider_tasks import (
|
||||
check_sms_delivery_receipt,
|
||||
deliver_email,
|
||||
deliver_sms,
|
||||
)
|
||||
from app.celery.provider_tasks import deliver_email, deliver_sms
|
||||
from app.clients.email import EmailClientNonRetryableException
|
||||
from app.clients.email.aws_ses import (
|
||||
AwsSesClientException,
|
||||
@@ -27,110 +23,10 @@ def test_should_have_decorated_tasks_functions():
|
||||
assert deliver_email.__wrapped__.__name__ == "deliver_email"
|
||||
|
||||
|
||||
def test_should_check_delivery_receipts_success(sample_notification, mocker):
|
||||
mocker.patch("app.delivery.send_to_providers.send_sms_to_provider")
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.is_localstack",
|
||||
return_value=False,
|
||||
)
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.check_sms",
|
||||
return_value=("success", "okay", "AT&T"),
|
||||
)
|
||||
mock_sanitize = mocker.patch(
|
||||
"app.celery.provider_tasks.sanitize_successful_notification_by_id"
|
||||
)
|
||||
check_sms_delivery_receipt(
|
||||
"message_id", sample_notification.id, "2024-10-20 00:00:00+0:00"
|
||||
)
|
||||
# This call should be made if the message was successfully delivered
|
||||
mock_sanitize.assert_called_once()
|
||||
|
||||
|
||||
def test_should_check_delivery_receipts_failure(sample_notification, mocker):
|
||||
mocker.patch("app.delivery.send_to_providers.send_sms_to_provider")
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.is_localstack",
|
||||
return_value=False,
|
||||
)
|
||||
mock_update = mocker.patch(
|
||||
"app.celery.provider_tasks.update_notification_status_by_id"
|
||||
)
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.check_sms",
|
||||
return_value=("failure", "not okay", "AT&T"),
|
||||
)
|
||||
mock_sanitize = mocker.patch(
|
||||
"app.celery.provider_tasks.sanitize_successful_notification_by_id"
|
||||
)
|
||||
check_sms_delivery_receipt(
|
||||
"message_id", sample_notification.id, "2024-10-20 00:00:00+0:00"
|
||||
)
|
||||
mock_sanitize.assert_not_called()
|
||||
mock_update.assert_called_once()
|
||||
|
||||
|
||||
def test_should_check_delivery_receipts_client_error(sample_notification, mocker):
|
||||
mocker.patch("app.delivery.send_to_providers.send_sms_to_provider")
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.is_localstack",
|
||||
return_value=False,
|
||||
)
|
||||
mock_update = mocker.patch(
|
||||
"app.celery.provider_tasks.update_notification_status_by_id"
|
||||
)
|
||||
error_response = {"Error": {"Code": "SomeCode", "Message": "Some Message"}}
|
||||
operation_name = "SomeOperation"
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.check_sms",
|
||||
side_effect=ClientError(error_response, operation_name),
|
||||
)
|
||||
mock_sanitize = mocker.patch(
|
||||
"app.celery.provider_tasks.sanitize_successful_notification_by_id"
|
||||
)
|
||||
try:
|
||||
check_sms_delivery_receipt(
|
||||
"message_id", sample_notification.id, "2024-10-20 00:00:00+0:00"
|
||||
)
|
||||
|
||||
assert 1 == 0
|
||||
except ClientError:
|
||||
mock_sanitize.assert_not_called()
|
||||
mock_update.assert_called_once()
|
||||
|
||||
|
||||
def test_should_check_delivery_receipts_ntfe(sample_notification, mocker):
|
||||
mocker.patch("app.delivery.send_to_providers.send_sms_to_provider")
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.is_localstack",
|
||||
return_value=False,
|
||||
)
|
||||
mock_update = mocker.patch(
|
||||
"app.celery.provider_tasks.update_notification_status_by_id"
|
||||
)
|
||||
mocker.patch(
|
||||
"app.celery.provider_tasks.aws_cloudwatch_client.check_sms",
|
||||
side_effect=NotificationTechnicalFailureException(),
|
||||
)
|
||||
mock_sanitize = mocker.patch(
|
||||
"app.celery.provider_tasks.sanitize_successful_notification_by_id"
|
||||
)
|
||||
try:
|
||||
check_sms_delivery_receipt(
|
||||
"message_id", sample_notification.id, "2024-10-20 00:00:00+0:00"
|
||||
)
|
||||
|
||||
assert 1 == 0
|
||||
except NotificationTechnicalFailureException:
|
||||
mock_sanitize.assert_not_called()
|
||||
mock_update.assert_called_once()
|
||||
|
||||
|
||||
def test_should_call_send_sms_to_provider_from_deliver_sms_task(
|
||||
sample_notification, mocker
|
||||
):
|
||||
mocker.patch("app.delivery.send_to_providers.send_sms_to_provider")
|
||||
mocker.patch("app.celery.provider_tasks.check_sms_delivery_receipt")
|
||||
|
||||
deliver_sms(sample_notification.id)
|
||||
app.delivery.send_to_providers.send_sms_to_provider.assert_called_with(
|
||||
|
||||
@@ -23,6 +23,8 @@ from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTick
|
||||
from tests.app import load_example_csv
|
||||
from tests.app.db import create_job, create_notification, create_template
|
||||
|
||||
CHECK_JOB_STATUS_TOO_OLD_MINUTES = 241
|
||||
|
||||
|
||||
def test_should_call_delete_codes_on_delete_verify_codes_task(
|
||||
notify_db_session, mocker
|
||||
@@ -108,8 +110,9 @@ def test_check_job_status_task_calls_process_incomplete_jobs(mocker, sample_temp
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
create_notification(template=sample_template, job=job)
|
||||
@@ -125,9 +128,10 @@ def test_check_job_status_task_calls_process_incomplete_jobs_when_scheduled_job_
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
check_job_status()
|
||||
@@ -142,8 +146,8 @@ def test_check_job_status_task_calls_process_incomplete_jobs_for_pending_schedul
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.PENDING,
|
||||
)
|
||||
|
||||
@@ -175,17 +179,19 @@ def test_check_job_status_task_calls_process_incomplete_jobs_for_multiple_jobs(
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
job_2 = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
check_job_status()
|
||||
@@ -200,23 +206,24 @@ def test_check_job_status_task_only_sends_old_tasks(mocker, sample_template):
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=29),
|
||||
created_at=utc_now() - timedelta(minutes=300),
|
||||
processing_started=utc_now() - timedelta(minutes=239),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(minutes=50),
|
||||
scheduled_for=utc_now() - timedelta(minutes=29),
|
||||
created_at=utc_now() - timedelta(minutes=300),
|
||||
scheduled_for=utc_now() - timedelta(minutes=239),
|
||||
job_status=JobStatus.PENDING,
|
||||
)
|
||||
check_job_status()
|
||||
@@ -230,16 +237,17 @@ def test_check_job_status_task_sets_jobs_to_error(mocker, sample_template):
|
||||
job = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
job_2 = create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=29),
|
||||
created_at=utc_now() - timedelta(minutes=300),
|
||||
processing_started=utc_now() - timedelta(minutes=239),
|
||||
job_status=JobStatus.IN_PROGRESS,
|
||||
)
|
||||
check_job_status()
|
||||
@@ -311,16 +319,18 @@ def test_check_job_status_task_does_not_raise_error(sample_template):
|
||||
create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(hours=2),
|
||||
scheduled_for=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(hours=5),
|
||||
scheduled_for=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.FINISHED,
|
||||
)
|
||||
create_job(
|
||||
template=sample_template,
|
||||
notification_count=3,
|
||||
created_at=utc_now() - timedelta(minutes=31),
|
||||
processing_started=utc_now() - timedelta(minutes=31),
|
||||
created_at=utc_now() - timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
processing_started=utc_now()
|
||||
- timedelta(minutes=CHECK_JOB_STATUS_TOO_OLD_MINUTES),
|
||||
job_status=JobStatus.FINISHED,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user