Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

profile_tests.py 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. from mock import patch
  2. from decimal import Decimal as D
  3. from django.core.urlresolvers import reverse
  4. from oscar.test.factories import create_product, create_order
  5. from oscar.test.testcases import WebTestCase
  6. from oscar.core.compat import get_user_model
  7. from oscar.apps.basket.models import Basket
  8. from oscar.apps.partner import strategy
  9. from oscar.apps.order.models import Order
  10. User = get_user_model()
  11. class TestASignedInUser(WebTestCase):
  12. email = 'customer@example.com'
  13. password = 'cheeseshop'
  14. def setUp(self):
  15. self.user = User.objects.create_user(
  16. '_', self.email, self.password)
  17. self.order = create_order(user=self.user)
  18. def test_can_view_their_profile(self):
  19. response = self.app.get(reverse('customer:profile-view'),
  20. user=self.user)
  21. self.assertEqual(200, response.status_code)
  22. self.assertTrue(self.email in response.content.decode('utf8'))
  23. def test_can_delete_their_profile(self):
  24. user_id = self.user.id
  25. order_id = self.order.id
  26. profile = self.app.get(reverse('customer:profile-view'),
  27. user=self.user)
  28. delete_confirm = profile.click(linkid="delete_profile")
  29. form = delete_confirm.forms['delete_profile_form']
  30. form['password'] = self.password
  31. form.submit()
  32. # Ensure user is deleted
  33. users = User.objects.filter(id=user_id)
  34. self.assertEqual(0, len(users))
  35. # Ensure order isn't deleted
  36. users = User.objects.filter(id=user_id)
  37. orders = Order.objects.filter(id=order_id)
  38. self.assertEqual(1, len(orders))
  39. def test_can_update_their_name(self):
  40. profile_form_page = self.app.get(reverse('customer:profile-update'),
  41. user=self.user)
  42. self.assertEqual(200, profile_form_page.status_code)
  43. form = profile_form_page.forms['profile_form']
  44. form['first_name'] = 'Barry'
  45. form['last_name'] = 'Chuckle'
  46. response = form.submit()
  47. self.assertRedirects(response, reverse('customer:profile-view'))
  48. def test_can_update_their_email_address_and_name(self):
  49. profile_form_page = self.app.get(reverse('customer:profile-update'),
  50. user=self.user)
  51. self.assertEqual(200, profile_form_page.status_code)
  52. form = profile_form_page.forms['profile_form']
  53. form['email'] = 'new@example.com'
  54. form['first_name'] = 'Barry'
  55. form['last_name'] = 'Chuckle'
  56. response = form.submit()
  57. self.assertRedirects(response, reverse('customer:profile-view'))
  58. user = User.objects.get(id=self.user.id)
  59. self.assertEqual('new@example.com', user.email)
  60. self.assertEqual('Barry', user.first_name)
  61. self.assertEqual('Chuckle', user.last_name)
  62. def test_cant_update_their_email_address_if_it_already_exists(self):
  63. # create a user to "block" new@example.com
  64. User.objects.create_user(
  65. username='testuser', email='new@example.com',
  66. password="somerandompassword")
  67. self.assertEqual(User.objects.count(), 2)
  68. for email in ['new@example.com', 'New@Example.com']:
  69. profile_form_page = self.app.get(
  70. reverse('customer:profile-update'), user=self.user)
  71. form = profile_form_page.forms['profile_form']
  72. form['email'] = email
  73. form['first_name'] = 'Barry'
  74. form['last_name'] = 'Chuckle'
  75. response = form.submit()
  76. # assert that the original user's email address is unchanged
  77. user = User.objects.get(id=self.user.id)
  78. self.assertEqual(self.email, user.email)
  79. self.assertEqual(
  80. User.objects.filter(email__iexact='new@example.com').count(), 1)
  81. self.assertContains(
  82. response, 'A user with this email address already exists')
  83. def test_can_change_their_password(self):
  84. new_password = 'bubblesgopop'
  85. password_form_page = self.app.get(reverse('customer:change-password'),
  86. user=self.user)
  87. self.assertEqual(200, password_form_page.status_code)
  88. form = password_form_page.forms['change_password_form']
  89. form['old_password'] = self.password
  90. form['new_password1'] = form['new_password2'] = new_password
  91. response = form.submit()
  92. self.assertRedirects(response, reverse('customer:profile-view'))
  93. updated_user = User.objects.get(pk=self.user.pk)
  94. self.assertTrue(updated_user.check_password(new_password))
  95. def test_can_reorder_a_previous_order(self):
  96. order_history_page = self.app.get(
  97. reverse('customer:order', args=[self.order.number]), user=self.user)
  98. form = order_history_page.forms['order_form_%d' % self.order.id]
  99. form.submit()
  100. basket = Basket.open.get(owner=self.user)
  101. basket.strategy = strategy.Default()
  102. self.assertEqual(1, basket.all_lines().count())
  103. def test_can_reorder_a_previous_order_line(self):
  104. order_history_page = self.app.get(
  105. reverse('customer:order',
  106. kwargs={'order_number': self.order.number}),
  107. user=self.user)
  108. line = self.order.lines.all()[0]
  109. form = order_history_page.forms['line_form_%d' % line.id]
  110. form.submit()
  111. basket = Basket.open.get(owner=self.user)
  112. basket.strategy = strategy.Default()
  113. self.assertEqual(1, basket.all_lines().count())
  114. def test_cannot_reorder_an_out_of_stock_product(self):
  115. line = self.order.lines.all()[0]
  116. line.stockrecord.num_in_stock = 0
  117. line.stockrecord.save()
  118. order_history_page = self.app.get(
  119. reverse('customer:order', args=[self.order.number]),
  120. user=self.user)
  121. form = order_history_page.forms['order_form_%d' % self.order.id]
  122. form.submit()
  123. basket = Basket.open.get(owner=self.user)
  124. self.assertEqual(0, basket.all_lines().count())
  125. class TestReorderingOrderLines(WebTestCase):
  126. # TODO - rework this as a webtest
  127. @patch('django.conf.settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD', 1)
  128. def test_cannot_reorder_when_basket_maximum_exceeded(self):
  129. order = create_order(user=self.user)
  130. line = order.lines.all()[0]
  131. product = create_product(price=D('12.00'))
  132. product_page = self.get(line.product.get_absolute_url())
  133. product_page.forms['add_to_basket_form'].submit()
  134. basket = Basket.objects.all()[0]
  135. basket.strategy = strategy.Default()
  136. self.assertEqual(len(basket.all_lines()), 1)
  137. # Try to reorder the whole order
  138. order_page = self.get(reverse('customer:order', args=(order.number,)))
  139. order_page.forms['order_form_%s' % order.id].submit()
  140. self.assertEqual(len(basket.all_lines()), 1)
  141. self.assertNotEqual(line.product.pk, product.pk)
  142. @patch('django.conf.settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD', 1)
  143. def test_cannot_reorder_line_when_basket_maximum_exceeded(self):
  144. order = create_order(user=self.user)
  145. line = order.lines.all()[0]
  146. product = create_product(price=D('12.00'))
  147. product_page = self.get(line.product.get_absolute_url())
  148. product_page.forms['add_to_basket_form'].submit()
  149. basket = Basket.objects.all()[0]
  150. basket.strategy = strategy.Default()
  151. self.assertEqual(len(basket.all_lines()), 1)
  152. # Try to reorder a line
  153. order_page = self.get(reverse('customer:order', args=(order.number,)))
  154. order_page.forms['line_form_%s' % line.id].submit()
  155. self.assertEqual(len(basket.all_lines()), 1)
  156. self.assertNotEqual(line.product.pk, product.pk)