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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from django_webtest import WebTest
  2. from django.contrib.auth.models import User
  3. from django.core.urlresolvers import reverse
  4. from django.core import mail
  5. from django_dynamic_fixture import G
  6. from oscar.test.helpers import create_product
  7. from oscar.apps.customer.models import ProductAlert
  8. class TestAUser(WebTest):
  9. def test_can_create_a_stock_alert(self):
  10. user = G(User)
  11. product = create_product(num_in_stock=0)
  12. product_page = self.app.get(product.get_absolute_url(), user=user)
  13. form = product_page.forms['alert_form']
  14. form.submit()
  15. alerts = ProductAlert.objects.filter(user=user)
  16. self.assertEqual(1, len(alerts))
  17. alert = alerts[0]
  18. self.assertEqual(ProductAlert.ACTIVE, alert.status)
  19. self.assertEqual(alert.product, product)
  20. class TestAUserWithAnActiveStockAlert(WebTest):
  21. def setUp(self):
  22. self.user = G(User)
  23. self.product = create_product(num_in_stock=0)
  24. product_page = self.app.get(self.product.get_absolute_url(),
  25. user=self.user)
  26. form = product_page.forms['alert_form']
  27. form.submit()
  28. def test_can_cancel_it(self):
  29. account_page = self.app.get(reverse('customer:summary'),
  30. user=self.user)
  31. form = account_page.forms['alerts_form']
  32. form.submit('cancel_alert')
  33. alerts = ProductAlert.objects.filter(user=self.user)
  34. self.assertEqual(1, len(alerts))
  35. alert = alerts[0]
  36. self.assertTrue(alert.is_cancelled)
  37. def test_gets_notified_when_it_is_back_in_stock(self):
  38. self.product.stockrecord.num_in_stock = 10
  39. self.product.stockrecord.save()
  40. self.assertEqual(1, self.user.notifications.all().count())
  41. def test_gets_emailed_when_it_is_back_in_stock(self):
  42. self.product.stockrecord.num_in_stock = 10
  43. self.product.stockrecord.save()
  44. self.assertEqual(1, len(mail.outbox))
  45. def test_does_not_get_emailed_when_it_is_saved_but_still_zero_stock(self):
  46. self.product.stockrecord.num_in_stock = 0
  47. self.product.stockrecord.save()
  48. self.assertEqual(0, len(mail.outbox))
  49. class TestAnAnonymousUser(WebTest):
  50. def test_can_create_a_stock_alert(self):
  51. product = create_product(num_in_stock=0)
  52. product_page = self.app.get(product.get_absolute_url())
  53. form = product_page.forms['alert_form']
  54. form['email'] = 'john@smith.com'
  55. form.submit()
  56. alerts = ProductAlert.objects.filter(email='john@smith.com')
  57. self.assertEqual(1, len(alerts))
  58. alert = alerts[0]
  59. self.assertEqual(ProductAlert.UNCONFIRMED, alert.status)
  60. self.assertEqual(alert.product, product)