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.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. alerts = ProductAlert.objects.filter(user=self.user)
  32. self.assertEqual(1, len(alerts))
  33. alert = alerts[0]
  34. self.assertFalse(alert.is_cancelled)
  35. self.app.get(reverse('customer:alerts-cancel-by-pk',
  36. kwargs={'pk': alert.pk}),
  37. user=self.user)
  38. alerts = ProductAlert.objects.filter(user=self.user)
  39. self.assertEqual(1, len(alerts))
  40. alert = alerts[0]
  41. self.assertTrue(alert.is_cancelled)
  42. def test_gets_notified_when_it_is_back_in_stock(self):
  43. self.stockrecord.num_in_stock = 10
  44. self.stockrecord.save()
  45. self.assertEqual(1, self.user.notifications.all().count())
  46. def test_gets_emailed_when_it_is_back_in_stock(self):
  47. self.stockrecord.num_in_stock = 10
  48. self.stockrecord.save()
  49. self.assertEqual(1, len(mail.outbox))
  50. def test_does_not_get_emailed_when_it_is_saved_but_still_zero_stock(self):
  51. self.stockrecord.num_in_stock = 0
  52. self.stockrecord.save()
  53. self.assertEqual(0, len(mail.outbox))
  54. class TestAnAnonymousUser(WebTest):
  55. def test_can_create_a_stock_alert(self):
  56. product = create_product(num_in_stock=0)
  57. product_page = self.app.get(product.get_absolute_url())
  58. form = product_page.forms['alert_form']
  59. form['email'] = 'john@smith.com'
  60. form.submit()
  61. alerts = ProductAlert.objects.filter(email='john@smith.com')
  62. self.assertEqual(1, len(alerts))
  63. alert = alerts[0]
  64. self.assertEqual(ProductAlert.UNCONFIRMED, alert.status)
  65. self.assertEqual(alert.product, product)