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

basket_tests.py 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import datetime
  2. from decimal import Decimal as D
  3. from django.test import TestCase
  4. from django.test.client import RequestFactory
  5. from oscar.apps.basket.models import Basket
  6. from oscar.apps.basket.middleware import BasketMiddleware
  7. from oscar.test import factories
  8. from oscar.apps.basket.reports import (
  9. OpenBasketReportGenerator, SubmittedBasketReportGenerator)
  10. from oscar.apps.catalogue.models import Option
  11. class TestABasket(TestCase):
  12. def setUp(self):
  13. self.basket = Basket()
  14. self.product = factories.create_product()
  15. self.record = factories.create_stockrecord(
  16. self.product, price_excl_tax=D('10.00'))
  17. self.stockinfo = factories.create_stockinfo(self.record)
  18. def test_an_empty_basket_has_zero_lines(self):
  19. self.assertEqual(0, self.basket.num_lines)
  20. def test_new_baskets_are_empty(self):
  21. self.assertTrue(self.basket.is_empty)
  22. def test_adding_product_creates_line(self):
  23. self.basket.add_product(self.product, self.stockinfo)
  24. self.assertEqual(1, self.basket.num_lines)
  25. def test_adding_multiproduct_line_returns_correct_number_of_items(self):
  26. self.basket.add_product(self.product, self.stockinfo, 10)
  27. self.assertEqual(self.basket.num_items, 10)
  28. self.assertEqual(self.basket.num_lines, 1)
  29. def test_add_product_creates_line(self):
  30. self.basket.add_product(self.product, self.stockinfo)
  31. self.assertTrue(self.basket.num_lines == 1)
  32. def test_add_product_sets_line_prices(self):
  33. self.basket.add_product(self.product, self.stockinfo)
  34. basket_line = self.basket.lines.all()[0]
  35. self.assertEqual(basket_line.price_incl_tax, D('10.00'))
  36. self.assertEqual(basket_line.price_excl_tax, D('10.00'))
  37. def test_flushing_basket_removes_all_lines(self):
  38. self.basket.add_product(self.product, self.stockinfo, 10)
  39. self.assertEqual(self.basket.num_items, 10)
  40. self.basket.flush()
  41. self.assertEqual(self.basket.num_items, 0)
  42. def test_returns_correct_quantity_for_missing_product(self):
  43. self.assertEqual(0, self.basket.line_quantity(
  44. self.product, self.record))
  45. def test_returns_correct_quantity_for_existing_product(self):
  46. self.basket.add_product(self.product, self.stockinfo)
  47. self.assertEqual(1, self.basket.line_quantity(
  48. self.product, self.record))
  49. def test_returns_correct_quantity_for_existing_product_with_options(self):
  50. option = Option.objects.create(name="Message")
  51. options = [{"option": option, "value": "2"}]
  52. self.basket.add_product(self.product, self.stockinfo, options=options)
  53. self.assertEqual(0, self.basket.line_quantity(
  54. self.product, self.record))
  55. self.assertEqual(1, self.basket.line_quantity(
  56. self.product, self.record, options))
  57. self.assertEqual(1, self.basket.product_quantity(self.product))
  58. def test_has_method_to_test_if_submitted(self):
  59. self.basket.set_as_submitted()
  60. self.assertTrue(self.basket.is_submitted())
  61. class TestBasketMiddleware(TestCase):
  62. def setUp(self):
  63. self.middleware = BasketMiddleware()
  64. def test_basket_is_attached_to_request(self):
  65. req = RequestFactory().get('/')
  66. self.middleware.process_request(req)
  67. self.assertTrue(hasattr(req, 'basket'))
  68. class TestBasketReports(TestCase):
  69. def test_open_report_doesnt_error(self):
  70. data = {
  71. 'start_date': datetime.date(2012, 5, 1),
  72. 'end_date': datetime.date(2012, 5, 17),
  73. 'formatter': 'CSV'
  74. }
  75. generator = OpenBasketReportGenerator(**data)
  76. generator.generate()
  77. def test_submitted_report_doesnt_error(self):
  78. data = {
  79. 'start_date': datetime.date(2012, 5, 1),
  80. 'end_date': datetime.date(2012, 5, 17),
  81. 'formatter': 'CSV'
  82. }
  83. generator = SubmittedBasketReportGenerator(**data)
  84. generator.generate()