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.

alert_tests.py 2.8KB

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