| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- from decimal import Decimal as D
- import httplib
-
- from django.test import TestCase
- from django.test.client import Client
- from django.core.urlresolvers import reverse, clear_url_caches
- from django.conf import settings
-
- from oscar.test.helpers import create_product
- from oscar.test import ClientTestCase
- from oscar.apps.basket.models import Basket
- from oscar.apps.order.models import Order
-
-
- class AnonymousCheckoutViewsTests(ClientTestCase):
- is_anonymous = True
-
- def test_index_does_not_require_login(self):
- url = reverse('checkout:index')
- response = self.client.get(url)
- self.assertIsOk(response)
-
- def test_user_address_views_require_a_login(self):
- urls = [reverse('checkout:user-address-create'),
- reverse('checkout:user-address-update', kwargs={'pk': 1}),
- reverse('checkout:user-address-delete', kwargs={'pk': 1}),]
- for url in urls:
- response = self.client.get(url)
- self.assertIsRedirect(response)
-
- def test_core_checkout_requires_login(self):
- urls = [reverse('checkout:shipping-address'),
- reverse('checkout:payment-method'),
- reverse('checkout:shipping-method'),
- reverse('checkout:payment-details')]
- for url in urls:
- response = self.client.get(url)
- self.assertIsRedirect(response)
-
-
- class ShippingAddressViewTests(ClientTestCase):
- fixtures = ['countries.json']
-
- def test_anon_checkout_disabled_by_default(self):
- self.assertFalse(settings.OSCAR_ALLOW_ANON_CHECKOUT)
-
- def test_create_shipping_address_adds_address_to_session(self):
- response = self.client.post(reverse('checkout:shipping-address'),
- {'last_name': 'Doe',
- 'line1': '1 Egg Street',
- 'postcode': 'N1 9RT',
- 'country': 'GB',
- })
- self.assertIsRedirect(response)
- session_address = self.client.session['checkout_data']['shipping']['new_address_fields']
- self.assertEqual('Doe', session_address['last_name'])
- self.assertEqual('1 Egg Street', session_address['line1'])
- self.assertEqual('N1 9RT', session_address['postcode'])
-
-
- class CheckoutMixin(object):
- fixtures = ['countries.json']
-
- def complete_shipping_address(self):
- response = self.client.post(reverse('checkout:shipping-address'),
- {'last_name': 'Doe',
- 'line1': '1 Egg Street',
- 'postcode': 'N1 9RT',
- 'country': 'GB',
- })
- self.assertIsRedirect(response)
-
- def complete_shipping_method(self):
- self.client.get(reverse('checkout:shipping-method'))
-
- def assertRedirectUrlName(self, response, name):
- location = response['Location'].replace('http://testserver', '')
- self.assertEqual(location, reverse(name))
-
-
- class ShippingMethodViewTests(ClientTestCase, CheckoutMixin):
- fixtures = ['countries.json']
-
- def test_shipping_method_view_redirects_if_no_shipping_address(self):
- response = self.client.get(reverse('checkout:shipping-method'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-address')
-
- def test_redirects_by_default(self):
- self.complete_shipping_address()
- response = self.client.get(reverse('checkout:shipping-method'))
- self.assertRedirectUrlName(response, 'checkout:payment-method')
-
-
- class PaymentMethodViewTests(ClientTestCase, CheckoutMixin):
-
- def test_view_redirects_if_no_shipping_address(self):
- response = self.client.get(reverse('checkout:payment-method'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-address')
-
- def test_view_redirects_if_no_shipping_method(self):
- self.complete_shipping_address()
- response = self.client.get(reverse('checkout:payment-method'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-method')
-
-
- class PreviewViewTests(ClientTestCase, CheckoutMixin):
-
- def test_view_redirects_if_no_shipping_address(self):
- response = self.client.get(reverse('checkout:preview'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-address')
-
- def test_view_redirects_if_no_shipping_method(self):
- self.complete_shipping_address()
- response = self.client.get(reverse('checkout:preview'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-method')
-
- def test_ok_response_if_previous_steps_complete(self):
- self.complete_shipping_address()
- self.complete_shipping_method()
- response = self.client.get(reverse('checkout:preview'))
- self.assertIsOk(response)
-
-
- class PaymentDetailsViewTests(ClientTestCase, CheckoutMixin):
-
- def test_view_redirects_if_no_shipping_address(self):
- response = self.client.post(reverse('checkout:payment-details'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-address')
-
- def test_view_redirects_if_no_shipping_method(self):
- self.complete_shipping_address()
- response = self.client.post(reverse('checkout:payment-details'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-method')
-
- def test_placing_order_with_empty_basket_redirects(self):
- self.complete_shipping_address()
- self.complete_shipping_method()
- response = self.client.post(reverse('checkout:payment-details'))
- self.assertIsRedirect(response)
- self.assertRedirectUrlName(response, 'checkout:shipping-address')
-
-
- class OrderPlacementTests(ClientTestCase, CheckoutMixin):
-
- def setUp(self):
- Order.objects.all().delete()
-
- super(OrderPlacementTests, self).setUp()
- self.basket = Basket.objects.create(owner=self.user)
- self.basket.add_product(create_product(price=D('12.00')))
-
- self.complete_shipping_address()
- self.complete_shipping_method()
- self.response = self.client.post(reverse('checkout:payment-details'))
-
- def test_placing_order_with_nonempty_basket_redirects(self):
- self.assertIsRedirect(self.response)
- self.assertRedirectUrlName(self.response, 'checkout:thank-you')
-
- def test_order_is_created(self):
- self.assertIsRedirect(self.response)
- orders = Order.objects.all()
- self.assertEqual(1, len(orders))
|