def test_list_view_status_filtering(self): ProductAlertFactory.create_batch(3, status=ProductAlert.CANCELLED) ProductAlertFactory.create_batch(2, status=ProductAlert.ACTIVE) response = self.get(reverse('dashboard:user-alert-list'), params={'status': ProductAlert.ACTIVE}) self.assertEqual(len(response.context['alerts']), 2)
def test_can_cancel_unconfirmed_stock_alert(self): alert = ProductAlertFactory( user=None, email='*****@*****.**', status=ProductAlert.UNCONFIRMED) self.app.get( reverse('customer:alerts-cancel-by-key', kwargs={'key': alert.key})) alert.refresh_from_db() self.assertTrue(alert.is_cancelled)
def test_list_view_get_queryset_ordering(self): ProductAlertFactory.create_batch(3) response = self.get(reverse('dashboard:user-alert-list')) self.assertEqual( list(response.context['alerts']), list(ProductAlert.objects.order_by('-date_created')) )
def test_send_product_alert_confirmation_email_for_user(self): product = create_product(num_in_stock=5) alert = ProductAlertFactory(product=product, user=self.user, email=self.user.email, key='key00042') self.dispatcher.send_product_alert_confirmation_email_for_user(alert) self._test_common_part() self.assertEqual('Confirmation required for stock alert', mail.outbox[0].subject) self.assertIn('Somebody (hopefully you) has requested an email alert', mail.outbox[0].body) self.assertIn(alert.get_confirm_url(), mail.outbox[0].body) self.assertIn(alert.get_cancel_url(), mail.outbox[0].body)
def test_send_product_alert_email_for_user_with_hurry_mode(self): another_user = UserFactory(email='*****@*****.**') product = create_product(num_in_stock=1) ProductAlertFactory(product=product, user=self.user, email=self.user.email) ProductAlertFactory(product=product, user=another_user, email=another_user.email) self.dispatcher.send_product_alert_email_for_user(product) self.assertEqual(len(mail.outbox), 2) # Separate email for each user expected_subject = '{} is back in stock'.format(product.title) self.assertEqual(expected_subject, mail.outbox[0].subject) for outboxed_email in mail.outbox: self.assertEqual(expected_subject, outboxed_email.subject) self.assertIn('We are happy to inform you that our product', outboxed_email.body) self.assertIn('Beware that the amount of items in stock is limited.', outboxed_email.body)
def test_cannot_create_multiple_alerts_for_one_product(self): product = create_product(num_in_stock=0) alert = ProductAlertFactory(user=None, product=product, email='*****@*****.**') alert.status = ProductAlert.ACTIVE alert.save() # Alert form should not allow creation of additional alerts. form = ProductAlertForm(user=AnonymousUser(), product=product, data={'email': '*****@*****.**'}) self.assertFalse(form.is_valid()) self.assertIn( "There is already an active stock alert for [email protected]", form.errors['__all__'][0])
def test_cannot_create_multiple_alerts_for_one_product(self): ProductAlertFactory(user=self.user, product=self.product, status=ProductAlert.ACTIVE) # Alert form should not allow creation of additional alerts. form = ProductAlertForm(user=self.user, product=self.product, data={}) assert not form.is_valid() assert "You already have an active alert for this product" in form.errors[ '__all__'][0]
def test_send_product_alert_email_for_user(self): product = create_product(num_in_stock=5) ProductAlertFactory(product=product, user=self.user) self.dispatcher.send_product_alert_email_for_user(product) self._test_common_part() expected_subject = '{} is back in stock'.format(product.title) self.assertEqual(expected_subject, mail.outbox[0].subject) self.assertIn('We are happy to inform you that our product', mail.outbox[0].body) # No `hurry_mode` self.assertNotIn('Beware that the amount of items in stock is limited.', mail.outbox[0].body)
def test_cannot_create_multiple_unconfirmed_alerts(self): # Create an unconfirmed alert ProductAlertFactory(user=None, email='*****@*****.**', status=ProductAlert.UNCONFIRMED) # Alert form should not allow creation of additional alerts. form = ProductAlertForm( user=AnonymousUser(), product=create_product(num_in_stock=0), data={'email': '*****@*****.**'}, ) assert not form.is_valid() message = "[email protected] has been sent a confirmation email for another product alert on this site." assert message in form.errors['__all__'][0]
def test_list_view_get_queryset_ordering(self): ProductAlertFactory.create_batch(3) response = self.get(reverse('dashboard:user-alert-list')) self.assertEqual(list(response.context['alerts']), list(ProductAlert.objects.order_by('-date_created')))
def test_migrate_alerts_to_user(self): user = UserFactory(email='*****@*****.**') ProductAlertFactory(email=user.email) user._migrate_alerts_to_user() assert user.alerts.count() == 1