Skip to content

Commit

Permalink
Make preheader context aware and fix related tests
Browse files Browse the repository at this point in the history
  • Loading branch information
codingjoe committed Oct 7, 2024
1 parent e44f835 commit 8987838
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
9 changes: 6 additions & 3 deletions emark/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class MarkdownEmail(EmailMultiAlternatives):
base_html_template = "emark/base.html"
template = None
subject = None
preheader = ""
uuid = False

def __init__(
Expand All @@ -49,6 +50,7 @@ def __init__(
context: dict = None,
utm_params=None,
template=None,
preheader=None,
**kwargs,
):
"""Initialize an email message and attach a rendered HTML version of it."""
Expand All @@ -57,6 +59,7 @@ def __init__(
self.language = language
self.utm_params = utm_params or {}
self.subject = subject or self.subject
self.preheader = preheader or self.preheader
self.html = None
self.markdown = None
super().__init__(subject=self.subject, **kwargs)
Expand Down Expand Up @@ -213,7 +216,7 @@ def get_subject(self, **context):
)
return self.subject % context

def get_preheader(self):
def get_preheader(self, **context):
"""Return the email's preheader.
A brief text that recipients will see in their inbox before opening the email
Expand All @@ -222,7 +225,7 @@ def get_preheader(self):
Can be useful to grab the recipient's attention and/or simplify their workflow
(e.g. by providing a one-time-password).
"""
return ""
return (self.preheader or "") % context

def get_markdown(self, context, utm):
template = self.get_template()
Expand Down Expand Up @@ -268,7 +271,7 @@ def render(self, tracking_uuid=None):
context |= utm_params
self.subject = self.get_subject(**context)
context["subject"] = self.subject
context["preheader"] = self.get_preheader()
context["preheader"] = self.get_preheader(**context)
self.markdown = self.get_markdown(context, utm_params)
self.html = self.get_html(
markdown_string=self.markdown,
Expand Down
15 changes: 14 additions & 1 deletion tests/test_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,20 @@ def test_get_preheader(self):
language="en-US",
context={"donut_name": "HoneyNuts", "donut_type": "Honey"},
)
assert email_message.preheader == "Donuts events are back!"
assert email_message.get_preheader() == "Donuts events are back!"

def test_get_preheader__context_aware(self):
email_message = MarkdownEmailTestWithPreheader(
language="en-US",
context={"donut_name": "HoneyNuts", "donut_type": "Honey"},
preheader="%(donut_type)s donuts events are back!",
)
assert (
email_message.get_preheader(
**{"donut_name": "HoneyNuts", "donut_type": "Honey"}
)
== "Honey donuts events are back!"
)

def test_inject_utm_params(self):
email_message = MarkdownEmailTestWithSubject(
Expand Down

0 comments on commit 8987838

Please sign in to comment.