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

form_tests.py 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django.test import TestCase
  2. from django.conf import settings
  3. import mock
  4. from oscar.apps.basket import forms
  5. from oscar.test import factories
  6. class TestBasketLineForm(TestCase):
  7. def setUp(self):
  8. self.basket = factories.create_basket()
  9. self.line = self.basket.all_lines()[0]
  10. def mock_availability_return_value(self, is_available, reason=''):
  11. policy = self.line.purchase_info.availability
  12. policy.is_purchase_permitted = mock.MagicMock(
  13. return_value=(is_available, reason))
  14. def build_form(self, quantity=None):
  15. if quantity is None:
  16. quantity = self.line.quantity
  17. return forms.BasketLineForm(
  18. strategy=self.basket.strategy,
  19. data={'quantity': quantity},
  20. instance=self.line)
  21. def test_enforces_availability_policy_for_valid_quantities(self):
  22. self.mock_availability_return_value(True)
  23. form = self.build_form()
  24. self.assertTrue(form.is_valid())
  25. def test_enforces_availability_policy_for_invalid_quantities(self):
  26. self.mock_availability_return_value(False, "Some reason")
  27. form = self.build_form()
  28. self.assertFalse(form.is_valid())
  29. self.assertEqual(
  30. form.errors['quantity'], ['Some reason'])
  31. def test_skips_availability_policy_for_zero_quantities(self):
  32. self.mock_availability_return_value(True)
  33. form = self.build_form(quantity=0)
  34. self.assertTrue(form.is_valid())
  35. def test_enforces_max_line_quantity(self):
  36. invalid_qty = settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD + 1
  37. form = self.build_form(quantity=invalid_qty)
  38. self.assertFalse(form.is_valid())