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 6.8KB

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