Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. from decimal import Decimal as D
  2. import httplib
  3. from django.contrib.auth.models import User
  4. from django.conf import settings
  5. from django.test import TestCase, Client
  6. from django.core.urlresolvers import reverse
  7. from oscar.test.helpers import create_product
  8. from oscar.apps.basket.models import Basket
  9. class AnonAddToBasketViewTests(TestCase):
  10. def setUp(self):
  11. self.product = create_product(price=D('10.00'))
  12. url = reverse('basket:add')
  13. post_params = {'product_id': self.product.id,
  14. 'action': 'add',
  15. 'quantity': 1}
  16. self.client = Client()
  17. self.response = self.client.post(url, post_params)
  18. def test_cookie_is_created(self):
  19. self.assertTrue('oscar_open_basket' in self.response.cookies)
  20. def test_price_is_recorded(self):
  21. basket_id = self.response.cookies['oscar_open_basket'].value.split('_')[0]
  22. basket = Basket.objects.get(id=basket_id)
  23. line = basket.lines.get(product=self.product)
  24. self.assertEqual(self.product.stockrecord.price_incl_tax, line.price_incl_tax)
  25. class BasketSummaryViewTests(TestCase):
  26. def setUp(self):
  27. url = reverse('basket:summary')
  28. self.response = self.client.get(url)
  29. def test_shipping_method_in_context(self):
  30. self.assertTrue('shipping_method' in self.response.context)
  31. def test_shipping_charge_in_context(self):
  32. self.assertTrue('shipping_charge_incl_tax' in self.response.context)
  33. def test_order_total_in_context(self):
  34. self.assertTrue('order_total_incl_tax' in self.response.context)
  35. def test_view_does_not_error(self):
  36. self.assertEquals(httplib.OK, self.response.status_code)
  37. def test_basket_in_context(self):
  38. self.assertTrue('basket' in self.response.context)
  39. def test_basket_is_empty(self):
  40. basket = self.response.context['basket']
  41. self.assertEquals(0, basket.num_lines)
  42. class BasketThresholdTest(TestCase):
  43. def setUp(self):
  44. self._old_threshold = settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD
  45. settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = 3
  46. def tearDown(self):
  47. settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = self._old_threshold
  48. def test_adding_more_than_threshold_raises(self):
  49. dummy_product = create_product(price=D('10.00'))
  50. url = reverse('basket:add')
  51. post_params = {'product_id': dummy_product.id,
  52. 'action': 'add',
  53. 'quantity': 2}
  54. response = self.client.post(url, post_params)
  55. self.assertTrue('oscar_open_basket' in response.cookies)
  56. post_params = {'product_id': dummy_product.id,
  57. 'action': 'add',
  58. 'quantity': 2}
  59. response = self.client.post(url, post_params)
  60. self.assertTrue('Your basket currently has 2 items.' in
  61. response.cookies['messages'].value)
  62. class SavedBasketTests(TestCase):
  63. def test_moving_from_saved_basket(self):
  64. user = User.objects.create_user(username='test', password='pass',
  65. email='test@example.com')
  66. client = Client()
  67. client.login(username=user.username, password='pass')
  68. product = create_product(price=D('10.00'), num_in_stock=2)
  69. basket, created = Basket.open.get_or_create(owner=user)
  70. basket.add_product(product=product, quantity=1)
  71. saved_basket, created = Basket.saved.get_or_create(owner=user)
  72. saved_basket.add_product(product=product, quantity=1)
  73. response = client.get(reverse('basket:summary'))
  74. saved_formset = response.context['saved_formset']
  75. saved_form = saved_formset.forms[0]
  76. data = {
  77. saved_formset.add_prefix('INITIAL_FORMS'): 1,
  78. saved_formset.add_prefix('MAX_NUM_FORMS'): 1,
  79. saved_formset.add_prefix('TOTAL_FORMS'): 1,
  80. saved_form.add_prefix('id'): saved_form.initial['id'],
  81. saved_form.add_prefix('move_to_basket'): True,
  82. }
  83. response = client.post(reverse('basket:saved'), data=data)
  84. self.assertEqual(Basket.open.get(id=basket.id).lines.get(product=product).quantity, 2)
  85. self.assertRedirects(response, reverse('basket:summary'))
  86. def test_moving_from_saved_basket_more_than_stocklevel_raises(self):
  87. user = User.objects.create_user(username='test', password='pass',
  88. email='test@example.com')
  89. client = Client()
  90. client.login(username=user.username, password='pass')
  91. product = create_product(price=D('10.00'), num_in_stock=1)
  92. basket, created = Basket.open.get_or_create(owner=user)
  93. basket.add_product(product=product, quantity=1)
  94. saved_basket, created = Basket.saved.get_or_create(owner=user)
  95. saved_basket.add_product(product=product, quantity=1)
  96. response = client.get(reverse('basket:summary'))
  97. saved_formset = response.context['saved_formset']
  98. saved_form = saved_formset.forms[0]
  99. data = {
  100. saved_formset.add_prefix('INITIAL_FORMS'): 1,
  101. saved_formset.add_prefix('MAX_NUM_FORMS'): 1,
  102. saved_formset.add_prefix('TOTAL_FORMS'): 1,
  103. saved_form.add_prefix('id'): saved_form.initial['id'],
  104. saved_form.add_prefix('move_to_basket'): True,
  105. }
  106. response = client.post(reverse('basket:saved'), data=data)
  107. # we can't add more than stock level into basket
  108. self.assertEqual(Basket.open.get(id=basket.id).lines.get(product=product).quantity, 1)
  109. self.assertRedirects(response, reverse('basket:summary'))