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.

tests.py 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. from decimal import Decimal as D
  2. import httplib
  3. import datetime
  4. from django.conf import settings
  5. from django.contrib.auth.models import User
  6. from django.core.urlresolvers import reverse
  7. from django.test import TestCase, Client
  8. from django.http import HttpResponse
  9. from oscar.apps.basket.models import Basket, Line
  10. from oscar.test.helpers import create_product
  11. from oscar.apps.basket.reports import (
  12. OpenBasketReportGenerator, SubmittedBasketReportGenerator)
  13. class BasketModelTest(TestCase):
  14. def setUp(self):
  15. self.basket = Basket.objects.create()
  16. self.dummy_product = create_product()
  17. def test_empty_baskets_have_zero_lines(self):
  18. self.assertTrue(Basket().num_lines == 0)
  19. def test_new_baskets_are_empty(self):
  20. self.assertTrue(Basket().is_empty)
  21. def test_basket_have_with_one_line(self):
  22. Line.objects.create(basket=self.basket, product=self.dummy_product)
  23. self.assertTrue(self.basket.num_lines == 1)
  24. def test_add_product_creates_line(self):
  25. self.basket.add_product(self.dummy_product)
  26. self.assertTrue(self.basket.num_lines == 1)
  27. def test_adding_multiproduct_line_returns_correct_number_of_items(self):
  28. self.basket.add_product(self.dummy_product, 10)
  29. self.assertEqual(self.basket.num_items, 10)
  30. class AnonAddToBasketViewTests(TestCase):
  31. def setUp(self):
  32. self.product = create_product(price=D('10.00'))
  33. url = reverse('basket:add')
  34. post_params = {'product_id': self.product.id,
  35. 'action': 'add',
  36. 'quantity': 1}
  37. self.response = self.client.post(url, post_params)
  38. def test_cookie_is_created(self):
  39. self.assertTrue('oscar_open_basket' in self.response.cookies)
  40. def test_price_is_recorded(self):
  41. basket_id = self.response.cookies['oscar_open_basket'].value.split('_')[0]
  42. basket = Basket.objects.get(id=basket_id)
  43. line = basket.lines.get(product=self.product)
  44. self.assertEqual(self.product.stockrecord.price_incl_tax, line.price_incl_tax)
  45. class BasketSummaryViewTests(TestCase):
  46. def setUp(self):
  47. url = reverse('basket:summary')
  48. self.response = self.client.get(url)
  49. def test_shipping_method_in_context(self):
  50. self.assertTrue('shipping_method' in self.response.context)
  51. def test_shipping_charge_in_context(self):
  52. self.assertTrue('shipping_charge_incl_tax' in self.response.context)
  53. def test_order_total_in_context(self):
  54. self.assertTrue('order_total_incl_tax' in self.response.context)
  55. def test_view_does_not_error(self):
  56. self.assertEquals(httplib.OK, self.response.status_code)
  57. def test_basket_in_context(self):
  58. self.assertTrue('basket' in self.response.context)
  59. def test_basket_is_empty(self):
  60. basket = self.response.context['basket']
  61. self.assertEquals(0, basket.num_lines)
  62. class BasketThresholdTest(TestCase):
  63. def setUp(self):
  64. self._old_threshold = settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD
  65. settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = 3
  66. def tearDown(self):
  67. settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = self._old_threshold
  68. def test_adding_more_than_threshold_raises(self):
  69. dummy_product = create_product(price=D('10.00'))
  70. url = reverse('basket:add')
  71. post_params = {'product_id': dummy_product.id,
  72. 'action': 'add',
  73. 'quantity': 2}
  74. response = self.client.post(url, post_params)
  75. self.assertTrue('oscar_open_basket' in response.cookies)
  76. post_params = {'product_id': dummy_product.id,
  77. 'action': 'add',
  78. 'quantity': 2}
  79. response = self.client.post(url, post_params)
  80. self.assertTrue('Your basket currently has 2 items.' in
  81. response.cookies['messages'].value)
  82. class BasketReportTests(TestCase):
  83. def test_open_report_doesnt_error(self):
  84. data = {
  85. 'start_date': datetime.date(2012, 5, 1),
  86. 'end_date': datetime.date(2012, 5, 17),
  87. 'formatter': 'CSV'
  88. }
  89. generator = OpenBasketReportGenerator(**data)
  90. generator.generate()
  91. def test_submitted_report_doesnt_error(self):
  92. data = {
  93. 'start_date': datetime.date(2012, 5, 1),
  94. 'end_date': datetime.date(2012, 5, 17),
  95. 'formatter': 'CSV'
  96. }
  97. generator = SubmittedBasketReportGenerator(**data)
  98. generator.generate()
  99. class SavedBasketTests(TestCase):
  100. def test_moving_from_saved_basket(self):
  101. user = User.objects.create_user(username='test', password='pass',
  102. email='test@example.com')
  103. client = Client()
  104. client.login(username=user.username, password='pass')
  105. product = create_product(price=D('10.00'), num_in_stock=2)
  106. basket, created = Basket.open.get_or_create(owner=user)
  107. basket.add_product(product=product, quantity=1)
  108. saved_basket, created = Basket.saved.get_or_create(owner=user)
  109. saved_basket.add_product(product=product, quantity=1)
  110. response = client.get(reverse('basket:summary'))
  111. saved_formset = response.context['saved_formset']
  112. saved_form = saved_formset.forms[0]
  113. data = {
  114. saved_formset.add_prefix('INITIAL_FORMS'): 1,
  115. saved_formset.add_prefix('MAX_NUM_FORMS'): 1,
  116. saved_formset.add_prefix('TOTAL_FORMS'): 1,
  117. saved_form.add_prefix('id'): saved_form.initial['id'],
  118. saved_form.add_prefix('move_to_basket'): True,
  119. }
  120. response = client.post(reverse('basket:saved'), data=data)
  121. self.assertEqual(Basket.open.get(id=basket.id).lines.get(product=product).quantity, 2)
  122. self.assertRedirects(response, reverse('basket:summary'))
  123. def test_moving_from_saved_basket_more_than_stocklevel_raises(self):
  124. user = User.objects.create_user(username='test', password='pass',
  125. email='test@example.com')
  126. client = Client()
  127. client.login(username=user.username, password='pass')
  128. product = create_product(price=D('10.00'), num_in_stock=1)
  129. basket, created = Basket.open.get_or_create(owner=user)
  130. basket.add_product(product=product, quantity=1)
  131. saved_basket, created = Basket.saved.get_or_create(owner=user)
  132. saved_basket.add_product(product=product, quantity=1)
  133. response = client.get(reverse('basket:summary'))
  134. saved_formset = response.context['saved_formset']
  135. saved_form = saved_formset.forms[0]
  136. data = {
  137. saved_formset.add_prefix('INITIAL_FORMS'): 1,
  138. saved_formset.add_prefix('MAX_NUM_FORMS'): 1,
  139. saved_formset.add_prefix('TOTAL_FORMS'): 1,
  140. saved_form.add_prefix('id'): saved_form.initial['id'],
  141. saved_form.add_prefix('move_to_basket'): True,
  142. }
  143. response = client.post(reverse('basket:saved'), data=data)
  144. # we can't add more than stock level into basket
  145. self.assertEqual(Basket.open.get(id=basket.id).lines.get(product=product).quantity, 1)
  146. self.assertRedirects(response, reverse('basket:summary'))