3
0
Fork 0

fix: add is_enabled() method for email handler, to check per type

also add some more descriptive errors when email template not found,
body empty
This commit is contained in:
Lance Edgar 2024-12-19 18:20:57 -06:00
parent 089d9d7ec6
commit 902412322e
3 changed files with 152 additions and 21 deletions

View file

@ -280,6 +280,22 @@ class TestEmailHandler(TestCase):
body = handler.get_auto_html_body('test_foo')
self.assertEqual(body, '<p>hello from foo html template</p>\n')
def test_is_enabled(self):
handler = self.make_handler()
# enabled by default
self.assertTrue(handler.is_enabled('default'))
self.assertTrue(handler.is_enabled('foo'))
# specific type disabled
self.config.setdefault('wutta.email.foo.enabled', 'false')
self.assertFalse(handler.is_enabled('foo'))
# default is disabled
self.assertTrue(handler.is_enabled('bar'))
self.config.setdefault('wutta.email.default.enabled', 'false')
self.assertFalse(handler.is_enabled('bar'))
def test_deliver_message(self):
handler = self.make_handler()
@ -387,24 +403,56 @@ class TestEmailHandler(TestCase):
self.assertTrue(handler.sending_is_enabled())
def test_send_email(self):
with patch.object(mod.EmailHandler, 'deliver_message') as deliver_message:
handler = self.make_handler()
handler = self.make_handler()
with patch.object(handler, 'deliver_message') as deliver_message:
# deliver_message() is called
handler.send_email('foo', sender='bob@example.com', to='sally@example.com',
txt_body='hello world')
deliver_message.assert_called_once()
# specify message w/ no body
msg = handler.make_message()
self.assertRaises(ValueError, handler.send_email, message=msg)
self.assertFalse(deliver_message.called)
# make_auto_message() called only if needed
with patch.object(handler, 'make_auto_message') as make_auto_message:
# again, but also specify key
msg = handler.make_message()
self.assertRaises(ValueError, handler.send_email, 'foo', message=msg)
self.assertFalse(deliver_message.called)
msg = handler.make_message()
handler.send_email(message=msg)
make_auto_message.assert_not_called()
# specify complete message
deliver_message.reset_mock()
msg = handler.make_message(txt_body="hello world")
handler.send_email(message=msg)
deliver_message.assert_called_once_with(msg, recips=None)
handler.send_email('foo', sender='bob@example.com', to='sally@example.com',
txt_body='hello world')
make_auto_message.assert_called_once_with('foo', {},
sender='bob@example.com',
to='sally@example.com',
txt_body='hello world')
# again, but also specify key
deliver_message.reset_mock()
msg = handler.make_message(txt_body="hello world")
handler.send_email('foo', message=msg)
deliver_message.assert_called_once_with(msg, recips=None)
# no key, no message
deliver_message.reset_mock()
self.assertRaises(ValueError, handler.send_email)
# auto-create message w/ no template
deliver_message.reset_mock()
self.assertRaises(RuntimeError, handler.send_email, 'foo', sender='foo@example.com')
self.assertFalse(deliver_message.called)
# auto create w/ body
deliver_message.reset_mock()
handler.send_email('foo', sender='foo@example.com', txt_body="hello world")
self.assertTrue(deliver_message.called)
# type is disabled
deliver_message.reset_mock()
self.config.setdefault('wutta.email.foo.enabled', False)
handler.send_email('foo', sender='foo@example.com', txt_body="hello world")
self.assertFalse(deliver_message.called)
# default is disabled
deliver_message.reset_mock()
handler.send_email('bar', sender='bar@example.com', txt_body="hello world")
self.assertTrue(deliver_message.called)
deliver_message.reset_mock()
self.config.setdefault('wutta.email.default.enabled', False)
handler.send_email('bar', sender='bar@example.com', txt_body="hello world")
self.assertFalse(deliver_message.called)