def test_confirm_link_substitutions(self, settings): template = "{{confirm_link}}" token = Token(b"token") provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ "subscribe.subject.txt": template, "subscribe.txt": template, "subscribe.html": template, }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_confirmation_request_msg(Email("email@local"), action=Action.subscribe, confirm_token=token) expected_link = ( "https://test.local/subscribe/confirm/email%40local?token=" + quote(token.to_string())) assert msg["Subject"] == expected_link assert (msg.get_body("plain").get_content().strip() == expected_link # type: ignore ) assert (msg.get_body("html").get_content().strip() == expected_link # type: ignore )
def test_urlquote(self, feed_item, settings): subject = "{{ '@' | urlquote }}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ f"new-post.subject.txt": subject, "new-post.txt": "", "new-post.html": "", }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_new_post_msg(feed_item, Email("email")) assert msg["Subject"] == "%40"
def test_include_binary_and_b64encode(self, feed_item, settings): binary_content = b"binary content" subject = "{{ include_binary('bin') | b64encode }}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ f"new-post.subject.txt": subject, "new-post.txt": "", "new-post.html": "", }), binary_loader=MockBinaryLoader({"bin": binary_content}), ) msg = provider.get_new_post_msg(feed_item, Email("email")) assert msg["Subject"] == b64encode(binary_content).decode("ascii")
def test_subject_substitutions(self, feed_item, settings): subject = "{{display_name}} {{host}} {{to_email}} {{post.title}}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ "new-post.subject.txt": subject, "new-post.txt": "", "new-post.html": "", }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_new_post_msg(feed_item, Email("email")) assert msg[ "Subject"] == f"{settings.display_name} {settings.host} email title"
def settings(): return EmailFromTemplateProvider.Settings( display_name="display_name", sender="sender <*****@*****.**>", host="test.local", confirm_url_format= "https://{host}/{action}/confirm/{email}?token={token}", )
def test_include_binary_and_b64encode(self, settings): binary_content = b"binary content" subject = "{{ include_binary('bin') | b64encode }}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ f"subscribe.subject.txt": subject, "subscribe.txt": "", "subscribe.html": "", }), binary_loader=MockBinaryLoader({"bin": binary_content}), ) msg = provider.get_confirmation_request_msg( Email("email"), action=Action.subscribe, confirm_token=Token(b"token")) assert msg["Subject"] == b64encode(binary_content).decode("ascii")
def test_body_substitutions(self, feed_item, settings): subject = "subject" template = "{{subject}} {{display_name}} {{host}} {{to_email}} {{post.title}}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ "new-post.subject.txt": subject, "new-post.txt": template, "new-post.html": template, }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_new_post_msg(feed_item, Email("email")) assert ( msg.get_body("plain").get_content().strip() # type: ignore == f"{subject} {settings.display_name} {settings.host} email title" )
def test_subject_substitutions(self, settings): subject = "{{display_name}} {{host}} {{to_email}}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ "subscribe.subject.txt": subject, "subscribe.txt": "", "subscribe.html": "", }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_confirmation_request_msg( Email("email"), action=Action.subscribe, confirm_token=Token(b"token")) assert msg[ "Subject"] == f"{settings.display_name} {settings.host} email"
def test_body_substitutions(self, settings): subject = "subject" template = "{{subject}} {{display_name}} {{host}} {{to_email}}" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ "subscribe.subject.txt": subject, "subscribe.txt": template, "subscribe.html": template, }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_confirmation_request_msg( Email("email"), action=Action.subscribe, confirm_token=Token(b"token")) assert (msg.get_body("plain").get_content().strip() # type: ignore == f"{subject} {settings.display_name} {settings.host} email")
def test_constructs_email_message_from_templates(self, feed_item, settings): to_email = Email("*****@*****.**") subject = "subject" plain_text = "plain text" html = "html" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ f"new-post.subject.txt": subject, f"new-post.txt": plain_text, f"new-post.html": html, }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_new_post_msg(feed_item, Email("email")) assert msg["Subject"] == subject assert msg.get_body( "plain").get_content().strip() == plain_text # type: ignore assert msg.get_body( "html").get_content().strip() == html # type: ignore
def test_constructs_email_message_from_templates(self, action, settings): to_email = Email("*****@*****.**") subject = "subject" plain_text = "plain text" html = "html" provider = EmailFromTemplateProvider( settings=settings, template_loader=MockTemplateLoader({ f"{action.name}.subject.txt": subject, f"{action.name}.txt": plain_text, f"{action.name}.html": html, }), binary_loader=MockBinaryLoader(dict()), ) msg = provider.get_confirmation_request_msg( to_email, action=action, confirm_token=Token(b"token")) assert msg["Subject"] == subject assert msg["To"] == to_email assert msg.get_body( "plain").get_content().strip() == plain_text # type: ignore assert msg.get_body( "html").get_content().strip() == html # type: ignore
type=str, nargs=1, help="Image to use for new-post email.", default=[None], ) if __name__ == "__main__": args = parser.parse_args() user = args.user if args.user else args.from_mail[0] conn = smtp_connection(args.host[0], user, getpass.getpass(f"Password for {user}:")) settings = EmailFromTemplateProvider.Settings( display_name="Doveseed template test", sender=args.from_mail[0], host="doveseed.local", confirm_url_format="https://{host}/confirm/{email}?token={token}", ) message_provider = EmailFromTemplateProvider( settings=settings, template_loader=FileSystemLoader(args.template[0]), binary_loader=FileSystemBinaryLoader(args.template[0]), ) token = Token(b"token") dispatch = { "subscribe": lambda: message_provider.get_confirmation_request_msg( args.to_mail[0], action=Action.subscribe, confirm_token=token ), "unsubscribe": lambda: message_provider.get_confirmation_request_msg( args.to_mail[0], action=Action.unsubscribe, confirm_token=token