test_headers.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import datetime
  2. from textwrap import dedent
  3. import sys
  4. import re
  5. from redmail import EmailSender
  6. import pytest
  7. from convert import remove_extra_lines, payloads_to_dict
  8. from getpass import getpass, getuser
  9. from platform import node
  10. from convert import remove_email_extra, remove_email_content_id, prune_generated_headers
  11. import platform
  12. PYTHON_VERSION = sys.version_info
  13. IS_PY37 = sys.version_info < (3, 8)
  14. def test_date():
  15. format = "%a, %d %b %Y %H:%M:%S -0000"
  16. email = EmailSender(host=None, port=1234)
  17. before = datetime.datetime.now(datetime.timezone.utc)
  18. msg = email.get_message(sender="me@example.com", subject="Some email")
  19. after = datetime.datetime.now(datetime.timezone.utc)
  20. date_strings = re.findall(r'(?<=Date: ).+', str(msg))
  21. assert len(date_strings) == 1
  22. for dt_string in date_strings:
  23. # Validate the Date fits to the format
  24. datetime.datetime.strptime(dt_string, format)
  25. # It should not take longer than second to generate the email
  26. assert dt_string in (before.strftime(format), after.strftime(format))
  27. @pytest.mark.parametrize("sender,domain",
  28. [
  29. pytest.param("me@example.com", "@example.com", id="With domain"),
  30. pytest.param(None, f"@{platform.node()}", id="Without domain"),
  31. ]
  32. )
  33. def test_message_id(sender, domain):
  34. email = EmailSender(host=None, port=1234)
  35. msg = email.get_message(sender=sender, subject="Some email")
  36. msg2 = email.get_message(sender=sender, subject="Some email")
  37. message_ids = re.findall(r'(?<=Message-ID: ).+', str(msg))
  38. assert len(message_ids) == 1
  39. message_id = message_ids[0]
  40. # [0-9]{{12}}[.][0-9]{{5}}[.][0-9]{{20}}
  41. assert bool(re.search(fr'<[0-9.]+{domain}>', message_id))
  42. # Check another email has not the same Message-ID
  43. message_id_2 = re.findall(r'(?<=Message-ID: ).+', str(msg2))[0]
  44. assert message_id != message_id_2
  45. def test_cc_bcc():
  46. email = EmailSender(host=None, port=1234)
  47. msg = email.get_message(sender="me@example.com", subject="Some email", cc=['you@example.com'], bcc=['he@example.com', 'she@example.com'])
  48. msg = prune_generated_headers(str(msg))
  49. assert remove_email_content_id(msg) == dedent("""
  50. From: me@example.com
  51. Subject: Some email
  52. Cc: you@example.com
  53. Bcc: he@example.com, she@example.com
  54. Message-ID: <<message_id>>
  55. Date: <date>
  56. """)[1:]