from django.core import mail from django.core.management import call_command from django.test import SimpleTestCase, override_settings @override_settings( ADMINS=( ("Admin", "admin@example.com"), ("Admin and Manager", "admin_and_manager@example.com"), ), MANAGERS=( ("Manager", "manager@example.com"), ("Admin and Manager", "admin_and_manager@example.com"), ), ) class SendTestEmailManagementCommand(SimpleTestCase): """ Test the sending of a test email using the `sendtestemail` command. """ def test_single_receiver(self): """ The mail is sent with the correct subject and recipient. """ recipient = "joe@example.com" call_command("sendtestemail", recipient) self.assertEqual(len(mail.outbox), 1) mail_message = mail.outbox[0] self.assertEqual(mail_message.subject[0:15], "Test email from") self.assertEqual(mail_message.recipients(), [recipient]) def test_multiple_receivers(self): """ The mail may be sent with multiple recipients. """ recipients = ["joe@example.com", "jane@example.com"] call_command("sendtestemail", recipients[0], recipients[1]) self.assertEqual(len(mail.outbox), 1) mail_message = mail.outbox[0] self.assertEqual(mail_message.subject[0:15], "Test email from") self.assertEqual( sorted(mail_message.recipients()), [ "jane@example.com", "joe@example.com", ], ) def test_manager_receivers(self): """ The mail should be sent to the email addresses specified in settings.MANAGERS. """ call_command("sendtestemail", "--managers") self.assertEqual(len(mail.outbox), 1) mail_message = mail.outbox[0] self.assertEqual( sorted(mail_message.recipients()), [ "admin_and_manager@example.com", "manager@example.com", ], ) def test_admin_receivers(self): """ The mail should be sent to the email addresses specified in settings.ADMIN. """ call_command("sendtestemail", "--admins") self.assertEqual(len(mail.outbox), 1) mail_message = mail.outbox[0] self.assertEqual( sorted(mail_message.recipients()), [ "admin@example.com", "admin_and_manager@example.com", ], ) def test_manager_and_admin_receivers(self): """ The mail should be sent to the email addresses specified in both settings.MANAGERS and settings.ADMINS. """ call_command("sendtestemail", "--managers", "--admins") self.assertEqual(len(mail.outbox), 2) manager_mail = mail.outbox[0] self.assertEqual( sorted(manager_mail.recipients()), [ "admin_and_manager@example.com", "manager@example.com", ], ) admin_mail = mail.outbox[1] self.assertEqual( sorted(admin_mail.recipients()), [ "admin@example.com", "admin_and_manager@example.com", ], )