authentik.stages.email.tests.test_tasks

Test email stage tasks

 1"""Test email stage tasks"""
 2
 3from unittest.mock import PropertyMock, patch
 4
 5from django.core import mail
 6from django.core.mail import EmailMultiAlternatives
 7from django.core.mail.backends.locmem import EmailBackend
 8from django.test import TestCase
 9
10from authentik.core.tests.utils import create_test_admin_user
11from authentik.stages.authenticator_email.models import AuthenticatorEmailStage
12from authentik.stages.email.models import EmailStage
13from authentik.stages.email.tasks import get_email_body, send_mails
14
15
16class TestEmailTasks(TestCase):
17    """Test email stage tasks"""
18
19    def setUp(self):
20        self.user = create_test_admin_user()
21        self.stage = EmailStage.objects.create(
22            name="test-email",
23            use_global_settings=True,
24        )
25        self.auth_stage = AuthenticatorEmailStage.objects.create(
26            name="test-auth-email",
27            use_global_settings=True,
28        )
29
30    def test_get_email_body_html(self):
31        """Test get_email_body with HTML alternative"""
32        message = EmailMultiAlternatives()
33        message.body = "plain text"
34        message.attach_alternative("<p>html content</p>", "text/html")
35        self.assertEqual(get_email_body(message), "<p>html content</p>")
36
37    def test_get_email_body_plain(self):
38        """Test get_email_body with plain text only"""
39        message = EmailMultiAlternatives()
40        message.body = "plain text"
41        self.assertEqual(get_email_body(message), "plain text")
42
43    @patch(
44        "authentik.stages.email.models.EmailStage.backend_class",
45        PropertyMock(return_value=EmailBackend),
46    )
47    def test_send_mails_email_stage(self):
48        """Test send_mails with EmailStage"""
49        message = EmailMultiAlternatives()
50        send_mails(self.stage, message)
51        self.assertEqual(len(mail.outbox), 1)
52
53    @patch(
54        "authentik.stages.authenticator_email.models.AuthenticatorEmailStage.backend_class",
55        PropertyMock(return_value=EmailBackend),
56    )
57    def test_send_mails_authenticator_stage(self):
58        """Test send_mails with AuthenticatorEmailStage"""
59        message = EmailMultiAlternatives()
60        send_mails(self.auth_stage, message)
61        self.assertEqual(len(mail.outbox), 1)
class TestEmailTasks(django.test.testcases.TestCase):
17class TestEmailTasks(TestCase):
18    """Test email stage tasks"""
19
20    def setUp(self):
21        self.user = create_test_admin_user()
22        self.stage = EmailStage.objects.create(
23            name="test-email",
24            use_global_settings=True,
25        )
26        self.auth_stage = AuthenticatorEmailStage.objects.create(
27            name="test-auth-email",
28            use_global_settings=True,
29        )
30
31    def test_get_email_body_html(self):
32        """Test get_email_body with HTML alternative"""
33        message = EmailMultiAlternatives()
34        message.body = "plain text"
35        message.attach_alternative("<p>html content</p>", "text/html")
36        self.assertEqual(get_email_body(message), "<p>html content</p>")
37
38    def test_get_email_body_plain(self):
39        """Test get_email_body with plain text only"""
40        message = EmailMultiAlternatives()
41        message.body = "plain text"
42        self.assertEqual(get_email_body(message), "plain text")
43
44    @patch(
45        "authentik.stages.email.models.EmailStage.backend_class",
46        PropertyMock(return_value=EmailBackend),
47    )
48    def test_send_mails_email_stage(self):
49        """Test send_mails with EmailStage"""
50        message = EmailMultiAlternatives()
51        send_mails(self.stage, message)
52        self.assertEqual(len(mail.outbox), 1)
53
54    @patch(
55        "authentik.stages.authenticator_email.models.AuthenticatorEmailStage.backend_class",
56        PropertyMock(return_value=EmailBackend),
57    )
58    def test_send_mails_authenticator_stage(self):
59        """Test send_mails with AuthenticatorEmailStage"""
60        message = EmailMultiAlternatives()
61        send_mails(self.auth_stage, message)
62        self.assertEqual(len(mail.outbox), 1)

Test email stage tasks

def setUp(self):
20    def setUp(self):
21        self.user = create_test_admin_user()
22        self.stage = EmailStage.objects.create(
23            name="test-email",
24            use_global_settings=True,
25        )
26        self.auth_stage = AuthenticatorEmailStage.objects.create(
27            name="test-auth-email",
28            use_global_settings=True,
29        )

Hook method for setting up the test fixture before exercising it.

def test_get_email_body_html(self):
31    def test_get_email_body_html(self):
32        """Test get_email_body with HTML alternative"""
33        message = EmailMultiAlternatives()
34        message.body = "plain text"
35        message.attach_alternative("<p>html content</p>", "text/html")
36        self.assertEqual(get_email_body(message), "<p>html content</p>")

Test get_email_body with HTML alternative

def test_get_email_body_plain(self):
38    def test_get_email_body_plain(self):
39        """Test get_email_body with plain text only"""
40        message = EmailMultiAlternatives()
41        message.body = "plain text"
42        self.assertEqual(get_email_body(message), "plain text")

Test get_email_body with plain text only

@patch('authentik.stages.email.models.EmailStage.backend_class', PropertyMock(return_value=EmailBackend))
def test_send_mails_email_stage(self):
44    @patch(
45        "authentik.stages.email.models.EmailStage.backend_class",
46        PropertyMock(return_value=EmailBackend),
47    )
48    def test_send_mails_email_stage(self):
49        """Test send_mails with EmailStage"""
50        message = EmailMultiAlternatives()
51        send_mails(self.stage, message)
52        self.assertEqual(len(mail.outbox), 1)

Test send_mails with EmailStage

@patch('authentik.stages.authenticator_email.models.AuthenticatorEmailStage.backend_class', PropertyMock(return_value=EmailBackend))
def test_send_mails_authenticator_stage(self):
54    @patch(
55        "authentik.stages.authenticator_email.models.AuthenticatorEmailStage.backend_class",
56        PropertyMock(return_value=EmailBackend),
57    )
58    def test_send_mails_authenticator_stage(self):
59        """Test send_mails with AuthenticatorEmailStage"""
60        message = EmailMultiAlternatives()
61        send_mails(self.auth_stage, message)
62        self.assertEqual(len(mail.outbox), 1)

Test send_mails with AuthenticatorEmailStage