You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

profile_tests.py 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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 ClientTestCase, 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. User = get_user_model()
  10. class TestASignedInUser(WebTestCase):
  11. email = 'customer@example.com'
  12. password = 'cheeseshop'
  13. def setUp(self):
  14. self.user = User.objects.create_user(
  15. '_', self.email, self.password)
  16. self.order = create_order(user=self.user)
  17. def test_can_view_their_profile(self):
  18. response = self.app.get(reverse('customer:profile-view'),
  19. user=self.user)
  20. self.assertEqual(200, response.status_code)
  21. self.assertTrue(self.email in response.content)
  22. def test_can_update_their_name(self):
  23. profile_form_page = self.app.get(reverse('customer:profile-update'),
  24. user=self.user)
  25. self.assertEqual(200, profile_form_page.status_code)
  26. form = profile_form_page.forms['profile_form']
  27. form['first_name'] = 'Barry'
  28. form['last_name'] = 'Chuckle'
  29. response = form.submit()
  30. self.assertRedirects(response, reverse('customer:profile-view'))
  31. def test_can_update_their_email_address_and_name(self):
  32. profile_form_page = self.app.get(reverse('customer:profile-update'),
  33. user=self.user)
  34. self.assertEqual(200, profile_form_page.status_code)
  35. form = profile_form_page.forms['profile_form']
  36. form['email'] = 'new@example.com'
  37. form['first_name'] = 'Barry'
  38. form['last_name'] = 'Chuckle'
  39. response = form.submit()
  40. self.assertRedirects(response, reverse('customer:profile-view'))
  41. user = User.objects.get(id=self.user.id)
  42. self.assertEqual('new@example.com', user.email)
  43. self.assertEqual('Barry', user.first_name)
  44. self.assertEqual('Chuckle', user.last_name)
  45. def test_cant_update_their_email_address_if_it_already_exists(self):
  46. User.objects.create_user(username='testuser', email='new@example.com',
  47. password="somerandompassword")
  48. self.assertEquals(User.objects.count(), 2)
  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. user = User.objects.get(id=self.user.id)
  58. self.assertEqual(self.email, user.email)
  59. try:
  60. User.objects.get(email='new@example.com')
  61. except User.MultipleObjectsReturned:
  62. self.fail("email for user changed to existing one")
  63. self.assertContains(response,
  64. 'A user with this email address already exists')
  65. def test_can_change_their_password(self):
  66. new_password = 'bubblesgopop'
  67. password_form_page = self.app.get(reverse('customer:change-password'),
  68. user=self.user)
  69. self.assertEqual(200, password_form_page.status_code)
  70. form = password_form_page.forms['change_password_form']
  71. form['old_password'] = self.password
  72. form['new_password1'] = form['new_password2'] = new_password
  73. response = form.submit()
  74. self.assertRedirects(response, reverse('customer:profile-view'))
  75. updated_user = User.objects.get(pk=self.user.pk)
  76. self.assertTrue(updated_user.check_password(new_password))
  77. def test_can_reorder_a_previous_order(self):
  78. order_history_page = self.app.get(reverse('customer:order',
  79. args=[self.order.number]),
  80. user=self.user)
  81. form = order_history_page.forms['line_form_%d' % self.order.id]
  82. form.submit()
  83. basket = Basket.open.get(owner=self.user)
  84. basket.strategy = strategy.Default()
  85. self.assertEqual(1, basket.all_lines().count())
  86. def test_can_reorder_a_previous_order_line(self):
  87. order_history_page = self.app.get(
  88. reverse('customer:order',
  89. kwargs={'order_number': self.order.number}),
  90. user=self.user)
  91. line = self.order.lines.all()[0]
  92. form = order_history_page.forms['line_form_%d' % line.id]
  93. form.submit()
  94. basket = Basket.open.get(owner=self.user)
  95. basket.strategy = strategy.Default()
  96. self.assertEqual(1, basket.all_lines().count())
  97. def test_cannot_reorder_an_out_of_stock_product(self):
  98. line = self.order.lines.all()[0]
  99. line.stockrecord.num_in_stock = 0
  100. line.stockrecord.save()
  101. order_history_page = self.app.get(
  102. reverse('customer:order', args=[self.order.number]),
  103. user=self.user)
  104. form = order_history_page.forms['order_form_%d' % self.order.id]
  105. form.submit()
  106. basket = Basket.open.get(owner=self.user)
  107. self.assertEqual(0, basket.all_lines().count())
  108. class TestReorderingOrderLines(ClientTestCase):
  109. # TODO - rework this as a webtest
  110. @patch('django.conf.settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD', 1)
  111. def test_cannot_reorder_when_basket_maximum_exceeded(self):
  112. order = create_order(user=self.user)
  113. line = order.lines.all()[0]
  114. product = create_product(price=D('12.00'))
  115. self.client.post(reverse('basket:add'), {'product_id': product.id,
  116. 'quantity': 1})
  117. basket = Basket.objects.all()[0]
  118. basket.strategy = strategy.Default()
  119. self.assertEquals(len(basket.all_lines()), 1)
  120. # try to reorder a product
  121. self.client.post(reverse('customer:order',
  122. args=(order.number,)),
  123. {'order_id': order.pk,
  124. 'action': 'reorder'})
  125. self.assertEqual(len(basket.all_lines()), 1)
  126. self.assertNotEqual(line.product.pk, product.pk)
  127. @patch('django.conf.settings.OSCAR_MAX_BASKET_QUANTITY_THRESHOLD', 1)
  128. def test_cannot_reorder_line_when_basket_maximum_exceeded(self):
  129. order = create_order(user=self.user)
  130. line = order.lines.all()[0]
  131. # add a product
  132. product = create_product(price=D('12.00'))
  133. self.client.post(reverse('basket:add'), {'product_id': product.id,
  134. 'quantity': 1})
  135. basket = Basket.objects.all()[0]
  136. basket.strategy = strategy.Default()
  137. self.assertEquals(len(basket.all_lines()), 1)
  138. self.client.post(reverse('customer:order-line',
  139. args=(order.number, line.pk)),
  140. {'action': 'reorder'})
  141. self.assertEquals(len(basket.all_lines()), 1)
  142. self.assertNotEqual(line.product.pk, product.pk)