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

test_checkout_session_data.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import pytest
  2. from django.contrib.sessions.middleware import SessionMiddleware
  3. from mock import Mock
  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. form.clean()
  28. address_fields = dict(
  29. (k, v) for (k, v) in form.instance.__dict__.items()
  30. if not k.startswith('_'))
  31. return address_fields
  32. def test__get(csdf):
  33. value = csdf._get('non-existent-namespace', 'non-existent-key', 'default-value')
  34. assert value == 'default-value'
  35. def test__unset(csdf):
  36. csdf._set('test-namespace', 'test-key', 'test-value')
  37. csdf._unset('test-namespace', 'test-key')
  38. assert 'test-key' not in csdf.request.session[csdf.SESSION_KEY]['test-namespace']
  39. def test_flush(csdf):
  40. csdf._set('test-namespace', 'the-key', 'the-value')
  41. csdf.flush()
  42. assert csdf.request.session[csdf.SESSION_KEY] == {}
  43. def test_set_get_guest_email(csdf):
  44. email = 'info@example.com'
  45. csdf.set_guest_email(email)
  46. assert csdf.request.session[csdf.SESSION_KEY]['guest']['email'] == email
  47. assert csdf.get_guest_email() == email
  48. def test_reset_shipping_data(csdf):
  49. csdf.reset_shipping_data()
  50. assert csdf.request.session[csdf.SESSION_KEY]['shipping'] == {}
  51. def test_ship_to_user_address(csdf):
  52. address = Mock(id=1)
  53. csdf.ship_to_user_address(address)
  54. assert csdf.request.session[csdf.SESSION_KEY]['shipping']['user_address_id'] == 1
  55. assert csdf.shipping_user_address_id() == 1
  56. def test_serialize_new_address_with_phone_number(csdf):
  57. address_fields = get_address_fields()
  58. csdf.ship_to_new_address(address_fields)
  59. csdf.bill_to_new_address(address_fields)
  60. data = csdf.request.session._get_session(no_load=True)
  61. assert csdf.request.session.encode(data)
  62. address_fields['phone_number'] = address_fields['phone_number'].as_international
  63. assert address_fields == csdf.new_billing_address_fields() == csdf.new_shipping_address_fields()
  64. def test_new_shipping_address_fields(csdf):
  65. address_fields = get_address_fields()
  66. csdf.ship_to_new_address(address_fields)
  67. address_fields['phone_number'] = address_fields['phone_number'].as_international
  68. assert address_fields == csdf.new_shipping_address_fields()
  69. def test_use_free_shipping(csdf):
  70. csdf.use_free_shipping()
  71. assert csdf.request.session[csdf.SESSION_KEY]['shipping']['method_code'] == '__free__'
  72. def test_bill_to_shipping_address(csdf):
  73. address = Mock(id=1)
  74. csdf.bill_to_user_address(address)
  75. assert csdf.billing_user_address_id() == 1
  76. csdf.bill_to_shipping_address()
  77. assert 'user_address_id' not in csdf.request.session[csdf.SESSION_KEY]['billing']
  78. assert csdf.request.session[csdf.SESSION_KEY]['billing']['billing_address_same_as_shipping'] is True
  79. assert csdf.is_billing_address_same_as_shipping() is True
  80. assert csdf.is_billing_address_set() is True
  81. def test_payment_methods(csdf):
  82. csdf.pay_by('paypal')
  83. assert csdf.request.session[csdf.SESSION_KEY]['payment']['method'] == 'paypal'
  84. assert csdf.payment_method() == 'paypal'
  85. def test_order_number(csdf):
  86. """
  87. :param CheckoutSessionData csdf:
  88. :return:
  89. """
  90. csdf.set_order_number('55555')
  91. assert csdf.get_order_number() == '55555'