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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from django_webtest import WebTest
  2. from django.core.urlresolvers import reverse
  3. from django.core import mail
  4. from oscar.apps.customer.models import ProductAlert
  5. from oscar.test.factories import create_product, create_stockrecord
  6. from oscar.test.factories import UserFactory
  7. class TestAUser(WebTest):
  8. def test_can_create_a_stock_alert(self):
  9. user = UserFactory()
  10. product = create_product(num_in_stock=0)
  11. product_page = self.app.get(product.get_absolute_url(), user=user)
  12. form = product_page.forms['alert_form']
  13. form.submit()
  14. alerts = ProductAlert.objects.filter(user=user)
  15. self.assertEqual(1, len(alerts))
  16. alert = alerts[0]
  17. self.assertEqual(ProductAlert.ACTIVE, alert.status)
  18. self.assertEqual(alert.product, product)
  19. class TestAUserWithAnActiveStockAlert(WebTest):
  20. def setUp(self):
  21. self.user = UserFactory()
  22. self.product = create_product()
  23. self.stockrecord = create_stockrecord(self.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. alerts = ProductAlert.objects.filter(user=self.user)
  30. self.assertEqual(1, len(alerts))
  31. alert = alerts[0]
  32. self.assertFalse(alert.is_cancelled)
  33. self.app.get(
  34. reverse('customer:alerts-cancel-by-pk', kwargs={'pk': alert.pk}),
  35. user=self.user)
  36. alerts = ProductAlert.objects.filter(user=self.user)
  37. self.assertEqual(1, len(alerts))
  38. alert = alerts[0]
  39. self.assertTrue(alert.is_cancelled)
  40. def test_gets_notified_when_it_is_back_in_stock(self):
  41. self.stockrecord.num_in_stock = 10
  42. self.stockrecord.save()
  43. self.assertEqual(1, self.user.notifications.all().count())
  44. def test_gets_emailed_when_it_is_back_in_stock(self):
  45. self.stockrecord.num_in_stock = 10
  46. self.stockrecord.save()
  47. self.assertEqual(1, len(mail.outbox))
  48. def test_does_not_get_emailed_when_it_is_saved_but_still_zero_stock(self):
  49. self.stockrecord.num_in_stock = 0
  50. self.stockrecord.save()
  51. self.assertEqual(0, len(mail.outbox))
  52. class TestAnAnonymousUser(WebTest):
  53. def test_can_create_a_stock_alert(self):
  54. product = create_product(num_in_stock=0)
  55. product_page = self.app.get(product.get_absolute_url())
  56. form = product_page.forms['alert_form']
  57. form['email'] = 'john@smith.com'
  58. form.submit()
  59. alerts = ProductAlert.objects.filter(email='john@smith.com')
  60. self.assertEqual(1, len(alerts))
  61. alert = alerts[0]
  62. self.assertEqual(ProductAlert.UNCONFIRMED, alert.status)
  63. self.assertEqual(alert.product, product)