Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

tests.py 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from decimal import Decimal as D
  2. import httplib
  3. from django.test import TestCase
  4. from django.test.client import Client
  5. from django.core.urlresolvers import reverse, clear_url_caches
  6. from django.conf import settings
  7. from oscar.test.helpers import create_product
  8. from oscar.test import ClientTestCase
  9. from oscar.apps.basket.models import Basket
  10. from oscar.apps.order.models import Order
  11. class AnonymousCheckoutViewsTests(ClientTestCase):
  12. is_anonymous = True
  13. def test_index_does_not_require_login(self):
  14. url = reverse('checkout:index')
  15. response = self.client.get(url)
  16. self.assertIsOk(response)
  17. def test_user_address_views_require_a_login(self):
  18. urls = [reverse('checkout:user-address-create'),
  19. reverse('checkout:user-address-update', kwargs={'pk': 1}),
  20. reverse('checkout:user-address-delete', kwargs={'pk': 1}),]
  21. for url in urls:
  22. response = self.client.get(url)
  23. self.assertIsRedirect(response)
  24. def test_core_checkout_requires_login(self):
  25. urls = [reverse('checkout:shipping-address'),
  26. reverse('checkout:payment-method'),
  27. reverse('checkout:shipping-method'),
  28. reverse('checkout:payment-details')]
  29. for url in urls:
  30. response = self.client.get(url)
  31. self.assertIsRedirect(response)
  32. class ShippingAddressViewTests(ClientTestCase):
  33. fixtures = ['countries.json']
  34. def test_anon_checkout_disabled_by_default(self):
  35. self.assertFalse(settings.OSCAR_ALLOW_ANON_CHECKOUT)
  36. def test_create_shipping_address_adds_address_to_session(self):
  37. response = self.client.post(reverse('checkout:shipping-address'),
  38. {'last_name': 'Doe',
  39. 'line1': '1 Egg Street',
  40. 'postcode': 'N1 9RT',
  41. 'country': 'GB',
  42. })
  43. self.assertIsRedirect(response)
  44. session_address = self.client.session['checkout_data']['shipping']['new_address_fields']
  45. self.assertEqual('Doe', session_address['last_name'])
  46. self.assertEqual('1 Egg Street', session_address['line1'])
  47. self.assertEqual('N1 9RT', session_address['postcode'])
  48. class CheckoutMixin(object):
  49. fixtures = ['countries.json']
  50. def complete_shipping_address(self):
  51. response = self.client.post(reverse('checkout:shipping-address'),
  52. {'last_name': 'Doe',
  53. 'line1': '1 Egg Street',
  54. 'postcode': 'N1 9RT',
  55. 'country': 'GB',
  56. })
  57. self.assertIsRedirect(response)
  58. def complete_shipping_method(self):
  59. self.client.get(reverse('checkout:shipping-method'))
  60. def assertRedirectUrlName(self, response, name):
  61. location = response['Location'].replace('http://testserver', '')
  62. self.assertEqual(location, reverse(name))
  63. class ShippingMethodViewTests(ClientTestCase, CheckoutMixin):
  64. fixtures = ['countries.json']
  65. def test_shipping_method_view_redirects_if_no_shipping_address(self):
  66. response = self.client.get(reverse('checkout:shipping-method'))
  67. self.assertIsRedirect(response)
  68. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  69. def test_redirects_by_default(self):
  70. self.complete_shipping_address()
  71. response = self.client.get(reverse('checkout:shipping-method'))
  72. self.assertRedirectUrlName(response, 'checkout:payment-method')
  73. class PaymentMethodViewTests(ClientTestCase, CheckoutMixin):
  74. def test_view_redirects_if_no_shipping_address(self):
  75. response = self.client.get(reverse('checkout:payment-method'))
  76. self.assertIsRedirect(response)
  77. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  78. def test_view_redirects_if_no_shipping_method(self):
  79. self.complete_shipping_address()
  80. response = self.client.get(reverse('checkout:payment-method'))
  81. self.assertIsRedirect(response)
  82. self.assertRedirectUrlName(response, 'checkout:shipping-method')
  83. class PreviewViewTests(ClientTestCase, CheckoutMixin):
  84. def test_view_redirects_if_no_shipping_address(self):
  85. response = self.client.get(reverse('checkout:preview'))
  86. self.assertIsRedirect(response)
  87. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  88. def test_view_redirects_if_no_shipping_method(self):
  89. self.complete_shipping_address()
  90. response = self.client.get(reverse('checkout:preview'))
  91. self.assertIsRedirect(response)
  92. self.assertRedirectUrlName(response, 'checkout:shipping-method')
  93. def test_ok_response_if_previous_steps_complete(self):
  94. self.complete_shipping_address()
  95. self.complete_shipping_method()
  96. response = self.client.get(reverse('checkout:preview'))
  97. self.assertIsOk(response)
  98. class PaymentDetailsViewTests(ClientTestCase, CheckoutMixin):
  99. def test_view_redirects_if_no_shipping_address(self):
  100. response = self.client.post(reverse('checkout:payment-details'))
  101. self.assertIsRedirect(response)
  102. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  103. def test_view_redirects_if_no_shipping_method(self):
  104. self.complete_shipping_address()
  105. response = self.client.post(reverse('checkout:payment-details'))
  106. self.assertIsRedirect(response)
  107. self.assertRedirectUrlName(response, 'checkout:shipping-method')
  108. def test_placing_order_with_empty_basket_redirects(self):
  109. self.complete_shipping_address()
  110. self.complete_shipping_method()
  111. response = self.client.post(reverse('checkout:payment-details'))
  112. self.assertIsRedirect(response)
  113. self.assertRedirectUrlName(response, 'checkout:shipping-address')
  114. class OrderPlacementTests(ClientTestCase, CheckoutMixin):
  115. def setUp(self):
  116. Order.objects.all().delete()
  117. super(OrderPlacementTests, self).setUp()
  118. self.basket = Basket.objects.create(owner=self.user)
  119. self.basket.add_product(create_product(price=D('12.00')))
  120. self.complete_shipping_address()
  121. self.complete_shipping_method()
  122. self.response = self.client.post(reverse('checkout:payment-details'))
  123. def test_placing_order_with_nonempty_basket_redirects(self):
  124. self.assertIsRedirect(self.response)
  125. self.assertRedirectUrlName(self.response, 'checkout:thank-you')
  126. def test_order_is_created(self):
  127. self.assertIsRedirect(self.response)
  128. orders = Order.objects.all()
  129. self.assertEqual(1, len(orders))