2022-01-24 20:03:13 -05:00
|
|
|
from django.contrib.auth.models import User
|
|
|
|
from django.core import mail
|
2022-01-24 20:51:14 -05:00
|
|
|
from django.test import TestCase, override_settings
|
2022-01-24 20:03:13 -05:00
|
|
|
from django.utils import timezone
|
|
|
|
|
|
|
|
from qlinks.email import send_broken_email
|
|
|
|
from qlinks.models import Link
|
|
|
|
|
|
|
|
|
2022-01-24 20:51:14 -05:00
|
|
|
@override_settings(
|
|
|
|
QLINKS_CANONICAL='https://short.example/',
|
|
|
|
QLINKS_BROKEN_EMAIL=True,
|
|
|
|
)
|
2022-01-24 20:03:13 -05:00
|
|
|
class EmailTest(TestCase):
|
|
|
|
def create_link(self, user) -> Link:
|
|
|
|
return Link.objects.create(
|
|
|
|
short='short',
|
|
|
|
long='https://long.example.com',
|
|
|
|
created_by=user,
|
|
|
|
is_working=False,
|
|
|
|
last_check=timezone.now(),
|
|
|
|
)
|
|
|
|
|
|
|
|
def assert_email(self, link: Link, name: str, to: str):
|
|
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
|
|
self.assertEqual([to], mail.outbox[0].to)
|
|
|
|
self.assertIn(link.short_url, mail.outbox[0].subject)
|
|
|
|
self.assertIn(link.short_url, mail.outbox[0].body)
|
|
|
|
self.assertIn(link.long, mail.outbox[0].body)
|
|
|
|
self.assertIn(f'Dear {name},', mail.outbox[0].body)
|
|
|
|
|
|
|
|
def test_send_no_user(self):
|
|
|
|
link = self.create_link(None)
|
|
|
|
with self.settings(ADMINS=[('someone', 'someone@example.com')]):
|
|
|
|
send_broken_email(link=link)
|
|
|
|
self.assert_email(link, 'Admin', 'someone@example.com')
|
|
|
|
|
|
|
|
def test_send_user(self):
|
|
|
|
link = self.create_link(User.objects.create_user(
|
|
|
|
'test', email='user@example.com', first_name='Test', last_name='User'
|
|
|
|
))
|
|
|
|
send_broken_email(link=link)
|
|
|
|
self.assert_email(link, 'Test User', 'user@example.com')
|
|
|
|
|
|
|
|
def test_send_user_no_email(self):
|
|
|
|
link = self.create_link(User.objects.create_user('test', first_name='Test', last_name='User'))
|
|
|
|
with self.settings(ADMINS=[('someone', 'someone@example.com')]):
|
|
|
|
send_broken_email(link=link)
|
|
|
|
self.assert_email(link, 'Admin', 'someone@example.com')
|