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

test_scales.py 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from decimal import Decimal as D
  2. from django.test import TestCase
  3. from oscar.apps.shipping.scales import Scale
  4. from oscar.apps.basket.models import Basket
  5. from oscar.test import factories
  6. class TestScales(TestCase):
  7. def test_weighs_uses_specified_attribute(self):
  8. scale = Scale(attribute_code='weight')
  9. p = factories.create_product(attributes={'weight': '1'})
  10. self.assertEqual(1, scale.weigh_product(p))
  11. def test_uses_default_weight_when_attribute_is_missing(self):
  12. scale = Scale(attribute_code='weight', default_weight=0.5)
  13. p = factories.create_product()
  14. self.assertEqual(0.5, scale.weigh_product(p))
  15. def test_raises_exception_when_attribute_is_missing(self):
  16. scale = Scale(attribute_code='weight')
  17. p = factories.create_product()
  18. with self.assertRaises(ValueError):
  19. scale.weigh_product(p)
  20. def test_returns_zero_for_empty_basket(self):
  21. basket = Basket()
  22. scale = Scale(attribute_code='weight')
  23. self.assertEqual(0, scale.weigh_basket(basket))
  24. def test_returns_correct_weight_for_nonempty_basket(self):
  25. basket = factories.create_basket(empty=True)
  26. products = [
  27. factories.create_product(attributes={'weight': '1'},
  28. price=D('5.00')),
  29. factories.create_product(attributes={'weight': '2'},
  30. price=D('5.00'))]
  31. for product in products:
  32. basket.add(product)
  33. scale = Scale(attribute_code='weight')
  34. self.assertEqual(1 + 2, scale.weigh_basket(basket))
  35. def test_returns_correct_weight_for_nonempty_basket_with_line_quantities(self):
  36. basket = factories.create_basket(empty=True)
  37. products = [
  38. (factories.create_product(attributes={'weight': '1'},
  39. price=D('5.00')), 3),
  40. (factories.create_product(attributes={'weight': '2'},
  41. price=D('5.00')), 4)]
  42. for product, quantity in products:
  43. basket.add(product, quantity=quantity)
  44. scale = Scale(attribute_code='weight')
  45. self.assertEqual(1 * 3 + 2 * 4, scale.weigh_basket(basket))
  46. def test_decimals(self):
  47. basket = factories.create_basket(empty=True)
  48. product = factories.create_product(attributes={'weight': '0.3'},
  49. price=D('5.00'))
  50. basket.add(product)
  51. scale = Scale(attribute_code='weight')
  52. self.assertEqual(D('0.3'), scale.weigh_basket(basket))
  53. basket.add(product)
  54. self.assertEqual(D('0.6'), scale.weigh_basket(basket))
  55. basket.add(product)
  56. self.assertEqual(D('0.9'), scale.weigh_basket(basket))