mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-16 20:48:37 -04:00
Trigger task to publish alerts when sending or cancelling alert
When we send or cancel a broadcast message, we now trigger a task in govuk-alerts repo that polls our API for alerts and publishes a fresh list of alerts. Co-authored-by: Pea Tyczynska <pea.tyczynska@digital.cabinet-office.gov.uk>
This commit is contained in:
@@ -7,7 +7,7 @@ from notifications_utils.clients.zendesk.zendesk_client import (
|
|||||||
|
|
||||||
from app import cbc_proxy_client, notify_celery, zendesk_client
|
from app import cbc_proxy_client, notify_celery, zendesk_client
|
||||||
from app.clients.cbc_proxy import CBCProxyRetryableException
|
from app.clients.cbc_proxy import CBCProxyRetryableException
|
||||||
from app.config import QueueNames
|
from app.config import QueueNames, TaskNames
|
||||||
from app.dao.broadcast_message_dao import (
|
from app.dao.broadcast_message_dao import (
|
||||||
create_broadcast_provider_message,
|
create_broadcast_provider_message,
|
||||||
dao_get_broadcast_event_by_id,
|
dao_get_broadcast_event_by_id,
|
||||||
@@ -157,6 +157,11 @@ def send_broadcast_event(broadcast_event_id):
|
|||||||
zendesk_client.send_ticket_to_zendesk(ticket)
|
zendesk_client.send_ticket_to_zendesk(ticket)
|
||||||
current_app.logger.error(message)
|
current_app.logger.error(message)
|
||||||
|
|
||||||
|
notify_celery.send_task(
|
||||||
|
name=TaskNames.PUBLISH_GOVUK_ALERTS,
|
||||||
|
queue=QueueNames.GOVUK_ALERTS
|
||||||
|
)
|
||||||
|
|
||||||
for provider in broadcast_event.service.get_available_broadcast_providers():
|
for provider in broadcast_event.service.get_available_broadcast_providers():
|
||||||
send_broadcast_provider_message.apply_async(
|
send_broadcast_provider_message.apply_async(
|
||||||
kwargs={'broadcast_event_id': broadcast_event_id, 'provider': provider},
|
kwargs={'broadcast_event_id': broadcast_event_id, 'provider': provider},
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class QueueNames(object):
|
|||||||
SAVE_API_EMAIL = 'save-api-email-tasks'
|
SAVE_API_EMAIL = 'save-api-email-tasks'
|
||||||
SAVE_API_SMS = 'save-api-sms-tasks'
|
SAVE_API_SMS = 'save-api-sms-tasks'
|
||||||
BROADCASTS = 'broadcast-tasks'
|
BROADCASTS = 'broadcast-tasks'
|
||||||
|
GOVUK_ALERTS = 'govuk-alerts'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def all_queues():
|
def all_queues():
|
||||||
@@ -75,6 +76,7 @@ class TaskNames(object):
|
|||||||
SCAN_FILE = 'scan-file'
|
SCAN_FILE = 'scan-file'
|
||||||
SANITISE_LETTER = 'sanitise-and-upload-letter'
|
SANITISE_LETTER = 'sanitise-and-upload-letter'
|
||||||
CREATE_PDF_FOR_TEMPLATED_LETTER = 'create-pdf-for-templated-letter'
|
CREATE_PDF_FOR_TEMPLATED_LETTER = 'create-pdf-for-templated-letter'
|
||||||
|
PUBLISH_GOVUK_ALERTS = 'publish-govuk-alerts'
|
||||||
|
|
||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ from app.celery.broadcast_message_tasks import (
|
|||||||
trigger_link_test,
|
trigger_link_test,
|
||||||
)
|
)
|
||||||
from app.clients.cbc_proxy import CBCProxyRetryableException
|
from app.clients.cbc_proxy import CBCProxyRetryableException
|
||||||
|
from app.config import QueueNames, TaskNames
|
||||||
from app.models import (
|
from app.models import (
|
||||||
BROADCAST_TYPE,
|
BROADCAST_TYPE,
|
||||||
BroadcastEventMessageType,
|
BroadcastEventMessageType,
|
||||||
@@ -37,6 +38,9 @@ def test_send_broadcast_event_queues_up_for_active_providers(mocker, notify_api,
|
|||||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||||
event = create_broadcast_event(broadcast_message)
|
event = create_broadcast_event(broadcast_message)
|
||||||
|
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
mock_send_ticket_to_zendesk = mocker.patch(
|
mock_send_ticket_to_zendesk = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
||||||
autospec=True,
|
autospec=True,
|
||||||
@@ -57,6 +61,35 @@ def test_send_broadcast_event_queues_up_for_active_providers(mocker, notify_api,
|
|||||||
assert mock_send_ticket_to_zendesk.called is False
|
assert mock_send_ticket_to_zendesk.called is False
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('message_status', [
|
||||||
|
BroadcastStatusType.BROADCASTING,
|
||||||
|
BroadcastStatusType.CANCELLED,
|
||||||
|
])
|
||||||
|
def test_send_broadcast_event_calls_publish_govuk_alerts_task(
|
||||||
|
mocker, notify_api, sample_broadcast_service, message_status
|
||||||
|
):
|
||||||
|
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||||
|
broadcast_message = create_broadcast_message(template, status=message_status)
|
||||||
|
event = create_broadcast_event(broadcast_message)
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
||||||
|
autospec=True,
|
||||||
|
)
|
||||||
|
mocker.patch(
|
||||||
|
'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_celery = mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
|
with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
|
||||||
|
send_broadcast_event(event.id)
|
||||||
|
|
||||||
|
mock_celery.assert_called_once_with(
|
||||||
|
name=TaskNames.PUBLISH_GOVUK_ALERTS,
|
||||||
|
queue=QueueNames.GOVUK_ALERTS
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_send_broadcast_event_only_sends_to_one_provider_if_set_on_service(
|
def test_send_broadcast_event_only_sends_to_one_provider_if_set_on_service(
|
||||||
mocker,
|
mocker,
|
||||||
notify_db,
|
notify_db,
|
||||||
@@ -71,6 +104,7 @@ def test_send_broadcast_event_only_sends_to_one_provider_if_set_on_service(
|
|||||||
mock_send_broadcast_provider_message = mocker.patch(
|
mock_send_broadcast_provider_message = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
|
'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
|
||||||
)
|
)
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
|
with set_config(notify_api, 'ENABLED_CBCS', ['ee', 'vodafone']):
|
||||||
send_broadcast_event(event.id)
|
send_broadcast_event(event.id)
|
||||||
@@ -91,6 +125,8 @@ def test_send_broadcast_event_does_nothing_if_provider_set_on_service_isnt_enabl
|
|||||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||||
event = create_broadcast_event(broadcast_message)
|
event = create_broadcast_event(broadcast_message)
|
||||||
|
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
mock_send_broadcast_provider_message = mocker.patch(
|
mock_send_broadcast_provider_message = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
|
'app.celery.broadcast_message_tasks.send_broadcast_provider_message',
|
||||||
)
|
)
|
||||||
@@ -120,6 +156,8 @@ def test_send_broadcast_event_creates_zendesk(
|
|||||||
)
|
)
|
||||||
event = create_broadcast_event(broadcast_message)
|
event = create_broadcast_event(broadcast_message)
|
||||||
mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
|
mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
mock_send_ticket_to_zendesk = mocker.patch(
|
mock_send_ticket_to_zendesk = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
||||||
autospec=True,
|
autospec=True,
|
||||||
@@ -160,6 +198,9 @@ def test_send_broadcast_event_doesnt_create_zendesk_when_cancelling(mocker, noti
|
|||||||
)
|
)
|
||||||
create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.ALERT)
|
create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.ALERT)
|
||||||
cancel_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.CANCEL)
|
cancel_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.CANCEL)
|
||||||
|
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
mock_send_ticket_to_zendesk = mocker.patch(
|
mock_send_ticket_to_zendesk = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
||||||
autospec=True,
|
autospec=True,
|
||||||
@@ -176,6 +217,9 @@ def test_send_broadcast_event_doesnt_create_zendesk_on_staging(mocker, notify_ap
|
|||||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||||
event = create_broadcast_event(broadcast_message)
|
event = create_broadcast_event(broadcast_message)
|
||||||
|
|
||||||
|
mocker.patch('app.celery.broadcast_message_tasks.notify_celery.send_task')
|
||||||
|
|
||||||
mock_send_ticket_to_zendesk = mocker.patch(
|
mock_send_ticket_to_zendesk = mocker.patch(
|
||||||
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
|
||||||
autospec=True,
|
autospec=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user