From bf23f6a52c9002a47425cec68afa58da11c5003f Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Fri, 16 Dec 2016 11:26:16 -0500 Subject: [PATCH 1/2] associate notifications with job before sending notifications related to #3391 --- awx/main/tasks.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 63128635ab..436ca60df4 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -109,8 +109,12 @@ def send_notifications(notification_list, job_id=None): raise TypeError("notification_list should be of type list") if job_id is not None: job_actual = UnifiedJob.objects.get(id=job_id) - for notification_id in notification_list: - notification = Notification.objects.get(id=notification_id) + + notifications = Notification.objects.filter(id__in=notification_list) + if job_id is not None: + job_actual.notifications.add(*notifications) + + for notification in notifications: try: sent = notification.notification_template.send(notification.subject, notification.body) notification.status = "successful" @@ -121,8 +125,6 @@ def send_notifications(notification_list, job_id=None): notification.error = smart_str(e) finally: notification.save() - if job_id is not None: - job_actual.notifications.add(notification) @task(bind=True, queue='default') From fc5b13f413713cacd147bbd29daac5df7f5bd2de Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Fri, 16 Dec 2016 11:40:35 -0500 Subject: [PATCH 2/2] update notification sending tests --- awx/main/tests/unit/test_tasks.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/awx/main/tests/unit/test_tasks.py b/awx/main/tests/unit/test_tasks.py index b83772bb59..2cefe0007b 100644 --- a/awx/main/tests/unit/test_tasks.py +++ b/awx/main/tests/unit/test_tasks.py @@ -38,17 +38,17 @@ def test_send_notifications_list(mocker): mock_job = mocker.MagicMock(spec=UnifiedJob) patches.append(mocker.patch('awx.main.models.UnifiedJob.objects.get', return_value=mock_job)) - mock_notification = mocker.MagicMock(spec=Notification, subject="test", body={'hello': 'world'}) - patches.append(mocker.patch('awx.main.models.Notification.objects.get', return_value=mock_notification)) + mock_notifications = [mocker.MagicMock(spec=Notification, subject="test", body={'hello': 'world'})] + patches.append(mocker.patch('awx.main.models.Notification.objects.filter', return_value=mock_notifications)) with apply_patches(patches): send_notifications([1,2], job_id=1) - assert Notification.objects.get.call_count == 2 - assert mock_notification.status == "successful" - assert mock_notification.save.called + assert Notification.objects.filter.call_count == 1 + assert mock_notifications[0].status == "successful" + assert mock_notifications[0].save.called assert mock_job.notifications.add.called - assert mock_job.notifications.add.called_with(mock_notification) + assert mock_job.notifications.add.called_with(*mock_notifications) @pytest.mark.parametrize("current_instances,call_count", [(91, 2), (89,1)])