Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
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_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)
Пример #6
0
    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])
Пример #7
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)
Пример #9
0
    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]
Пример #10
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')))
Пример #11
0
    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_migrate_alerts_to_user(self):
     user = UserFactory(email='*****@*****.**')
     ProductAlertFactory(email=user.email)
     user._migrate_alerts_to_user()
     assert user.alerts.count() == 1