您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

customer_checkout_tests.py 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from django.core.urlresolvers import reverse
  2. from oscar.test.testcases import WebTestCase
  3. from oscar.test import factories
  4. from oscar.apps.order.models import Order
  5. from oscar.apps.offer.models import ConditionalOffer
  6. from . import CheckoutMixin
  7. class TestIndexView(CheckoutMixin, WebTestCase):
  8. def test_requires_login(self):
  9. response = self.get(reverse('checkout:index'), user=None)
  10. self.assertIsRedirect(response)
  11. def test_redirects_customers_with_empty_basket(self):
  12. response = self.get(reverse('checkout:index'))
  13. self.assertRedirectUrlName(response, 'basket:summary')
  14. def test_redirects_customers_to_shipping_address_view(self):
  15. self.add_product_to_basket()
  16. response = self.get(reverse('checkout:index'))
  17. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  18. class TestShippingAddressView(CheckoutMixin, WebTestCase):
  19. def setUp(self):
  20. self.create_shipping_country()
  21. super(TestShippingAddressView, self).setUp()
  22. def test_requires_login(self):
  23. response = self.get(reverse('checkout:shipping-address'), user=None)
  24. self.assertIsRedirect(response)
  25. def test_submitting_valid_form_adds_data_to_session(self):
  26. self.add_product_to_basket()
  27. page = self.get(reverse('checkout:shipping-address'))
  28. form = page.forms['new_shipping_address']
  29. form['first_name'] = 'Barry'
  30. form['last_name'] = 'Chuckle'
  31. form['line1'] = '1 King Street'
  32. form['line4'] = 'Gotham City'
  33. form['postcode'] = 'N1 7RR'
  34. response = form.submit()
  35. self.assertRedirectUrlName(response, 'checkout:shipping-method')
  36. session_data = self.app.session['checkout_data']
  37. session_fields = session_data['shipping']['new_address_fields']
  38. self.assertEqual(u'Barry', session_fields['first_name'])
  39. self.assertEqual(u'Chuckle', session_fields['last_name'])
  40. self.assertEqual(u'1 King Street', session_fields['line1'])
  41. self.assertEqual(u'Gotham City', session_fields['line4'])
  42. self.assertEqual(u'N1 7RR', session_fields['postcode'])
  43. class TestShippingMethodView(CheckoutMixin, WebTestCase):
  44. def test_requires_login(self):
  45. response = self.get(reverse('checkout:shipping-method'), user=None)
  46. self.assertIsRedirect(response)
  47. def test_redirects_when_only_one_shipping_method(self):
  48. self.add_product_to_basket()
  49. self.enter_shipping_address()
  50. response = self.get(reverse('checkout:shipping-method'))
  51. self.assertRedirectUrlName(response, 'checkout:payment-method')
  52. class TestPreviewView(CheckoutMixin, WebTestCase):
  53. def test_allows_order_to_be_placed(self):
  54. self.add_product_to_basket()
  55. self.enter_shipping_address()
  56. payment_details = self.get(
  57. reverse('checkout:shipping-method')).follow().follow()
  58. preview = payment_details.click(linkid="view_preview")
  59. preview.forms['place-order-form'].submit().follow()
  60. self.assertEqual(1, Order.objects.all().count())
  61. class TestPlacingAnOrderUsingAVoucher(CheckoutMixin, WebTestCase):
  62. def test_records_use(self):
  63. self.add_product_to_basket()
  64. self.add_voucher_to_basket()
  65. self.enter_shipping_address()
  66. thankyou = self.place_order()
  67. order = thankyou.context['order']
  68. self.assertEqual(1, order.discounts.all().count())
  69. discount = order.discounts.all()[0]
  70. voucher = discount.voucher
  71. self.assertEqual(1, voucher.num_orders)
  72. class TestPlacingAnOrderUsingAnOffer(CheckoutMixin, WebTestCase):
  73. def test_records_use(self):
  74. offer = factories.create_offer()
  75. self.add_product_to_basket()
  76. self.enter_shipping_address()
  77. self.place_order()
  78. # Reload offer
  79. offer = ConditionalOffer.objects.get(id=offer.id)
  80. self.assertEqual(1, offer.num_orders)
  81. self.assertEqual(1, offer.num_applications)