test_template.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from textwrap import dedent
  2. from jinja2 import Environment
  3. from redmail import EmailSender
  4. import pytest
  5. from convert import remove_email_extra, remove_email_content_id
  6. from getpass import getpass, getuser
  7. from platform import node
  8. def test_template(tmpdir):
  9. html_templates = tmpdir.mkdir("html_tmpl")
  10. html_templates.join("example.html").write("""<h1>Hi {{ friend }},</h1><p>have you checked this open source project '{{ project_name }}'?</p><p>- {{ sender.full_name }}</p>""")
  11. expected_html = f"<h1>Hi Jack,</h1><p>have you checked this open source project 'RedMail'?</p><p>- Me</p>\n"
  12. text_templates = tmpdir.mkdir("text_tmpl")
  13. text_templates.join("example.txt").write("""Hi {{ friend }}, \nhave you checked this open source project '{{ project_name }}'? \n- {{ sender.full_name }}""")
  14. expected_text = f"Hi Jack, \nhave you checked this open source project 'RedMail'? \n- Me\n"
  15. html_tables = tmpdir.mkdir("html_table_tmpl")
  16. html_tables.join("modest.html").write("""{{ df.to_html() }}""")
  17. text_tables = tmpdir.mkdir("text_table_tmpl")
  18. text_tables.join("pandas.txt").write("""{{ df.to_html() }}""")
  19. sender = EmailSender(host=None, port=1234)
  20. sender.set_template_paths(
  21. html=str(html_templates),
  22. text=str(text_templates),
  23. html_table=str(html_tables),
  24. text_table=str(text_tables),
  25. )
  26. msg = sender.get_message(
  27. sender="me@gmail.com",
  28. receivers=["you@gmail.com"],
  29. subject="Some news",
  30. html_template='example.html',
  31. text_template='example.txt',
  32. body_params={"friend": "Jack", 'project_name': 'RedMail'}
  33. )
  34. assert "multipart/mixed" == msg.get_content_type()
  35. alternative = msg.get_payload()[0]
  36. text_part, html_part = alternative.get_payload()
  37. text = remove_email_extra(text_part.get_payload())
  38. html = remove_email_extra(html_part.get_payload())
  39. assert expected_html == html
  40. assert expected_text == text
  41. def test_jinja_env(tmpdir):
  42. sender = EmailSender(host=None, port=1234)
  43. env = Environment()
  44. env.globals["my_param"] = "<a value>"
  45. sender.templates_text = env
  46. sender.templates_html = env
  47. msg = sender.get_message(
  48. sender="me@example.com",
  49. receivers=["you@example.com"],
  50. subject="Some news",
  51. text="A param: {{ my_param }}",
  52. html="<h1>A param: {{ my_param }}</h1>"
  53. )
  54. content = str(msg)
  55. content = remove_email_content_id(content)
  56. assert content == dedent("""
  57. from: me@example.com
  58. subject: Some news
  59. to: you@example.com
  60. MIME-Version: 1.0
  61. Content-Type: multipart/mixed; boundary="===============<ID>=="
  62. --===============<ID>==
  63. Content-Type: multipart/alternative;
  64. boundary="===============<ID>=="
  65. --===============<ID>==
  66. Content-Type: text/plain; charset="utf-8"
  67. Content-Transfer-Encoding: 7bit
  68. A param: <a value>
  69. --===============<ID>==
  70. Content-Type: text/html; charset="utf-8"
  71. Content-Transfer-Encoding: 7bit
  72. MIME-Version: 1.0
  73. <h1>A param: <a value></h1>
  74. --===============<ID>==--
  75. --===============<ID>==--
  76. """)[1:]
  77. def test_body_and_template_error(tmpdir):
  78. html_templates = tmpdir.mkdir("html_tmpl")
  79. html_templates.join("example.html").write("""<h1>Hi {{ friend }},</h1><p>have you checked this open source project '{{ project_name }}'?</p><p>- {{ sender.full_name }}</p>""")
  80. text_templates = tmpdir.mkdir("text_tmpl")
  81. text_templates.join("example.txt").write("""Hi {{ friend }}, \nhave you checked this open source project '{{ project_name }}'? \n- {{ sender.full_name }}""")
  82. sender = EmailSender(host="localhost", port=0)
  83. sender.set_template_paths(
  84. html=str(html_templates),
  85. text=str(text_templates),
  86. )
  87. with pytest.raises(ValueError):
  88. msg = sender.get_message(
  89. sender="me@gmail.com",
  90. receivers="you@gmail.com",
  91. subject="Some news",
  92. html='This is some body',
  93. html_template="example.html"
  94. )
  95. with pytest.raises(ValueError):
  96. msg = sender.get_message(
  97. sender="me@gmail.com",
  98. receivers="you@gmail.com",
  99. subject="Some news",
  100. text='This is some body',
  101. text_template="example.txt"
  102. )