From 61c2a8b62407e793237d4ffc3b882b653635ab43 Mon Sep 17 00:00:00 2001
From: Stein Elgethun <stein.elgethun@usit.uio.no>
Date: Fri, 8 Oct 2021 11:55:31 +0200
Subject: [PATCH] Use django-q to create tasks when sending mail

Isuse: GREG-66
---
 gregui/mailutils.py            | 32 +++++++++++++++++++-------------
 gregui/tests/test_mailutils.py |  7 +++++--
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/gregui/mailutils.py b/gregui/mailutils.py
index 30187aaf..19795179 100644
--- a/gregui/mailutils.py
+++ b/gregui/mailutils.py
@@ -1,6 +1,6 @@
 from django.conf import settings
-from django.core.mail import send_mail
 from django.template.loader import render_to_string
+from django_q.tasks import async_task
 
 
 def registration_template(institution, sponsor) -> str:
@@ -17,19 +17,25 @@ def confirmation_template(guest) -> str:
     return render_to_string("sponsor_confirmation.txt", keywords)
 
 
-def send_registration_mail(mail_to, sponsor) -> int:
-    return send_mail(
-        subject="Subject",
-        message=registration_template(settings.INSTANCE_NAME, sponsor),
-        from_email=None,
-        recipient_list=[mail_to],
+def send_registration_mail(mail_to, sponsor) -> str:
+    return async_task(
+        "django.core.mail.send_mail",
+        **{
+            "subject": "Subject",
+            "message": registration_template(settings.INSTANCE_NAME, sponsor),
+            "from_email": None,
+            "recipient_list": [mail_to],
+        }
     )
 
 
-def send_confirmation_mail(mail_to, guest) -> int:
-    return send_mail(
-        subject="Subject",
-        message=confirmation_template(guest),
-        from_email=None,
-        recipient_list=[mail_to],
+def send_confirmation_mail(mail_to, guest) -> str:
+    return async_task(
+        "django.core.mail.send_mail",
+        **{
+            "subject": "Subject",
+            "message": confirmation_template(guest),
+            "from_email": None,
+            "recipient_list": [mail_to],
+        }
     )
diff --git a/gregui/tests/test_mailutils.py b/gregui/tests/test_mailutils.py
index 25391f5d..03f30f3d 100644
--- a/gregui/tests/test_mailutils.py
+++ b/gregui/tests/test_mailutils.py
@@ -1,4 +1,5 @@
 from django.core import mail
+from django_q.tasks import result
 
 import pytest
 from gregui import mailutils
@@ -33,7 +34,8 @@ Your guest, Foo Bar, has completed their registration, please confirm the guest
 @pytest.mark.django_db
 def test_registration_mail():
     mail.outbox = []
-    assert mailutils.send_registration_mail("test@example.no", "Foo") == 1
+    task_id = mailutils.send_registration_mail("test@example.no", "Foo")
+    assert result(task_id) == 1
     assert len(mail.outbox) == 1
     assert mail.outbox[0].to == ["test@example.no"]
 
@@ -41,6 +43,7 @@ def test_registration_mail():
 @pytest.mark.django_db
 def test_confirmation_mail():
     mail.outbox = []
-    assert mailutils.send_confirmation_mail("test@example.no", "Foo") == 1
+    task_id = mailutils.send_confirmation_mail("test@example.no", "Foo")
+    assert result(task_id) == 1
     assert len(mail.outbox) == 1
     assert mail.outbox[0].to == ["test@example.no"]
-- 
GitLab