Merge pull request #3334 from alphagov/new-zendesk-form

Use the new Zendesk form for all tickets
This commit is contained in:
Katie Smith
2021-09-29 14:09:11 +01:00
committed by GitHub
8 changed files with 184 additions and 77 deletions
+11 -3
View File
@@ -1,6 +1,9 @@
from datetime import datetime from datetime import datetime
from flask import current_app from flask import current_app
from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
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
@@ -142,11 +145,16 @@ def send_broadcast_event(broadcast_event_id):
'If this alert is not expected refer to the runbook for instructions.', 'If this alert is not expected refer to the runbook for instructions.',
'https://docs.google.com/document/d/1J99yOlfp4nQz6et0w5oJVqi-KywtIXkxrEIyq_g2XUs', 'https://docs.google.com/document/d/1J99yOlfp4nQz6et0w5oJVqi-KywtIXkxrEIyq_g2XUs',
]) ])
zendesk_client.create_ticket( ticket = NotifySupportTicket(
subject="Live broadcast sent", subject='Live broadcast sent',
message=message, message=message,
ticket_type=zendesk_client.TYPE_INCIDENT, ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True,
org_id=current_app.config['BROADCAST_ORGANISATION_ID'],
org_type='central',
service_id=str(broadcast_message.service_id)
) )
zendesk_client.send_ticket_to_zendesk(ticket)
current_app.logger.error(message) current_app.logger.error(message)
for provider in broadcast_event.service.get_available_broadcast_providers(): for provider in broadcast_event.service.get_available_broadcast_providers():
+15 -5
View File
@@ -2,6 +2,9 @@ from datetime import datetime, timedelta
import pytz import pytz
from flask import current_app from flask import current_app
from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
from sqlalchemy import func from sqlalchemy import func
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
@@ -179,11 +182,15 @@ def raise_alert_if_letter_notifications_still_sending():
# Only send alerts in production # Only send alerts in production
if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']:
message += ". Resolve using https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-letters-still-in-sending" # noqa message += ". Resolve using https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-letters-still-in-sending" # noqa
zendesk_client.create_ticket(
subject="[{}] Letters still sending".format(current_app.config['NOTIFY_ENVIRONMENT']), ticket = NotifySupportTicket(
subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] Letters still sending",
message=message, message=message,
ticket_type=zendesk_client.TYPE_INCIDENT ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True,
ticket_categories=['notify_letters']
) )
zendesk_client.send_ticket_to_zendesk(ticket)
else: else:
current_app.logger.info(message) current_app.logger.info(message)
@@ -250,11 +257,14 @@ def letter_raise_alert_if_no_ack_file_for_zip():
if len(zip_file_set - ack_file_set) > 0: if len(zip_file_set - ack_file_set) > 0:
if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']:
zendesk_client.create_ticket( ticket = NotifySupportTicket(
subject="Letter acknowledge error", subject="Letter acknowledge error",
message=message, message=message,
ticket_type=zendesk_client.TYPE_INCIDENT ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True,
ticket_categories=['notify_letters']
) )
zendesk_client.send_ticket_to_zendesk(ticket)
current_app.logger.error(message) current_app.logger.error(message)
if len(ack_file_set - zip_file_set) > 0: if len(ack_file_set - zip_file_set) > 0:
+20 -11
View File
@@ -1,6 +1,9 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from flask import current_app from flask import current_app
from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
from sqlalchemy import between from sqlalchemy import between
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
@@ -214,11 +217,14 @@ def check_if_letters_still_pending_virus_check():
Notifications: {}""".format(len(letters), sorted(letter_ids)) Notifications: {}""".format(len(letters), sorted(letter_ids))
if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']:
zendesk_client.create_ticket( ticket = NotifySupportTicket(
subject="[{}] Letters still pending virus check".format(current_app.config['NOTIFY_ENVIRONMENT']), subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] Letters still pending virus check",
message=msg, message=msg,
ticket_type=zendesk_client.TYPE_INCIDENT ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True,
ticket_categories=['notify_letters']
) )
zendesk_client.send_ticket_to_zendesk(ticket)
current_app.logger.error(msg) current_app.logger.error(msg)
@@ -233,11 +239,14 @@ def check_if_letters_still_in_created():
"#deal-with-Letters-still-in-created.".format(len(letters)) "#deal-with-Letters-still-in-created.".format(len(letters))
if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']:
zendesk_client.create_ticket( ticket = NotifySupportTicket(
subject="[{}] Letters still in 'created' status".format(current_app.config['NOTIFY_ENVIRONMENT']), subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] Letters still in 'created' status",
message=msg, message=msg,
ticket_type=zendesk_client.TYPE_INCIDENT ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True,
ticket_categories=['notify_letters']
) )
zendesk_client.send_ticket_to_zendesk(ticket)
current_app.logger.error(msg) current_app.logger.error(msg)
@@ -292,13 +301,13 @@ def check_for_services_with_high_failure_rates_or_sending_to_tv_numbers():
if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']:
message += ("\nYou can find instructions for this ticket in our manual:\n" message += ("\nYou can find instructions for this ticket in our manual:\n"
"https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#Deal-with-services-with-high-failure-rates-or-sending-sms-to-tv-numbers") # noqa "https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#Deal-with-services-with-high-failure-rates-or-sending-sms-to-tv-numbers") # noqa
zendesk_client.create_ticket( ticket = NotifySupportTicket(
subject="[{}] High failure rates for sms spotted for services".format( subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] High failure rates for sms spotted for services",
current_app.config['NOTIFY_ENVIRONMENT']
),
message=message, message=message,
ticket_type=zendesk_client.TYPE_INCIDENT ticket_type=NotifySupportTicket.TYPE_INCIDENT,
technical_ticket=True
) )
zendesk_client.send_ticket_to_zendesk(ticket)
@notify_celery.task(name='trigger-link-tests') @notify_celery.task(name='trigger-link-tests')
+1 -1
View File
@@ -38,7 +38,7 @@ notifications-python-client==6.0.2
# PaaS # PaaS
awscli-cwlogs==1.4.6 awscli-cwlogs==1.4.6
git+https://github.com/alphagov/notifications-utils.git@46.0.0#egg=notifications-utils==46.0.0 git+https://github.com/alphagov/notifications-utils.git@46.1.0#egg=notifications-utils==46.1.0
# gds-metrics requires prometheseus 0.2.0, override that requirement as 0.7.1 brings significant performance gains # gds-metrics requires prometheseus 0.2.0, override that requirement as 0.7.1 brings significant performance gains
prometheus-client==0.10.1 prometheus-client==0.10.1
+10 -11
View File
@@ -40,7 +40,7 @@ notifications-python-client==6.0.2
# PaaS # PaaS
awscli-cwlogs==1.4.6 awscli-cwlogs==1.4.6
git+https://github.com/alphagov/notifications-utils.git@46.0.0#egg=notifications-utils==46.0.0 git+https://github.com/alphagov/notifications-utils.git@46.1.0#egg=notifications-utils==46.1.0
# gds-metrics requires prometheseus 0.2.0, override that requirement as 0.7.1 brings significant performance gains # gds-metrics requires prometheseus 0.2.0, override that requirement as 0.7.1 brings significant performance gains
prometheus-client==0.10.1 prometheus-client==0.10.1
@@ -51,41 +51,40 @@ alembic==1.6.5
amqp==1.4.9 amqp==1.4.9
anyjson==0.3.3 anyjson==0.3.3
attrs==21.2.0 attrs==21.2.0
awscli==1.20.8 awscli==1.20.46
bcrypt==3.2.0 bcrypt==3.2.0
billiard==3.3.0.23 billiard==3.3.0.23
bleach==3.3.0 bleach==3.3.0
blinker==1.4 blinker==1.4
boto==2.49.0 boto==2.49.0
boto3==1.18.8 boto3==1.18.46
botocore==1.21.8 botocore==1.21.46
certifi==2021.5.30 certifi==2021.5.30
charset-normalizer==2.0.3 charset-normalizer==2.0.6
click==8.0.1 click==8.0.1
colorama==0.4.3 colorama==0.4.3
dnspython==1.16.0 dnspython==1.16.0
docutils==0.15.2 docutils==0.15.2
flask-redis==0.4.0 flask-redis==0.4.0
geojson==2.5.0 geojson==2.5.0
govuk-bank-holidays==0.9 govuk-bank-holidays==0.10
greenlet==1.1.0 greenlet==1.1.1
idna==3.2 idna==3.2
Jinja2==3.0.1 Jinja2==3.0.1
jmespath==0.10.0 jmespath==0.10.0
kombu==3.0.37 kombu==3.0.37
Mako==1.1.4 Mako==1.1.5
MarkupSafe==2.0.1 MarkupSafe==2.0.1
mistune==0.8.4 mistune==0.8.4
orderedset==2.0.3 orderedset==2.0.3
packaging==21.0 packaging==21.0
phonenumbers==8.12.28 phonenumbers==8.12.31
pyasn1==0.4.8 pyasn1==0.4.8
pycparser==2.20 pycparser==2.20
pyparsing==2.4.7 pyparsing==2.4.7
PyPDF2==1.26.0 PyPDF2==1.26.0
pyrsistent==0.18.0 pyrsistent==0.18.0
python-dateutil==2.8.2 python-dateutil==2.8.2
python-editor==1.0.4
python-json-logger==2.0.2 python-json-logger==2.0.2
pytz==2021.1 pytz==2021.1
PyYAML==5.4.1 PyYAML==5.4.1
@@ -98,5 +97,5 @@ six==1.16.0
smartypants==2.0.1 smartypants==2.0.1
soupsieve==2.2.1 soupsieve==2.2.1
statsd==3.3.0 statsd==3.3.0
urllib3==1.26.6 urllib3==1.26.7
webencodings==0.5.1 webencodings==0.5.1
@@ -3,7 +3,11 @@ from unittest.mock import ANY, Mock, call
import pytest import pytest
from celery.exceptions import Retry from celery.exceptions import Retry
from flask import current_app
from freezegun import freeze_time from freezegun import freeze_time
from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
from app.celery.broadcast_message_tasks import ( from app.celery.broadcast_message_tasks import (
BroadcastIntegrityError, BroadcastIntegrityError,
@@ -33,8 +37,10 @@ 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)
mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket") mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
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',
) )
@@ -48,7 +54,7 @@ def test_send_broadcast_event_queues_up_for_active_providers(mocker, notify_api,
] ]
# we're on test env so this isn't called # we're on test env so this isn't called
assert mock_create_ticket.called is False assert mock_send_ticket_to_zendesk.called is False
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(
@@ -113,22 +119,36 @@ def test_send_broadcast_event_creates_zendesk(
areas={**area_data, 'simple_polygons': []}, areas={**area_data, 'simple_polygons': []},
) )
event = create_broadcast_event(broadcast_message) event = create_broadcast_event(broadcast_message)
mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket") mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = 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') mocker.patch('app.celery.broadcast_message_tasks.send_broadcast_provider_message')
with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'): with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'):
send_broadcast_event(event.id) send_broadcast_event(event.id)
assert mock_create_ticket.call_count == 1 mock_create_ticket.assert_called_once_with(
zendesk_args = mock_create_ticket.call_args[1] ANY,
assert zendesk_args['ticket_type'] == 'incident' subject='Live broadcast sent',
message=ANY,
ticket_type='incident',
technical_ticket=True,
org_id=current_app.config['BROADCAST_ORGANISATION_ID'],
org_type='central',
service_id=str(sample_broadcast_service.id)
)
ticket_message = mock_create_ticket.call_args_list[0][1]['message']
assert str(broadcast_message.id) in zendesk_args['message'] assert str(broadcast_message.id) in ticket_message
assert 'channel severe' in zendesk_args['message'] assert 'channel severe' in ticket_message
assert f"areas {expected_message}" in zendesk_args['message'] assert f"areas {expected_message}" in ticket_message
# the start of the content from the broadcast template # the start of the content from the broadcast template
assert "Dear Sir/Madam" in zendesk_args['message'] assert "Dear Sir/Madam" in ticket_message
mock_send_ticket_to_zendesk.assert_called_once()
def test_send_broadcast_event_doesnt_create_zendesk_when_cancelling(mocker, notify_api, sample_broadcast_service): def test_send_broadcast_event_doesnt_create_zendesk_when_cancelling(mocker, notify_api, sample_broadcast_service):
@@ -140,22 +160,26 @@ 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)
mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket") mock_send_ticket_to_zendesk = 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') mocker.patch('app.celery.broadcast_message_tasks.send_broadcast_provider_message')
with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'): with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'):
send_broadcast_event(cancel_event.id) send_broadcast_event(cancel_event.id)
assert mock_create_ticket.called is False assert mock_send_ticket_to_zendesk.called is False
def test_send_broadcast_event_doesnt_create_zendesk_on_staging(mocker, notify_api, sample_broadcast_service): def test_send_broadcast_event_doesnt_create_zendesk_on_staging(mocker, notify_api, sample_broadcast_service):
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)
mock_create_ticket = mocker.patch("app.celery.broadcast_message_tasks.zendesk_client.create_ticket") mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.broadcast_message_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
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',
) )
@@ -164,7 +188,7 @@ def test_send_broadcast_event_doesnt_create_zendesk_on_staging(mocker, notify_ap
send_broadcast_event(event.id) send_broadcast_event(event.id)
assert mock_send_broadcast_provider_message.apply_async.called is True assert mock_send_broadcast_provider_message.apply_async.called is True
assert mock_create_ticket.called is False assert mock_send_ticket_to_zendesk.called is False
@freeze_time('2020-08-01 12:00') @freeze_time('2020-08-01 12:00')
+40 -17
View File
@@ -1,11 +1,13 @@
from datetime import date, datetime, timedelta from datetime import date, datetime, timedelta
from unittest.mock import call from unittest.mock import ANY, call
import pytest import pytest
import pytz import pytz
from flask import current_app from flask import current_app
from freezegun import freeze_time from freezegun import freeze_time
from notifications_utils.clients.zendesk.zendesk_client import ZendeskClient from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
from app.celery import nightly_tasks from app.celery import nightly_tasks
from app.celery.nightly_tasks import ( from app.celery.nightly_tasks import (
@@ -232,34 +234,47 @@ def test_should_call_delete_inbound_sms(notify_api, mocker):
assert nightly_tasks.delete_inbound_sms_older_than_retention.call_count == 1 assert nightly_tasks.delete_inbound_sms_older_than_retention.call_count == 1
def test_create_ticket_if_letter_notifications_still_sending(mocker): def test_create_ticket_if_letter_notifications_still_sending(notify_api, mocker):
mock_get_letters = mocker.patch( mock_get_letters = mocker.patch(
"app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be" "app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be"
) )
mock_get_letters.return_value = 1, date(2018, 1, 15) mock_get_letters.return_value = 1, date(2018, 1, 15)
mock_create_ticket = mocker.patch("app.celery.nightly_tasks.zendesk_client.create_ticket") mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
raise_alert_if_letter_notifications_still_sending() 'app.celery.nightly_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
mock_create_ticket.assert_called_once_with(
subject="[test] Letters still sending",
message="There are 1 letters in the 'sending' state from Monday 15 January. Resolve using https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-letters-still-in-sending", # noqa
ticket_type=ZendeskClient.TYPE_INCIDENT
) )
raise_alert_if_letter_notifications_still_sending()
mock_create_ticket.assert_called_once_with(
ANY,
subject='[test] Letters still sending',
message=(
"There are 1 letters in the 'sending' state from Monday 15 January. Resolve using "
"https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-letters-still-in-sending"
),
ticket_type='incident',
technical_ticket=True,
ticket_categories=['notify_letters']
)
mock_send_ticket_to_zendesk.assert_called_once()
def test_dont_create_ticket_if_letter_notifications_not_still_sending(mocker):
def test_dont_create_ticket_if_letter_notifications_not_still_sending(notify_api, mocker):
mock_get_letters = mocker.patch( mock_get_letters = mocker.patch(
"app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be" "app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be"
) )
mock_get_letters.return_value = 0, None mock_get_letters.return_value = 0, None
mock_create_ticket = mocker.patch("app.celery.nightly_tasks.zendesk_client.create_ticket") mock_send_ticket_to_zendesk = mocker.patch(
"app.celery.nightly_tasks.zendesk_client.send_ticket_to_zendesk",
autospec=True
)
raise_alert_if_letter_notifications_still_sending() raise_alert_if_letter_notifications_still_sending()
mock_create_ticket.assert_not_called() mock_send_ticket_to_zendesk.assert_not_called()
@freeze_time("Thursday 17th January 2018 17:00") @freeze_time("Thursday 17th January 2018 17:00")
@@ -359,7 +374,11 @@ def test_letter_raise_alert_if_no_ack_file_for_zip_does_not_raise_when_files_mat
@freeze_time('2018-01-11T23:00:00') @freeze_time('2018-01-11T23:00:00')
def test_letter_raise_alert_if_ack_files_not_match_zip_list(mocker, notify_db): def test_letter_raise_alert_if_ack_files_not_match_zip_list(mocker, notify_db):
mock_file_list = mocker.patch("app.aws.s3.get_list_of_files_by_suffix", side_effect=mock_s3_get_list_diff) mock_file_list = mocker.patch("app.aws.s3.get_list_of_files_by_suffix", side_effect=mock_s3_get_list_diff)
mock_zendesk = mocker.patch("app.celery.nightly_tasks.zendesk_client.create_ticket") mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.nightly_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
letter_raise_alert_if_no_ack_file_for_zip() letter_raise_alert_if_no_ack_file_for_zip()
@@ -372,11 +391,15 @@ def test_letter_raise_alert_if_ack_files_not_match_zip_list(mocker, notify_db):
current_app.config['LETTERS_PDF_BUCKET_NAME'], current_app.config['LETTERS_PDF_BUCKET_NAME'],
datetime.utcnow().strftime('%Y-%m-%d') + '/zips_sent', datetime.utcnow().strftime('%Y-%m-%d') + '/zips_sent',
current_app.config['DVLA_RESPONSE_BUCKET_NAME']) current_app.config['DVLA_RESPONSE_BUCKET_NAME'])
mock_zendesk.assert_called_once_with( mock_create_ticket.assert_called_once_with(
ANY,
subject="Letter acknowledge error", subject="Letter acknowledge error",
message=message, message=message,
ticket_type='incident' ticket_type='incident',
technical_ticket=True,
ticket_categories=['notify_letters']
) )
mock_send_ticket_to_zendesk.assert_called_once()
@freeze_time('2018-01-11T23:00:00') @freeze_time('2018-01-11T23:00:00')
+46 -12
View File
@@ -1,10 +1,13 @@
from collections import namedtuple from collections import namedtuple
from datetime import datetime, timedelta from datetime import datetime, timedelta
from unittest import mock from unittest import mock
from unittest.mock import call from unittest.mock import ANY, call
import pytest import pytest
from freezegun import freeze_time from freezegun import freeze_time
from notifications_utils.clients.zendesk.zendesk_client import (
NotifySupportTicket,
)
from app.celery import scheduled_tasks from app.celery import scheduled_tasks
from app.celery.scheduled_tasks import ( from app.celery.scheduled_tasks import (
@@ -364,7 +367,11 @@ def test_check_job_status_task_does_not_raise_error(sample_template):
@freeze_time("2019-05-30 14:00:00") @freeze_time("2019-05-30 14:00:00")
def test_check_if_letters_still_pending_virus_check(mocker, sample_letter_template): def test_check_if_letters_still_pending_virus_check(mocker, sample_letter_template):
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error') mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error')
mock_create_ticket = mocker.patch('app.celery.nightly_tasks.zendesk_client.create_ticket') mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.scheduled_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
create_notification(template=sample_letter_template, create_notification(template=sample_letter_template,
status=NOTIFICATION_PENDING_VIRUS_CHECK, status=NOTIFICATION_PENDING_VIRUS_CHECK,
@@ -391,17 +398,25 @@ def test_check_if_letters_still_pending_virus_check(mocker, sample_letter_templa
Notifications: {}""".format(id_references) Notifications: {}""".format(id_references)
mock_logger.assert_called_once_with(message) mock_logger.assert_called_once_with(message)
mock_create_ticket.assert_called_with( mock_create_ticket.assert_called_once_with(
message=message, ANY,
subject='[test] Letters still pending virus check', subject='[test] Letters still pending virus check',
ticket_type='incident' message=message,
ticket_type='incident',
technical_ticket=True,
ticket_categories=['notify_letters']
) )
mock_send_ticket_to_zendesk.assert_called_once()
@freeze_time("2019-05-30 14:00:00") @freeze_time("2019-05-30 14:00:00")
def test_check_if_letters_still_in_created_during_bst(mocker, sample_letter_template): def test_check_if_letters_still_in_created_during_bst(mocker, sample_letter_template):
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error') mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error')
mock_create_ticket = mocker.patch('app.celery.nightly_tasks.zendesk_client.create_ticket') mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.scheduled_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
create_notification(template=sample_letter_template, created_at=datetime(2019, 5, 1, 12, 0)) create_notification(template=sample_letter_template, created_at=datetime(2019, 5, 1, 12, 0))
create_notification(template=sample_letter_template, created_at=datetime(2019, 5, 29, 16, 29)) create_notification(template=sample_letter_template, created_at=datetime(2019, 5, 29, 16, 29))
@@ -418,16 +433,24 @@ def test_check_if_letters_still_in_created_during_bst(mocker, sample_letter_temp
mock_logger.assert_called_once_with(message) mock_logger.assert_called_once_with(message)
mock_create_ticket.assert_called_with( mock_create_ticket.assert_called_with(
ANY,
message=message, message=message,
subject="[test] Letters still in 'created' status", subject="[test] Letters still in 'created' status",
ticket_type='incident' ticket_type='incident',
technical_ticket=True,
ticket_categories=['notify_letters']
) )
mock_send_ticket_to_zendesk.assert_called_once()
@freeze_time("2019-01-30 14:00:00") @freeze_time("2019-01-30 14:00:00")
def test_check_if_letters_still_in_created_during_utc(mocker, sample_letter_template): def test_check_if_letters_still_in_created_during_utc(mocker, sample_letter_template):
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error') mock_logger = mocker.patch('app.celery.tasks.current_app.logger.error')
mock_create_ticket = mocker.patch('app.celery.scheduled_tasks.zendesk_client.create_ticket') mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.scheduled_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
create_notification(template=sample_letter_template, created_at=datetime(2018, 12, 1, 12, 0)) create_notification(template=sample_letter_template, created_at=datetime(2018, 12, 1, 12, 0))
create_notification(template=sample_letter_template, created_at=datetime(2019, 1, 29, 17, 29)) create_notification(template=sample_letter_template, created_at=datetime(2019, 1, 29, 17, 29))
@@ -443,11 +466,15 @@ def test_check_if_letters_still_in_created_during_utc(mocker, sample_letter_temp
"https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-Letters-still-in-created." "https://github.com/alphagov/notifications-manuals/wiki/Support-Runbook#deal-with-Letters-still-in-created."
mock_logger.assert_called_once_with(message) mock_logger.assert_called_once_with(message)
mock_create_ticket.assert_called_with( mock_create_ticket.assert_called_once_with(
ANY,
message=message, message=message,
subject="[test] Letters still in 'created' status", subject="[test] Letters still in 'created' status",
ticket_type='incident' ticket_type='incident',
technical_ticket=True,
ticket_categories=['notify_letters']
) )
mock_send_ticket_to_zendesk.assert_called_once()
@pytest.mark.parametrize('offset', ( @pytest.mark.parametrize('offset', (
@@ -582,7 +609,11 @@ def test_check_for_services_with_high_failure_rates_or_sending_to_tv_numbers(
mocker, notify_db_session, failure_rates, sms_to_tv_numbers, expected_message mocker, notify_db_session, failure_rates, sms_to_tv_numbers, expected_message
): ):
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.warning') mock_logger = mocker.patch('app.celery.tasks.current_app.logger.warning')
mock_create_ticket = mocker.patch('app.celery.scheduled_tasks.zendesk_client.create_ticket') mock_create_ticket = mocker.spy(NotifySupportTicket, '__init__')
mock_send_ticket_to_zendesk = mocker.patch(
'app.celery.scheduled_tasks.zendesk_client.send_ticket_to_zendesk',
autospec=True,
)
mock_failure_rates = mocker.patch( mock_failure_rates = mocker.patch(
'app.celery.scheduled_tasks.dao_find_services_with_high_failure_rates', return_value=failure_rates 'app.celery.scheduled_tasks.dao_find_services_with_high_failure_rates', return_value=failure_rates
) )
@@ -598,10 +629,13 @@ def test_check_for_services_with_high_failure_rates_or_sending_to_tv_numbers(
assert mock_sms_to_tv_numbers.called assert mock_sms_to_tv_numbers.called
mock_logger.assert_called_once_with(expected_message) mock_logger.assert_called_once_with(expected_message)
mock_create_ticket.assert_called_with( mock_create_ticket.assert_called_with(
ANY,
message=expected_message + zendesk_actions, message=expected_message + zendesk_actions,
subject="[test] High failure rates for sms spotted for services", subject="[test] High failure rates for sms spotted for services",
ticket_type='incident' ticket_type='incident',
technical_ticket=True
) )
mock_send_ticket_to_zendesk.assert_called_once()
def test_trigger_link_tests_calls_for_all_providers( def test_trigger_link_tests_calls_for_all_providers(