diff --git a/app/celery/broadcast_message_tasks.py b/app/celery/broadcast_message_tasks.py index d18826441..7d6de73b8 100644 --- a/app/celery/broadcast_message_tasks.py +++ b/app/celery/broadcast_message_tasks.py @@ -1,6 +1,9 @@ from datetime import datetime 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.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.', 'https://docs.google.com/document/d/1J99yOlfp4nQz6et0w5oJVqi-KywtIXkxrEIyq_g2XUs', ]) - zendesk_client.create_ticket( - subject="Live broadcast sent", + ticket = NotifySupportTicket( + subject='Live broadcast sent', 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) for provider in broadcast_event.service.get_available_broadcast_providers(): diff --git a/app/celery/nightly_tasks.py b/app/celery/nightly_tasks.py index 03b84f7e7..51fdf0f70 100644 --- a/app/celery/nightly_tasks.py +++ b/app/celery/nightly_tasks.py @@ -2,6 +2,9 @@ from datetime import datetime, timedelta import pytz from flask import current_app +from notifications_utils.clients.zendesk.zendesk_client import ( + NotifySupportTicket, +) from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError @@ -179,11 +182,15 @@ def raise_alert_if_letter_notifications_still_sending(): # Only send alerts in production 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 - 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, - 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: 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 current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: - zendesk_client.create_ticket( + ticket = NotifySupportTicket( subject="Letter acknowledge error", 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) if len(ack_file_set - zip_file_set) > 0: diff --git a/app/celery/scheduled_tasks.py b/app/celery/scheduled_tasks.py index ea299307a..073624218 100644 --- a/app/celery/scheduled_tasks.py +++ b/app/celery/scheduled_tasks.py @@ -1,6 +1,9 @@ from datetime import datetime, timedelta from flask import current_app +from notifications_utils.clients.zendesk.zendesk_client import ( + NotifySupportTicket, +) from sqlalchemy import between from sqlalchemy.exc import SQLAlchemyError @@ -214,11 +217,14 @@ def check_if_letters_still_pending_virus_check(): Notifications: {}""".format(len(letters), sorted(letter_ids)) if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: - zendesk_client.create_ticket( - subject="[{}] Letters still pending virus check".format(current_app.config['NOTIFY_ENVIRONMENT']), + ticket = NotifySupportTicket( + subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] Letters still pending virus check", 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) @@ -233,11 +239,14 @@ def check_if_letters_still_in_created(): "#deal-with-Letters-still-in-created.".format(len(letters)) if current_app.config['NOTIFY_ENVIRONMENT'] in ['live', 'production', 'test']: - zendesk_client.create_ticket( - subject="[{}] Letters still in 'created' status".format(current_app.config['NOTIFY_ENVIRONMENT']), + ticket = NotifySupportTicket( + subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] Letters still in 'created' status", 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) @@ -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']: 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 - zendesk_client.create_ticket( - subject="[{}] High failure rates for sms spotted for services".format( - current_app.config['NOTIFY_ENVIRONMENT'] - ), + ticket = NotifySupportTicket( + subject=f"[{current_app.config['NOTIFY_ENVIRONMENT']}] High failure rates for sms spotted for services", 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') diff --git a/requirements-app.txt b/requirements-app.txt index d1b4b868e..17d2f07c1 100644 --- a/requirements-app.txt +++ b/requirements-app.txt @@ -38,7 +38,7 @@ notifications-python-client==6.0.2 # PaaS 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 prometheus-client==0.10.1 diff --git a/requirements.txt b/requirements.txt index f3eecc0e4..5441888f1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -40,7 +40,7 @@ notifications-python-client==6.0.2 # PaaS 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 prometheus-client==0.10.1 @@ -51,41 +51,40 @@ alembic==1.6.5 amqp==1.4.9 anyjson==0.3.3 attrs==21.2.0 -awscli==1.20.8 +awscli==1.20.46 bcrypt==3.2.0 billiard==3.3.0.23 bleach==3.3.0 blinker==1.4 boto==2.49.0 -boto3==1.18.8 -botocore==1.21.8 +boto3==1.18.46 +botocore==1.21.46 certifi==2021.5.30 -charset-normalizer==2.0.3 +charset-normalizer==2.0.6 click==8.0.1 colorama==0.4.3 dnspython==1.16.0 docutils==0.15.2 flask-redis==0.4.0 geojson==2.5.0 -govuk-bank-holidays==0.9 -greenlet==1.1.0 +govuk-bank-holidays==0.10 +greenlet==1.1.1 idna==3.2 Jinja2==3.0.1 jmespath==0.10.0 kombu==3.0.37 -Mako==1.1.4 +Mako==1.1.5 MarkupSafe==2.0.1 mistune==0.8.4 orderedset==2.0.3 packaging==21.0 -phonenumbers==8.12.28 +phonenumbers==8.12.31 pyasn1==0.4.8 pycparser==2.20 pyparsing==2.4.7 PyPDF2==1.26.0 pyrsistent==0.18.0 python-dateutil==2.8.2 -python-editor==1.0.4 python-json-logger==2.0.2 pytz==2021.1 PyYAML==5.4.1 @@ -98,5 +97,5 @@ six==1.16.0 smartypants==2.0.1 soupsieve==2.2.1 statsd==3.3.0 -urllib3==1.26.6 +urllib3==1.26.7 webencodings==0.5.1 diff --git a/tests/app/celery/test_broadcast_message_tasks.py b/tests/app/celery/test_broadcast_message_tasks.py index 7d9a32289..eb1bc882d 100644 --- a/tests/app/celery/test_broadcast_message_tasks.py +++ b/tests/app/celery/test_broadcast_message_tasks.py @@ -3,7 +3,11 @@ from unittest.mock import ANY, Mock, call import pytest from celery.exceptions import Retry +from flask import current_app from freezegun import freeze_time +from notifications_utils.clients.zendesk.zendesk_client import ( + NotifySupportTicket, +) from app.celery.broadcast_message_tasks import ( 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) broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING) 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( '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 - 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( @@ -113,22 +119,36 @@ def test_send_broadcast_event_creates_zendesk( areas={**area_data, 'simple_polygons': []}, ) 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') with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'): send_broadcast_event(event.id) - assert mock_create_ticket.call_count == 1 - zendesk_args = mock_create_ticket.call_args[1] - assert zendesk_args['ticket_type'] == 'incident' + mock_create_ticket.assert_called_once_with( + ANY, + 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 'channel severe' in zendesk_args['message'] - assert f"areas {expected_message}" in zendesk_args['message'] + assert str(broadcast_message.id) in ticket_message + assert 'channel severe' in ticket_message + assert f"areas {expected_message}" in ticket_message # 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): @@ -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) 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') with set_config(notify_api, 'NOTIFY_ENVIRONMENT', 'live'): 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): template = create_template(sample_broadcast_service, BROADCAST_TYPE) broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING) 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( '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) 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') diff --git a/tests/app/celery/test_nightly_tasks.py b/tests/app/celery/test_nightly_tasks.py index 07091aff4..af29ff55e 100644 --- a/tests/app/celery/test_nightly_tasks.py +++ b/tests/app/celery/test_nightly_tasks.py @@ -1,11 +1,13 @@ from datetime import date, datetime, timedelta -from unittest.mock import call +from unittest.mock import ANY, call import pytest import pytz from flask import current_app 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.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 -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( "app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be" ) mock_get_letters.return_value = 1, date(2018, 1, 15) - mock_create_ticket = mocker.patch("app.celery.nightly_tasks.zendesk_client.create_ticket") - - raise_alert_if_letter_notifications_still_sending() - - 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 + 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, ) + 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( "app.celery.nightly_tasks.get_letter_notifications_still_sending_when_they_shouldnt_be" ) 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() - mock_create_ticket.assert_not_called() + mock_send_ticket_to_zendesk.assert_not_called() @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') 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_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() @@ -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'], datetime.utcnow().strftime('%Y-%m-%d') + '/zips_sent', 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", 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') diff --git a/tests/app/celery/test_scheduled_tasks.py b/tests/app/celery/test_scheduled_tasks.py index 06dde61a3..ab13e6e97 100644 --- a/tests/app/celery/test_scheduled_tasks.py +++ b/tests/app/celery/test_scheduled_tasks.py @@ -1,10 +1,13 @@ from collections import namedtuple from datetime import datetime, timedelta from unittest import mock -from unittest.mock import call +from unittest.mock import ANY, call import pytest from freezegun import freeze_time +from notifications_utils.clients.zendesk.zendesk_client import ( + NotifySupportTicket, +) from app.celery import scheduled_tasks 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") 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_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, 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) mock_logger.assert_called_once_with(message) - mock_create_ticket.assert_called_with( - message=message, + mock_create_ticket.assert_called_once_with( + ANY, 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") 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_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, 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_create_ticket.assert_called_with( + ANY, message=message, 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") 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_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(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." mock_logger.assert_called_once_with(message) - mock_create_ticket.assert_called_with( + mock_create_ticket.assert_called_once_with( + ANY, message=message, 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', ( @@ -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 ): 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( '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 mock_logger.assert_called_once_with(expected_message) mock_create_ticket.assert_called_with( + ANY, message=expected_message + zendesk_actions, 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(