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_checkout_session_data.py 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # pylint: disable=redefined-outer-name
  2. from unittest.mock import Mock
  3. import pytest
  4. from django.contrib.sessions.middleware import SessionMiddleware
  5. from django.http import HttpResponse
  6. from oscar.apps.checkout.forms import ShippingAddressForm
  7. from oscar.apps.checkout.utils import CheckoutSessionData
  8. def get_response_for_test(request):
  9. return HttpResponse()
  10. @pytest.fixture
  11. def csdf(rf):
  12. """"""
  13. request = rf.get("/")
  14. middleware = SessionMiddleware(get_response_for_test)
  15. middleware.process_request(request)
  16. return CheckoutSessionData(request)
  17. def get_address_fields():
  18. def new_init(self, *args, **kwargs):
  19. super(ShippingAddressForm, self).__init__(*args, **kwargs)
  20. ShippingAddressForm.__init__ = new_init
  21. data = {
  22. "first_name": "John",
  23. "last_name": "Doe",
  24. "line1": "1 Egg Road",
  25. "line4": "Shell City",
  26. "postcode": "N12 9RT",
  27. "phone_number": "+49231555555",
  28. }
  29. form = ShippingAddressForm(data)
  30. form.is_valid()
  31. address_fields = dict(
  32. (k, v) for (k, v) in form.instance.__dict__.items() if not k.startswith("_")
  33. )
  34. return address_fields
  35. def test__get(csdf):
  36. value = csdf._get("non-existent-namespace", "non-existent-key", "default-value")
  37. assert value == "default-value"
  38. def test__unset(csdf):
  39. csdf._set("test-namespace", "test-key", "test-value")
  40. csdf._unset("test-namespace", "test-key")
  41. assert "test-key" not in csdf.request.session[csdf.SESSION_KEY]["test-namespace"]
  42. def test_flush(csdf):
  43. csdf._set("test-namespace", "the-key", "the-value")
  44. csdf.flush()
  45. assert csdf.request.session[csdf.SESSION_KEY] == {}
  46. def test_set_get_guest_email(csdf):
  47. email = "info@example.com"
  48. csdf.set_guest_email(email)
  49. assert csdf.request.session[csdf.SESSION_KEY]["guest"]["email"] == email
  50. assert csdf.get_guest_email() == email
  51. def test_reset_shipping_data(csdf):
  52. csdf.reset_shipping_data()
  53. assert csdf.request.session[csdf.SESSION_KEY]["shipping"] == {}
  54. def test_ship_to_user_address(csdf):
  55. address = Mock(id=1)
  56. csdf.ship_to_user_address(address)
  57. assert csdf.request.session[csdf.SESSION_KEY]["shipping"]["user_address_id"] == 1
  58. assert csdf.shipping_user_address_id() == 1
  59. def test_serialize_new_address_with_phone_number(csdf):
  60. address_fields = get_address_fields()
  61. csdf.ship_to_new_address(address_fields)
  62. csdf.bill_to_new_address(address_fields)
  63. data = csdf.request.session._get_session(no_load=True)
  64. assert csdf.request.session.encode(data)
  65. address_fields["phone_number"] = address_fields["phone_number"].as_international
  66. assert (
  67. address_fields
  68. == csdf.new_billing_address_fields()
  69. == csdf.new_shipping_address_fields()
  70. )
  71. def test_new_shipping_address_fields(csdf):
  72. address_fields = get_address_fields()
  73. csdf.ship_to_new_address(address_fields)
  74. address_fields["phone_number"] = address_fields["phone_number"].as_international
  75. assert address_fields == csdf.new_shipping_address_fields()
  76. def test_use_free_shipping(csdf):
  77. csdf.use_free_shipping()
  78. assert (
  79. csdf.request.session[csdf.SESSION_KEY]["shipping"]["method_code"] == "__free__"
  80. )
  81. def test_bill_to_shipping_address(csdf):
  82. address = Mock(id=1)
  83. csdf.bill_to_user_address(address)
  84. assert csdf.billing_user_address_id() == 1
  85. csdf.bill_to_shipping_address()
  86. assert "user_address_id" not in csdf.request.session[csdf.SESSION_KEY]["billing"]
  87. assert (
  88. csdf.request.session[csdf.SESSION_KEY]["billing"][
  89. "billing_address_same_as_shipping"
  90. ]
  91. is True
  92. )
  93. assert csdf.is_billing_address_same_as_shipping() is True
  94. assert csdf.is_billing_address_set() is True
  95. def test_payment_methods(csdf):
  96. csdf.pay_by("paypal")
  97. assert csdf.request.session[csdf.SESSION_KEY]["payment"]["method"] == "paypal"
  98. assert csdf.payment_method() == "paypal"
  99. def test_order_number(csdf):
  100. """
  101. :param CheckoutSessionData csdf:
  102. :return:
  103. """
  104. csdf.set_order_number("55555")
  105. assert csdf.get_order_number() == "55555"