| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- from django_webtest import WebTest
- from django.core.urlresolvers import reverse
- from django.core import mail
- from django_dynamic_fixture import G
-
- from oscar.test.factories import create_product, create_stockrecord
- from oscar.core.compat import get_user_model
- from oscar.apps.customer.models import ProductAlert
-
-
- User = get_user_model()
-
-
- class TestAUser(WebTest):
-
- def test_can_create_a_stock_alert(self):
- user = G(User)
- product = create_product(num_in_stock=0)
- product_page = self.app.get(product.get_absolute_url(), user=user)
- form = product_page.forms['alert_form']
- form.submit()
-
- alerts = ProductAlert.objects.filter(user=user)
- self.assertEqual(1, len(alerts))
- alert = alerts[0]
- self.assertEqual(ProductAlert.ACTIVE, alert.status)
- self.assertEqual(alert.product, product)
-
-
- class TestAUserWithAnActiveStockAlert(WebTest):
-
- def setUp(self):
- self.user = G(User)
- self.product = create_product()
- self.stockrecord = create_stockrecord(self.product, num_in_stock=0)
- product_page = self.app.get(self.product.get_absolute_url(),
- user=self.user)
- form = product_page.forms['alert_form']
- form.submit()
-
- def test_can_cancel_it(self):
- alerts = ProductAlert.objects.filter(user=self.user)
- self.assertEqual(1, len(alerts))
- alert = alerts[0]
- self.assertFalse(alert.is_cancelled)
- self.app.get(reverse('customer:alerts-cancel-by-pk',
- kwargs={'pk': alert.pk}),
- user=self.user)
-
- alerts = ProductAlert.objects.filter(user=self.user)
- self.assertEqual(1, len(alerts))
- alert = alerts[0]
- self.assertTrue(alert.is_cancelled)
-
-
- def test_gets_notified_when_it_is_back_in_stock(self):
- self.stockrecord.num_in_stock = 10
- self.stockrecord.save()
- self.assertEqual(1, self.user.notifications.all().count())
-
- def test_gets_emailed_when_it_is_back_in_stock(self):
- self.stockrecord.num_in_stock = 10
- self.stockrecord.save()
- self.assertEqual(1, len(mail.outbox))
-
- def test_does_not_get_emailed_when_it_is_saved_but_still_zero_stock(self):
- self.stockrecord.num_in_stock = 0
- self.stockrecord.save()
- self.assertEqual(0, len(mail.outbox))
-
-
- class TestAnAnonymousUser(WebTest):
-
- def test_can_create_a_stock_alert(self):
- product = create_product(num_in_stock=0)
- product_page = self.app.get(product.get_absolute_url())
- form = product_page.forms['alert_form']
- form['email'] = 'john@smith.com'
- form.submit()
-
- alerts = ProductAlert.objects.filter(email='john@smith.com')
- self.assertEqual(1, len(alerts))
- alert = alerts[0]
- self.assertEqual(ProductAlert.UNCONFIRMED, alert.status)
- self.assertEqual(alert.product, product)
|