Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

test_views.py 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. from django.contrib.messages import get_messages
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. from oscar.apps.basket import views
  5. from oscar.test import factories
  6. from oscar.test.testcases import WebTestCase
  7. from tests.fixtures import RequestFactory
  8. from tests.functional.checkout import CheckoutMixin
  9. class TestVoucherAddView(TestCase):
  10. def test_get(self):
  11. request = RequestFactory().get('/')
  12. view = views.VoucherAddView.as_view()
  13. response = view(request)
  14. self.assertEqual(response.status_code, 302)
  15. def _get_voucher_message(self, request):
  16. return '\n'.join(str(m.message) for m in get_messages(request))
  17. def test_post_valid(self):
  18. voucher = factories.VoucherFactory()
  19. self.assertTrue(voucher.is_active())
  20. data = {
  21. 'code': voucher.code
  22. }
  23. request = RequestFactory().post('/', data=data)
  24. request.basket.save()
  25. view = views.VoucherAddView.as_view()
  26. response = view(request)
  27. self.assertEqual(response.status_code, 302)
  28. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  29. self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
  30. def test_post_valid_from_set(self):
  31. voucherset = factories.VoucherSetFactory()
  32. voucher = voucherset.vouchers.first()
  33. self.assertTrue(voucher.is_active())
  34. data = {
  35. 'code': voucher.code
  36. }
  37. request = RequestFactory().post('/', data=data)
  38. request.basket.save()
  39. view = views.VoucherAddView.as_view()
  40. response = view(request)
  41. self.assertEqual(response.status_code, 302)
  42. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  43. self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
  44. self.assertEqual(voucherset.num_basket_additions, 1)
  45. class TestVoucherRemoveView(TestCase):
  46. def test_post_valid(self):
  47. voucher = factories.VoucherFactory(num_basket_additions=5)
  48. data = {
  49. 'code': voucher.code
  50. }
  51. request = RequestFactory().post('/', data=data)
  52. request.basket.save()
  53. request.basket.vouchers.add(voucher)
  54. view = views.VoucherRemoveView.as_view()
  55. response = view(request, pk=voucher.pk)
  56. self.assertEqual(response.status_code, 302)
  57. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  58. self.assertEqual(voucher.num_basket_additions, 4)
  59. def test_post_with_missing_voucher(self):
  60. """ If the voucher is missing, verify the view queues a message and redirects. """
  61. pk = '12345'
  62. view = views.VoucherRemoveView.as_view()
  63. request = RequestFactory().post('/')
  64. request.basket.save()
  65. response = view(request, pk=pk)
  66. self.assertEqual(response.status_code, 302)
  67. actual = list(get_messages(request))[-1].message
  68. expected = "No voucher found with id '{}'".format(pk)
  69. self.assertEqual(actual, expected)
  70. class TestBasketSummaryView(TestCase):
  71. def setUp(self):
  72. self.url = reverse('basket:summary')
  73. self.country = factories.CountryFactory()
  74. self.user = factories.UserFactory()
  75. def test_default_shipping_address(self):
  76. user_address = factories.UserAddressFactory(
  77. country=self.country, user=self.user, is_default_for_shipping=True
  78. )
  79. request = RequestFactory().get(self.url, user=self.user)
  80. view = views.BasketView(request=request)
  81. self.assertEqual(view.get_default_shipping_address(), user_address)
  82. def test_default_shipping_address_for_anonymous_user(self):
  83. request = RequestFactory().get(self.url)
  84. view = views.BasketView(request=request)
  85. self.assertIsNone(view.get_default_shipping_address())
  86. class TestVoucherViews(CheckoutMixin, WebTestCase):
  87. csrf_checks = False
  88. def setUp(self):
  89. self.voucher = factories.create_voucher()
  90. super().setUp()
  91. def test_add_voucher(self):
  92. """
  93. Checks that voucher can be added to basket through appropriate view.
  94. """
  95. self.add_product_to_basket()
  96. assert self.voucher.basket_set.count() == 0
  97. response = self.post(reverse('basket:vouchers-add'), params={'code': self.voucher.code})
  98. self.assertRedirectsTo(response, 'basket:summary')
  99. assert self.voucher.basket_set.count() == 1
  100. def test_remove_voucher(self):
  101. """
  102. Checks that voucher can be removed from basket through appropriate view.
  103. """
  104. self.add_product_to_basket()
  105. self.add_voucher_to_basket(voucher=self.voucher)
  106. assert self.voucher.basket_set.count() == 1
  107. response = self.post(reverse('basket:vouchers-remove', kwargs={'pk': self.voucher.id}))
  108. self.assertRedirectsTo(response, 'basket:summary')
  109. assert self.voucher.basket_set.count() == 0