選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

test_order_dispatcher.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.core import mail
  2. from django.test import TestCase
  3. from oscar.core.compat import get_user_model
  4. from oscar.core.loading import get_class, get_model
  5. from oscar.test.factories import create_order
  6. User = get_user_model()
  7. CommunicationEventType = get_model("communication", "CommunicationEventType")
  8. CommunicationEvent = get_model("order", "CommunicationEvent")
  9. Email = get_model("communication", "Email")
  10. Dispatcher = get_class("communication.utils", "Dispatcher")
  11. OrderDispatcher = get_class("order.utils", "OrderDispatcher")
  12. class TestDispatcher(TestCase):
  13. def _dispatch_order_messages(self, order_number, order, email=None):
  14. event_code = OrderDispatcher.ORDER_PLACED_EVENT_CODE
  15. et = CommunicationEventType.objects.create(
  16. code=event_code,
  17. name="Order Placed",
  18. category=CommunicationEventType.ORDER_RELATED,
  19. )
  20. messages = et.get_messages({"order": order, "lines": order.lines.all()})
  21. assert order_number in messages["body"]
  22. assert order_number in messages["html"]
  23. order_dispatcher = OrderDispatcher()
  24. order_dispatcher.dispatch_order_messages(order, messages, event_code)
  25. assert (
  26. CommunicationEvent.objects.filter(order=order, event_type=et).count() == 1
  27. )
  28. assert len(mail.outbox) == 1
  29. message = mail.outbox[0]
  30. assert order_number in message.body
  31. # Test sending messages to emails without account and text body
  32. messages["body"] = ""
  33. dispatcher = Dispatcher()
  34. dispatcher.dispatch_direct_messages(email, messages)
  35. assert len(mail.outbox) == 2
  36. def test_dispatch_order_messages(self):
  37. email = "testuser@example.com"
  38. user = User.objects.create_user("testuser", email, "somesimplepassword")
  39. order = create_order(number="12345", user=user)
  40. assert not order.is_anonymous
  41. self._dispatch_order_messages(order_number="12345", order=order, email=email)
  42. def test_dispatch_anonymous_order_messages(self):
  43. order = create_order(number="12346", guest_email="testguest@example.com")
  44. assert order.is_anonymous
  45. self._dispatch_order_messages(
  46. order_number="12346",
  47. order=order,
  48. email="testguest@example.com",
  49. )