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.8KB

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