diff --git a/eventstore/tasks.py b/eventstore/tasks.py index 7221c56e..2062695f 100644 --- a/eventstore/tasks.py +++ b/eventstore/tasks.py @@ -833,6 +833,10 @@ def update_whatsapp_template_send_status(message_id, preferred_channel=None): status = WhatsAppTemplateSendStatus.objects.get( message_id=message_id, event_received_at__isnull=True ) + + if status.status == WhatsAppTemplateSendStatus.Status.ACTION_COMPLETED: + return + status.event_received_at = timezone.now() status.status = WhatsAppTemplateSendStatus.Status.EVENT_RECEIVED diff --git a/eventstore/tests/test_tasks.py b/eventstore/tests/test_tasks.py index 8b37c4cf..60d117ce 100644 --- a/eventstore/tests/test_tasks.py +++ b/eventstore/tests/test_tasks.py @@ -985,6 +985,24 @@ def test_update_status_sms(self, mock_flow_start): self.assertIsNotNone(self.status.event_received_at) mock_flow_start.assert_not_called() + @mock.patch("eventstore.tasks.async_create_flow_start") + def test_update_status_action_completed(self, mock_flow_start): + """ + If the status record is already action_completed then do nothing. + """ + self.status.status = WhatsAppTemplateSendStatus.Status.ACTION_COMPLETED + self.status.save() + tasks.update_whatsapp_template_send_status(self.status.message_id, "SMS") + + self.status.refresh_from_db() + + self.assertEqual( + self.status.status, WhatsAppTemplateSendStatus.Status.ACTION_COMPLETED + ) + self.assertEqual(self.status.preferred_channel, "WhatsApp") + self.assertIsNone(self.status.event_received_at) + mock_flow_start.assert_not_called() + class ProcessWhatsAppTemplateSendStatusTests(TestCase): def setUp(self):