| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- from django.contrib.messages import get_messages
- from django.test import TestCase
- from django.urls import reverse
-
- from oscar.apps.basket import views
- from oscar.test import factories
- from oscar.test.testcases import WebTestCase
- from tests.fixtures import RequestFactory
- from tests.functional.checkout import CheckoutMixin
-
-
- class TestVoucherAddView(TestCase):
- def test_get(self):
- request = RequestFactory().get('/')
-
- view = views.VoucherAddView.as_view()
- response = view(request)
-
- self.assertEqual(response.status_code, 302)
-
- def _get_voucher_message(self, request):
- return '\n'.join(str(m.message) for m in get_messages(request))
-
- def test_post_valid(self):
- voucher = factories.VoucherFactory()
- self.assertTrue(voucher.is_active())
-
- data = {
- 'code': voucher.code
- }
- request = RequestFactory().post('/', data=data)
- request.basket.save()
-
- view = views.VoucherAddView.as_view()
- response = view(request)
- self.assertEqual(response.status_code, 302)
-
- voucher = voucher.__class__.objects.get(pk=voucher.pk)
- self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
-
- def test_post_valid_from_set(self):
- voucherset = factories.VoucherSetFactory()
- voucher = voucherset.vouchers.first()
-
- self.assertTrue(voucher.is_active())
-
- data = {
- 'code': voucher.code
- }
- request = RequestFactory().post('/', data=data)
- request.basket.save()
-
- view = views.VoucherAddView.as_view()
- response = view(request)
- self.assertEqual(response.status_code, 302)
-
- voucher = voucher.__class__.objects.get(pk=voucher.pk)
- self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
-
- self.assertEqual(voucherset.num_basket_additions, 1)
-
-
- class TestVoucherRemoveView(TestCase):
- def test_post_valid(self):
- voucher = factories.VoucherFactory(num_basket_additions=5)
-
- data = {
- 'code': voucher.code
- }
- request = RequestFactory().post('/', data=data)
- request.basket.save()
- request.basket.vouchers.add(voucher)
-
- view = views.VoucherRemoveView.as_view()
- response = view(request, pk=voucher.pk)
- self.assertEqual(response.status_code, 302)
-
- voucher = voucher.__class__.objects.get(pk=voucher.pk)
- self.assertEqual(voucher.num_basket_additions, 4)
-
- def test_post_with_missing_voucher(self):
- """ If the voucher is missing, verify the view queues a message and redirects. """
- pk = '12345'
- view = views.VoucherRemoveView.as_view()
- request = RequestFactory().post('/')
- request.basket.save()
- response = view(request, pk=pk)
-
- self.assertEqual(response.status_code, 302)
-
- actual = list(get_messages(request))[-1].message
- expected = "No voucher found with id '{}'".format(pk)
- self.assertEqual(actual, expected)
-
-
- class TestBasketSummaryView(TestCase):
- def setUp(self):
- self.url = reverse('basket:summary')
- self.country = factories.CountryFactory()
- self.user = factories.UserFactory()
-
- def test_default_shipping_address(self):
- user_address = factories.UserAddressFactory(
- country=self.country, user=self.user, is_default_for_shipping=True
- )
- request = RequestFactory().get(self.url, user=self.user)
- view = views.BasketView(request=request)
- self.assertEqual(view.get_default_shipping_address(), user_address)
-
- def test_default_shipping_address_for_anonymous_user(self):
- request = RequestFactory().get(self.url)
- view = views.BasketView(request=request)
- self.assertIsNone(view.get_default_shipping_address())
-
-
- class TestVoucherViews(CheckoutMixin, WebTestCase):
- csrf_checks = False
-
- def setUp(self):
- self.voucher = factories.create_voucher()
- super().setUp()
-
- def test_add_voucher(self):
- """
- Checks that voucher can be added to basket through appropriate view.
- """
- self.add_product_to_basket()
-
- assert self.voucher.basket_set.count() == 0
-
- response = self.post(reverse('basket:vouchers-add'), params={'code': self.voucher.code})
- self.assertRedirectsTo(response, 'basket:summary')
- assert self.voucher.basket_set.count() == 1
-
- def test_remove_voucher(self):
- """
- Checks that voucher can be removed from basket through appropriate view.
- """
- self.add_product_to_basket()
- self.add_voucher_to_basket(voucher=self.voucher)
-
- assert self.voucher.basket_set.count() == 1
-
- response = self.post(reverse('basket:vouchers-remove', kwargs={'pk': self.voucher.id}))
- self.assertRedirectsTo(response, 'basket:summary')
- assert self.voucher.basket_set.count() == 0
|