3
0
Fork 0

fix: add auto-prefix for message subject when sending email

This commit is contained in:
Lance Edgar 2025-12-20 23:00:24 -06:00
parent 5de9c15bbd
commit 8a0830b35d
2 changed files with 203 additions and 26 deletions

View file

@ -31,6 +31,17 @@ class TestEmailSetting(ConfigTestCase):
setting = MockSetting(self.config)
self.assertEqual(setting.get_description(), "this should be a good test")
def test_get_default_prefix(self):
# empty by default
setting = mod.EmailSetting(self.config)
self.assertIsNone(setting.default_prefix)
self.assertIsNone(setting.get_default_prefix())
# but can override
setting.default_prefix = "[foo]"
self.assertEqual(setting.get_default_prefix(), "[foo]")
def test_sample_data(self):
setting = mod.EmailSetting(self.config)
self.assertEqual(setting.sample_data(), {})
@ -136,6 +147,7 @@ class TestMessage(FileTestCase):
class mock_foo(mod.EmailSetting):
default_subject = "MOCK FOO!"
default_prefix = "[mock_foo]"
def sample_data(self):
return {"foo": "mock"}
@ -253,7 +265,7 @@ class TestEmailHandler(ConfigTestCase):
self.assertIsInstance(msg, mod.Message)
self.assertEqual(msg.key, "foo")
self.assertEqual(msg.sender, "root@localhost")
self.assertEqual(msg.subject, "Automated message")
self.assertEqual(msg.subject, "[WuttJamaican] Automated message")
self.assertEqual(msg.to, [])
self.assertEqual(msg.cc, [])
self.assertEqual(msg.bcc, [])
@ -270,7 +282,7 @@ class TestEmailHandler(ConfigTestCase):
self.assertIsInstance(msg, mod.Message)
self.assertEqual(msg.key, "foo")
self.assertEqual(msg.sender, "bob@example.com")
self.assertEqual(msg.subject, "Attention required")
self.assertEqual(msg.subject, "[WuttJamaican] Attention required")
self.assertEqual(msg.to, [])
self.assertEqual(msg.cc, [])
self.assertEqual(msg.bcc, [])
@ -287,7 +299,7 @@ class TestEmailHandler(ConfigTestCase):
msg = handler.make_auto_message("test_foo")
self.assertEqual(msg.key, "test_foo")
self.assertEqual(msg.sender, "bob@example.com")
self.assertEqual(msg.subject, "hello foo")
self.assertEqual(msg.subject, "[WuttJamaican] hello foo")
self.assertEqual(msg.to, ["sally@example.com"])
self.assertEqual(msg.cc, [])
self.assertEqual(msg.bcc, [])
@ -311,7 +323,12 @@ class TestEmailHandler(ConfigTestCase):
get_auto_subject.assert_not_called()
msg = handler.make_auto_message("foo")
get_auto_subject.assert_called_once_with(
"foo", {}, default=None, fallback_key=None
"foo",
{},
default=None,
prefix=True,
default_prefix=None,
fallback_key=None,
)
# to
@ -421,36 +438,80 @@ class TestEmailHandler(ConfigTestCase):
)
self.assertEqual(template, "whatever is clever")
def test_get_auto_subject_prefix(self):
handler = self.make_handler()
# global default
prefix = handler.get_auto_subject_prefix("foo")
self.assertEqual(prefix, "[WuttJamaican]")
# can configure alternate global default
self.config.setdefault("wutta.email.default.prefix", "[bar]")
prefix = handler.get_auto_subject_prefix("foo")
self.assertEqual(prefix, "[bar]")
# can configure just for key
self.config.setdefault("wutta.email.foo.prefix", "[foo]")
prefix = handler.get_auto_subject_prefix("foo")
self.assertEqual(prefix, "[foo]")
# can configure via fallback_key
self.config.setdefault("wutta.email.bar.prefix", "[baz]")
prefix = handler.get_auto_subject_prefix("foofoo", fallback_key="bar")
self.assertEqual(prefix, "[baz]")
# EmailSetting can provide default prefix
providers = {
"wuttatest": MagicMock(email_modules=["tests.test_email"]),
}
with patch.object(self.app, "providers", new=providers):
handler = self.make_handler()
prefix = handler.get_auto_subject_prefix("mock_foo")
self.assertEqual(prefix, "[mock_foo]")
# or caller can provide default
prefix = handler.get_auto_subject_prefix("mock_foo", default="[zzz]")
self.assertEqual(prefix, "[zzz]")
def test_get_auto_subject(self):
handler = self.make_handler()
# global default
subject = handler.get_auto_subject("foo")
self.assertEqual(subject, "Automated message")
self.assertEqual(subject, "[WuttJamaican] Automated message")
# can configure alternate global default
self.config.setdefault("wutta.email.default.subject", "Wutta Message")
subject = handler.get_auto_subject("foo")
self.assertEqual(subject, "Wutta Message")
self.assertEqual(subject, "[WuttJamaican] Wutta Message")
# caller can provide default subject
subject = handler.get_auto_subject("foo", default="whatever is clever")
self.assertEqual(subject, "whatever is clever")
self.assertEqual(subject, "[WuttJamaican] whatever is clever")
# can configure just for key
self.config.setdefault("wutta.email.foo.subject", "Foo Message")
subject = handler.get_auto_subject("foo")
self.assertEqual(subject, "Foo Message")
self.assertEqual(subject, "[WuttJamaican] Foo Message")
# proper template is rendered
# proper template is rendered..
self.config.setdefault("wutta.email.bar.subject", "${foo} Message")
subject = handler.get_auto_subject("bar", {"foo": "FOO"})
self.assertEqual(subject, "FOO Message")
self.assertEqual(subject, "[WuttJamaican] FOO Message")
# unless we ask it not to
# ..unless we ask it not to
subject = handler.get_auto_subject("bar", {"foo": "FOO"}, rendered=False)
# nb. no prefix for unrendered template
self.assertEqual(subject, "${foo} Message")
# now suppress/override the prefix
subject = handler.get_auto_subject("foo")
self.assertEqual(subject, "[WuttJamaican] Foo Message")
subject = handler.get_auto_subject("foo", prefix=False)
self.assertEqual(subject, "Foo Message")
subject = handler.get_auto_subject("foo", default_prefix="[foo]")
self.assertEqual(subject, "[foo] Foo Message")
def test_get_auto_recips(self):
handler = self.make_handler()