Advertisement
Guest User

Untitled

a guest
Jul 15th, 2017
497
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.24 KB | None | 0 0
  1. import datetime
  2. from decimal import Decimal
  3. from django.test import TestCase, RequestFactory
  4. from django.core.urlresolvers import reverse
  5. from cart.models import Cart, CartItem
  6. from cart.mixins import get_cart
  7. from cart.context_processors import cart_count_processor
  8. from products.models.product import Product
  9. from profiles.models import Profile
  10. from django.contrib.auth.models import AnonymousUser
  11. from django.contrib.messages import get_messages
  12.  
  13.  
  14. class CartViewsTests(TestCase):
  15. def setUp(self):
  16. self.request = RequestFactory()
  17. self.request.session = {}
  18. self.request.anonymous_user = AnonymousUser()
  19.  
  20. @classmethod
  21. def setUpTestData(cls):
  22. cls.test_product = Product(
  23. name='Testing Product',
  24. slug='testing-product',
  25. created_at=datetime.datetime.now(),
  26. updated_at=datetime.datetime.now(),
  27. price=1000,
  28. perex='Lorem ipsum',
  29. content='Lorem ipsum content',
  30. )
  31.  
  32. cls.test_product.save()
  33.  
  34. def _create_testing_cart(self, *args, **kwargs):
  35. cart = Cart(created=datetime.datetime.now(), updated=datetime.datetime.now(), *args, **kwargs)
  36. cart.save()
  37.  
  38. return cart
  39.  
  40. def _create_testing_cart_item(self, cart_instance, product_instance):
  41. cart_item = CartItem(cart=cart_instance, product=product_instance, quantity=1,
  42. date_added=datetime.datetime.now())
  43. cart_item.save()
  44.  
  45. return cart_item
  46.  
  47. @staticmethod
  48. def _create_testing_user():
  49. user = Profile(
  50. email='vomacka@gmail.com',
  51. name='Martin',
  52. surname='Vomacka',
  53. slug='martin-vomacka',
  54. is_active=True,
  55. is_admin=False,
  56. is_staff=False,
  57. )
  58. user.set_password(raw_password='helloworld')
  59. user.save()
  60.  
  61. return user
  62.  
  63. def test_cart_string_representation(self):
  64. cart = self._create_testing_cart()
  65. self.assertEqual(str(cart), 'Cart id: {id}'.format(id=cart.pk))
  66.  
  67. def test_empty_cart_view(self):
  68. response = self.client.get(reverse('cart:index'))
  69. self.assertEqual(response.status_code, 200)
  70.  
  71. def test_resolve_cart_for_logged_in_user(self):
  72. session = self.client.session
  73. session['user_cart'] = 'testing_session'
  74.  
  75. request = self.client.get(reverse('cart:index'))
  76. request.user = self._create_testing_user()
  77. request.session = session
  78.  
  79. testing_cart = self._create_testing_cart()
  80. testing_cart.session_key = request.session['user_cart']
  81. testing_cart.user = request.user
  82. testing_cart.save()
  83.  
  84. cart = get_cart(request)
  85.  
  86. self.assertEqual(request.status_code, 200)
  87. self.assertEqual(cart, testing_cart)
  88.  
  89. def test_resolve_cart_for_anonymous_user(self):
  90. session = self.client.session
  91.  
  92. testing_cart = self._create_testing_cart()
  93. testing_cart.session_key = session.session_key
  94. testing_cart.save()
  95.  
  96. request = self.client.get(reverse('cart:index'))
  97. request.session = session
  98. request.user = AnonymousUser()
  99.  
  100. self.assertEqual(request.status_code, 200)
  101. self.assertEqual(request.context['cart'], testing_cart)
  102.  
  103. def test_string_representation_cart_item(self):
  104. cart = self._create_testing_cart()
  105. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=self.test_product)
  106.  
  107. self.assertEqual(str(cart_item), cart_item.product.name)
  108.  
  109. def test_cart_item_url(self):
  110. cart = self._create_testing_cart()
  111. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=self.test_product)
  112. response = self.client.get(cart_item.get_absolute_url())
  113. self.assertTrue(response.status_code, 200)
  114.  
  115. def test_deleting_cart_item(self):
  116. session = self.client.session
  117.  
  118. cart = self._create_testing_cart()
  119. cart.session_key = session.session_key
  120. cart.save()
  121.  
  122. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=self.test_product)
  123.  
  124. response = self.client.post(reverse('cart:remove', kwargs={'product_id': cart_item.product_id}),
  125. data={'product_id': cart_item.product_id}, follow=True)
  126.  
  127. messages = [msg for msg in get_messages(response.wsgi_request)]
  128.  
  129. self.assertEqual(response.status_code, 200)
  130. self.assertEqual(messages[0].tags, 'success', 'Message type should return success type')
  131. self.assertEqual(messages[0].message, 'The item has been deleted from your cart.',
  132. 'Message text should be equal to: The item has been deleted from your cart')
  133. self.assertEqual(cart.cartitem_set.count(), 0, 'Cart should have zero items.')
  134.  
  135. def test_updating_cart_item(self):
  136. session = self.client.session
  137.  
  138. cart = self._create_testing_cart()
  139. cart.session_key = session.session_key
  140. cart.save()
  141.  
  142. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=self.test_product)
  143.  
  144. response = self.client.post(reverse('cart:update', kwargs={'product_id': cart_item.product_id}),
  145. data={'cart_item_quantity': '2'}, follow=True)
  146.  
  147. messages = [msg for msg in get_messages(response.wsgi_request)]
  148.  
  149. updated_quantity = response.context['cart'].cartitem_set.first().quantity
  150. cart_item.quantity = updated_quantity
  151. cart_item.save()
  152.  
  153. self.assertEqual(response.status_code, 200)
  154. self.assertEqual(cart_item.quantity, 2)
  155. self.assertEqual(cart_item.total_price, Decimal(cart_item.quantity * cart_item.product.price))
  156. self.assertEqual(messages[0].tags, 'success', 'Message type should return success type')
  157. self.assertEqual(messages[0].message, 'Product quantity has been updated.')
  158.  
  159. def test_amending_quantity_on_existing_item(self):
  160. session = self.client.session
  161.  
  162. request = self.client.post(reverse('cart:add', kwargs={'product_id': self.test_product.id}),
  163. data={'quantity': 1}, follow=True)
  164. request.session = session
  165. request.user = AnonymousUser()
  166.  
  167. quantity = 1
  168.  
  169. cart = get_cart(request)
  170. cart_item, cart_item_created = CartItem.objects.update_or_create(cart=cart, product=self.test_product)
  171.  
  172. if cart_item_created == False:
  173. cart_item.quantity += quantity
  174.  
  175. cart_item.save()
  176.  
  177. self.assertEqual(cart_item.quantity, 2)
  178.  
  179. def test_adding_item_to_cart_as_anonymous_user(self):
  180. response = self.client.post(reverse('cart:add', kwargs={'product_id': self.test_product.id}),
  181. data={'quantity': 2}, follow=True)
  182.  
  183. self.assertEqual(response.status_code, 200)
  184. self.assertEqual(response.context['cart'].cartitem_set.first().quantity, 2,
  185. 'Quantity should be equal to 2')
  186. self.assertEqual(response.context['cart'].cartitem_set.count(), 1)
  187.  
  188. def test_adding_item_to_cart_as_logged_user(self):
  189. session = self.client.session
  190. session['user_cart'] = 'cart_session'
  191.  
  192. test_user = self._create_testing_user()
  193.  
  194. response = self.client.post(reverse('cart:add', kwargs={'product_id': self.test_product.id}),
  195. data={'quantity': 3}, follow=True)
  196.  
  197. response.session = session
  198. response.user = test_user
  199.  
  200. cart, created = Cart.objects.get_or_create(session_key=response.session['user_cart'], user=response.user)
  201. cart.save()
  202.  
  203. self.assertRedirects(response, '/cart/', 302)
  204. self.assertEqual(response.context['cart'].cartitem_set.count(), 1)
  205. self.assertEqual(response.context['cart'].cartitem_set.first().quantity, 3)
  206.  
  207. def test_get_total_quantity_of_items_in_cart(self):
  208. session = self.client.session
  209. session['user_cart'] = 'cart_session'
  210.  
  211. cart = self._create_testing_cart()
  212.  
  213. # Products
  214. product = self.test_product
  215. product_2 = self.test_product
  216.  
  217. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=product)
  218. cart_item.quantity = 3
  219. cart_item.save()
  220.  
  221. cart_item_2 = self._create_testing_cart_item(cart_instance=cart, product_instance=product_2)
  222. cart_item_2.quantity = 2
  223. cart_item_2.save()
  224.  
  225. cart.save()
  226.  
  227. total_qty_of_items = cart.get_total_quantity_of_items()
  228.  
  229. self.assertEqual(total_qty_of_items, 5, "It should return 5")
  230.  
  231. def test_context_processors(self):
  232. session = self.client.session
  233.  
  234. cart = self._create_testing_cart()
  235. cart_item = self._create_testing_cart_item(cart_instance=cart, product_instance=self.test_product)
  236. cart_item.quantity = 3
  237. cart_item.save()
  238.  
  239. cart.session_key = session.session_key
  240. cart.save()
  241.  
  242. request = self.client.get(reverse('cart:index'))
  243. request.session = session
  244. request.user = self.request.anonymous_user
  245.  
  246. total_qty = cart_count_processor(request)
  247.  
  248. self.assertEqual(total_qty['cart_items_count'], 3, "Total quantity should be equal to 3")
  249.  
  250. self.assertTrue(response.status_code, 200) # assertEqual?
  251.  
  252. cart, _ = Cart.objects.get_or_create(session_key=response.session['user_cart'], user=response.user)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement