From 69912b9938c2479cc8093c715241f0ef4af41904 Mon Sep 17 00:00:00 2001 From: Kyle MacMillan <16893311+k-macmillan@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:25:44 -0500 Subject: [PATCH] #2105 - Updated Twilio Status Query (#2289) --- app/celery/twilio_tasks.py | 19 +++++++++++-------- tests/app/celery/test_twilio_tasks.py | 9 ++++++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/celery/twilio_tasks.py b/app/celery/twilio_tasks.py index 953b63b954..a6cc6f50f4 100644 --- a/app/celery/twilio_tasks.py +++ b/app/celery/twilio_tasks.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta, timezone from flask import current_app -from sqlalchemy import select +from sqlalchemy import and_, select from app import db, notify_celery, twilio_sms_client from app.celery.exceptions import NonRetryableException @@ -15,15 +15,18 @@ def _get_notifications() -> list: current_app.logger.info('Getting notifications to update status') one_hour_ago = datetime.now(timezone.utc) - timedelta(hours=1) stmt = ( - select(Notification) - .where(Notification.notification_type == 'sms') - .where(Notification.sent_by == 'twilio') - .where(~Notification.status.in_(NOTIFICATION_STATUS_TYPES_COMPLETED)) - .where(Notification.created_at < one_hour_ago) - .order_by(Notification.created_at) + select(Notification.id, Notification.status, Notification.reference) + .where( + and_( + Notification.notification_type == 'sms', + Notification.created_at < one_hour_ago, + ~Notification.status.in_(NOTIFICATION_STATUS_TYPES_COMPLETED), + Notification.sent_by == 'twilio', + ) + ) .limit(current_app.config['TWILIO_STATUS_PAGE_SIZE']) ) - return db.session.scalars(stmt).all() + return db.session.execute(stmt).all() @notify_celery.task(name='update-twilio-status') diff --git a/tests/app/celery/test_twilio_tasks.py b/tests/app/celery/test_twilio_tasks.py index f8680bf026..b06fa54a81 100644 --- a/tests/app/celery/test_twilio_tasks.py +++ b/tests/app/celery/test_twilio_tasks.py @@ -14,6 +14,7 @@ NOTIFICATION_TEMPORARY_FAILURE, NOTIFICATION_PERMANENT_FAILURE, ) +from app.models import Notification @pytest.mark.parametrize( @@ -68,9 +69,11 @@ def test_get_notifications_datefilter(sample_notification, minute_offset, expect def test_update_twilio_status_with_results(mocker, sample_notification): """Test that update_twilio_status() calls twilio_sms_client.update_notification_status_override() with the notification reference when there are notifications to update.""" - notification = sample_notification(status=NOTIFICATION_CREATED, sent_by='twilio') - - mocker.patch('app.celery.twilio_tasks._get_notifications', return_value=[notification]) + notification: Notification = sample_notification( + status=NOTIFICATION_SENDING, + created_at=datetime.now(timezone.utc) - timedelta(hours=3), + sent_by='twilio', + ) with patch( 'app.celery.twilio_tasks.twilio_sms_client.update_notification_status_override'