test_template.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from redmail import EmailSender
  2. import pytest
  3. from convert import remove_email_extra
  4. from getpass import getpass, getuser
  5. from platform import node
  6. def test_template(tmpdir):
  7. html_templates = tmpdir.mkdir("html_tmpl")
  8. 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>""")
  9. expected_html = f"<h1>Hi Jack,</h1><p>have you checked this open source project 'RedMail'?</p><p>- Me</p>\n"
  10. text_templates = tmpdir.mkdir("text_tmpl")
  11. text_templates.join("example.txt").write("""Hi {{ friend }}, \nhave you checked this open source project '{{ project_name }}'? \n- {{ sender.full_name }}""")
  12. expected_text = f"Hi Jack, \nhave you checked this open source project 'RedMail'? \n- Me\n"
  13. html_tables = tmpdir.mkdir("html_table_tmpl")
  14. html_tables.join("modest.html").write("""{{ df.to_html() }}""")
  15. text_tables = tmpdir.mkdir("text_table_tmpl")
  16. text_tables.join("pandas.txt").write("""{{ df.to_html() }}""")
  17. sender = EmailSender(host=None, port=1234)
  18. sender.set_template_paths(
  19. html=str(html_templates),
  20. text=str(text_templates),
  21. html_table=str(html_tables),
  22. text_table=str(text_tables),
  23. )
  24. msg = sender.get_message(
  25. sender="me@gmail.com",
  26. receivers=["you@gmail.com"],
  27. subject="Some news",
  28. html_template='example.html',
  29. text_template='example.txt',
  30. body_params={"friend": "Jack", 'project_name': 'RedMail'}
  31. )
  32. assert "multipart/mixed" == msg.get_content_type()
  33. alternative = msg.get_payload()[0]
  34. text_part, html_part = alternative.get_payload()
  35. text = remove_email_extra(text_part.get_payload())
  36. html = remove_email_extra(html_part.get_payload())
  37. assert expected_html == html
  38. assert expected_text == text
  39. def test_body_and_template_error(tmpdir):
  40. html_templates = tmpdir.mkdir("html_tmpl")
  41. 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>""")
  42. text_templates = tmpdir.mkdir("text_tmpl")
  43. text_templates.join("example.txt").write("""Hi {{ friend }}, \nhave you checked this open source project '{{ project_name }}'? \n- {{ sender.full_name }}""")
  44. sender = EmailSender(host="localhost", port=0)
  45. sender.set_template_paths(
  46. html=str(html_templates),
  47. text=str(text_templates),
  48. )
  49. with pytest.raises(ValueError):
  50. msg = sender.get_message(
  51. sender="me@gmail.com",
  52. receivers="you@gmail.com",
  53. subject="Some news",
  54. html='This is some body',
  55. html_template="example.html"
  56. )
  57. with pytest.raises(ValueError):
  58. msg = sender.get_message(
  59. sender="me@gmail.com",
  60. receivers="you@gmail.com",
  61. subject="Some news",
  62. text='This is some body',
  63. text_template="example.txt"
  64. )