From 1b6f9505da8ae3515ef8135649ada12a5bdb30d0 Mon Sep 17 00:00:00 2001 From: Pea Tyczynska Date: Fri, 15 Oct 2021 14:07:01 +0100 Subject: [PATCH] Call `publish-govuk-alerts` task when alert expires The `auto-expire-broadcast-messages` task checks for expired broadcasts at five minute intervals. This change now calls the `publish-govuk-alerts` task in govuk-alerts if there are expired broadcasts so that the site is updated. Co-authored-by: Katie Smith --- app/celery/scheduled_tasks.py | 10 +++++++-- tests/app/celery/test_scheduled_tasks.py | 27 +++++++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/celery/scheduled_tasks.py b/app/celery/scheduled_tasks.py index 073624218..28ea285f4 100644 --- a/app/celery/scheduled_tasks.py +++ b/app/celery/scheduled_tasks.py @@ -16,7 +16,7 @@ from app.celery.tasks import ( process_job, process_row, ) -from app.config import QueueNames +from app.config import QueueNames, TaskNames from app.dao.invited_org_user_dao import ( delete_org_invitations_created_more_than_two_days_ago, ) @@ -322,9 +322,15 @@ def auto_expire_broadcast_messages(): expired_broadcasts = BroadcastMessage.query.filter( BroadcastMessage.finishes_at <= datetime.now(), BroadcastMessage.status == BroadcastStatusType.BROADCASTING, - ) + ).all() for broadcast in expired_broadcasts: broadcast.status = BroadcastStatusType.COMPLETED db.session.commit() + + if expired_broadcasts: + notify_celery.send_task( + name=TaskNames.PUBLISH_GOVUK_ALERTS, + queue=QueueNames.GOVUK_ALERTS + ) diff --git a/tests/app/celery/test_scheduled_tasks.py b/tests/app/celery/test_scheduled_tasks.py index ab13e6e97..32ae71394 100644 --- a/tests/app/celery/test_scheduled_tasks.py +++ b/tests/app/celery/test_scheduled_tasks.py @@ -24,7 +24,7 @@ from app.celery.scheduled_tasks import ( switch_current_sms_provider_on_slow_delivery, trigger_link_tests, ) -from app.config import Config, QueueNames +from app.config import Config, QueueNames, TaskNames from app.dao.jobs_dao import dao_get_job_by_id from app.dao.provider_details_dao import get_provider_details_by_identifier from app.models import ( @@ -668,24 +668,35 @@ def test_trigger_link_does_nothing_if_cbc_proxy_disabled( @freeze_time('2021-07-19 15:50') -@pytest.mark.parametrize('status, finishes_at, final_status', [ - (BroadcastStatusType.BROADCASTING, '2021-07-19 16:00', BroadcastStatusType.BROADCASTING), - (BroadcastStatusType.BROADCASTING, '2021-07-19 15:40', BroadcastStatusType.COMPLETED), - (BroadcastStatusType.BROADCASTING, None, BroadcastStatusType.BROADCASTING), - (BroadcastStatusType.PENDING_APPROVAL, None, BroadcastStatusType.PENDING_APPROVAL), - (BroadcastStatusType.CANCELLED, '2021-07-19 15:40', BroadcastStatusType.CANCELLED), +@pytest.mark.parametrize('status, finishes_at, final_status, should_call_publish_task', [ + (BroadcastStatusType.BROADCASTING, '2021-07-19 16:00', BroadcastStatusType.BROADCASTING, False), + (BroadcastStatusType.BROADCASTING, '2021-07-19 15:40', BroadcastStatusType.COMPLETED, True), + (BroadcastStatusType.BROADCASTING, None, BroadcastStatusType.BROADCASTING, False), + (BroadcastStatusType.PENDING_APPROVAL, None, BroadcastStatusType.PENDING_APPROVAL, False), + (BroadcastStatusType.CANCELLED, '2021-07-19 15:40', BroadcastStatusType.CANCELLED, False), ]) def test_auto_expire_broadcast_messages( + mocker, status, finishes_at, final_status, - sample_template + sample_template, + should_call_publish_task, ): message = create_broadcast_message( status=status, finishes_at=finishes_at, template=sample_template, ) + mock_celery = mocker.patch('app.celery.scheduled_tasks.notify_celery.send_task') auto_expire_broadcast_messages() assert message.status == final_status + + if should_call_publish_task: + mock_celery.assert_called_once_with( + name=TaskNames.PUBLISH_GOVUK_ALERTS, + queue=QueueNames.GOVUK_ALERTS + ) + else: + assert not mock_celery.called