You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_emails.py 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import os
  2. from django.core import mail
  3. from django.core.exceptions import ImproperlyConfigured
  4. from django.test import TestCase, override_settings
  5. from oscar.core.loading import get_class
  6. from oscar.test.factories import ProductImageFactory, create_order
  7. from oscar.test.utils import EmailsMixin, remove_image_folders
  8. OrderDispatcher = get_class('order.utils', 'OrderDispatcher')
  9. class TestConcreteEmailsSending(EmailsMixin, TestCase):
  10. def setUp(self):
  11. super().setUp()
  12. self.dispatcher = OrderDispatcher()
  13. def test_send_order_placed_email_for_user(self, order_number=None, additional_context=None):
  14. order_number = order_number if order_number else 'SOME-NUM00042'
  15. order = create_order(number=order_number, user=self.user, request=self.request)
  16. extra_context = {
  17. 'order': order,
  18. 'lines': order.lines.all()
  19. }
  20. if additional_context:
  21. extra_context.update(additional_context)
  22. self.dispatcher.send_order_placed_email_for_user(order, extra_context)
  23. self._test_common_part()
  24. expected_subject = 'Confirmation of order {}'.format(order_number)
  25. assert expected_subject == mail.outbox[0].subject
  26. assert 'Your order contains:' in mail.outbox[0].body
  27. product_title = order.lines.first().title
  28. assert product_title in mail.outbox[0].body
  29. @override_settings(SITE_ID=None, ALLOWED_HOSTS=["example.com"])
  30. def test_send_order_placed_email_for_user_multisite(self):
  31. with self.assertRaises(ImproperlyConfigured, msg=self.DJANGO_IMPROPERLY_CONFIGURED_MSG):
  32. self.test_send_order_placed_email_for_user()
  33. additional_context = {"request": self.request}
  34. self.test_send_order_placed_email_for_user(
  35. order_number="SOME-NUM00043", additional_context=additional_context
  36. )
  37. def test_send_order_placed_email_with_attachments_for_user(self, order_number=None, additional_context=None):
  38. remove_image_folders()
  39. order_number = order_number if order_number else 'SOME-NUM00042'
  40. order = create_order(number=order_number, user=self.user, request=self.request)
  41. extra_context = {
  42. 'order': order,
  43. 'lines': order.lines.all()
  44. }
  45. if additional_context:
  46. extra_context.update(additional_context)
  47. line = order.lines.first()
  48. product_image = ProductImageFactory(product=line.product)
  49. attachments = [
  50. ['fake_file.html', b'file_content', 'text/html'],
  51. ['fake_image.png', b'file_content', 'image/png'],
  52. product_image.original.path, # To test sending file from `FileField` based field
  53. ]
  54. self.dispatcher.send_order_placed_email_for_user(order, extra_context, attachments)
  55. # All attachments were sent with email
  56. assert len(mail.outbox[0].attachments) == 3
  57. expected_attachments = ['fake_file.html', 'fake_image.png', 'test_image.jpg']
  58. assert [attachment[0] for attachment in mail.outbox[0].attachments] == expected_attachments
  59. # Remove test file
  60. os.remove(product_image.original.path)
  61. @override_settings(SITE_ID=None, ALLOWED_HOSTS=["example.com"])
  62. def test_send_order_placed_email_with_attachments_for_user_multisite(self):
  63. with self.assertRaises(ImproperlyConfigured, msg=self.DJANGO_IMPROPERLY_CONFIGURED_MSG):
  64. self.test_send_order_placed_email_with_attachments_for_user()
  65. additional_context = {"request": self.request}
  66. self.test_send_order_placed_email_with_attachments_for_user(
  67. order_number="SOME-NUM00043", additional_context=additional_context
  68. )