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

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