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 3.9KB

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