Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

test_views.py 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 tests.fixtures import RequestFactory
  7. class TestVoucherAddView(TestCase):
  8. def test_get(self):
  9. request = RequestFactory().get('/')
  10. view = views.VoucherAddView.as_view()
  11. response = view(request)
  12. self.assertEqual(response.status_code, 302)
  13. def _get_voucher_message(self, request):
  14. return '\n'.join(str(m.message) for m in get_messages(request))
  15. def test_post_valid(self):
  16. voucher = factories.VoucherFactory()
  17. self.assertTrue(voucher.is_active())
  18. data = {
  19. 'code': voucher.code
  20. }
  21. request = RequestFactory().post('/', data=data)
  22. request.basket.save()
  23. view = views.VoucherAddView.as_view()
  24. response = view(request)
  25. self.assertEqual(response.status_code, 302)
  26. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  27. self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
  28. def test_post_valid_from_set(self):
  29. voucherset = factories.VoucherSetFactory()
  30. voucher = voucherset.vouchers.first()
  31. self.assertTrue(voucher.is_active())
  32. data = {
  33. 'code': voucher.code
  34. }
  35. request = RequestFactory().post('/', data=data)
  36. request.basket.save()
  37. view = views.VoucherAddView.as_view()
  38. response = view(request)
  39. self.assertEqual(response.status_code, 302)
  40. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  41. self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
  42. self.assertEqual(voucherset.num_basket_additions, 1)
  43. class TestVoucherRemoveView(TestCase):
  44. def test_post_valid(self):
  45. voucher = factories.VoucherFactory(num_basket_additions=5)
  46. data = {
  47. 'code': voucher.code
  48. }
  49. request = RequestFactory().post('/', data=data)
  50. request.basket.save()
  51. request.basket.vouchers.add(voucher)
  52. view = views.VoucherRemoveView.as_view()
  53. response = view(request, pk=voucher.pk)
  54. self.assertEqual(response.status_code, 302)
  55. voucher = voucher.__class__.objects.get(pk=voucher.pk)
  56. self.assertEqual(voucher.num_basket_additions, 4)
  57. def test_post_with_missing_voucher(self):
  58. """ If the voucher is missing, verify the view queues a message and redirects. """
  59. pk = '12345'
  60. view = views.VoucherRemoveView.as_view()
  61. request = RequestFactory().post('/')
  62. request.basket.save()
  63. response = view(request, pk=pk)
  64. self.assertEqual(response.status_code, 302)
  65. actual = list(get_messages(request))[-1].message
  66. expected = "No voucher found with id '{}'".format(pk)
  67. self.assertEqual(actual, expected)
  68. class TestBasketSummaryView(TestCase):
  69. def setUp(self):
  70. self.url = reverse('basket:summary')
  71. self.country = factories.CountryFactory()
  72. self.user = factories.UserFactory()
  73. def test_default_shipping_address(self):
  74. user_address = factories.UserAddressFactory(
  75. country=self.country, user=self.user, is_default_for_shipping=True
  76. )
  77. request = RequestFactory().get(self.url, user=self.user)
  78. view = views.BasketView(request=request)
  79. self.assertEquals(view.get_default_shipping_address(), user_address)
  80. def test_default_shipping_address_for_anonymous_user(self):
  81. request = RequestFactory().get(self.url)
  82. view = views.BasketView(request=request)
  83. self.assertIsNone(view.get_default_shipping_address())